SilcChannelID *id = NULL;
SilcChannelEntry channel;
SilcIDCacheEntry id_cache = NULL;
+ SilcClientID *client_id = NULL;
+ int i;
+ char *nickname;
/* Sanity checks */
if (packet->dst_id_type != SILC_ID_CHANNEL)
goto out;
+ client_id = silc_id_str2id(packet->src_id, SILC_ID_CLIENT);
id = silc_id_str2id(packet->dst_id, SILC_ID_CHANNEL);
/* Find the channel entry from channels on this connection */
if (!payload)
goto out;
+ nickname = silc_channel_get_nickname(payload, NULL);
+ if (!nickname)
+ goto out;
+
+ for (i = 0; i < channel->clients_count; i++) {
+ if (channel->clients[i] &&
+ !SILC_ID_CLIENT_COMPARE(channel->clients[i]->id, client_id))
+ nickname = channel->clients[i]->nickname;
+ }
+
/* Pass the message to application */
if (packet->src_id_type == SILC_ID_CLIENT) {
- client->ops->channel_message(client, conn,
- silc_channel_get_nickname(payload, NULL),
+ client->ops->channel_message(client, conn, nickname,
channel->channel_name,
silc_channel_get_data(payload, NULL));
} else {
out:
if (id)
silc_free(id);
+ if (client_id)
+ silc_free(client_id);
if (payload)
silc_channel_free_payload(payload);
}