int k;
/* This doesn't send channel message packets */
- assert(type != SILC_PACKET_CHANNEL_MESSAGE);
+ SILC_ASSERT(type != SILC_PACKET_CHANNEL_MESSAGE);
/* If there are global users in the channel we will send the message
first to our router for further routing. */
static SilcBool
silc_server_packet_relay_to_channel_encrypt(SilcServer server,
SilcPacketStream sender,
+ void *sender_id,
+ SilcIdType sender_type,
SilcChannelEntry channel,
unsigned char *data,
unsigned int data_len)
memcpy(iv, data + (data_len - iv_len - mac_len), iv_len);
- src_id.type = SILC_ID_SERVER;
- src_id.u.server_id = *((SilcServerEntry)idata)->id;
+ SILC_ASSERT(sender_type == SILC_ID_CLIENT);
+ src_id.type = SILC_ID_CLIENT;
+ src_id.u.client_id = *((SilcClientID *)sender_id);
dst_id.type = SILC_ID_CHANNEL;
dst_id.u.channel_id = *channel->id;
channel key. If the channel key does not exist, then we know we
don't have a single local user on the channel. */
if (!silc_server_packet_relay_to_channel_encrypt(server, sender_sock,
+ sender_id, sender_type,
channel, data,
data_len))
return;
tmp_len = strlen(cipher);
packet = silc_channel_key_payload_encode(cid_len, cid, tmp_len, cipher,
channel->key_len / 8, channel->key);
- silc_server_packet_send_to_channel(server, sender, channel,
- SILC_PACKET_CHANNEL_KEY,
- route, TRUE, packet->data,
- silc_buffer_len(packet));
+ if (packet)
+ silc_server_packet_send_to_channel(server, sender, channel,
+ SILC_PACKET_CHANNEL_KEY,
+ route, TRUE, packet->data,
+ silc_buffer_len(packet));
silc_buffer_free(packet);
}