X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcclient%2Fclient_prvmsg.c;h=88bedabea4158f8e72481fa7591307c9aceefb68;hb=386c883d8774999c6e74d7c6c37e52e4163a4cb1;hp=2f10542746658fd3fe4856463164d5e79c93933c;hpb=b3c198997d2adb79fb3c2e48cba9d0511badd9f0;p=silc.git diff --git a/lib/silcclient/client_prvmsg.c b/lib/silcclient/client_prvmsg.c index 2f105427..88bedabe 100644 --- a/lib/silcclient/client_prvmsg.c +++ b/lib/silcclient/client_prvmsg.c @@ -147,7 +147,6 @@ void silc_client_private_message(SilcClient client, { SilcClientConnection conn = (SilcClientConnection)sock->user_data; SilcPrivateMessagePayload payload = NULL; - SilcIDCacheEntry id_cache; SilcClientID *remote_id = NULL; SilcClientEntry remote_client; SilcMessageFlags flags; @@ -161,14 +160,9 @@ void silc_client_private_message(SilcClient client, goto out; /* Check whether we know this client already */ - if (!silc_idcache_find_by_id_one_ext(conn->client_cache, (void *)remote_id, - NULL, NULL, - silc_hash_client_id_compare, NULL, - &id_cache) || - ((SilcClientEntry)id_cache->context)->nickname == NULL) { - - if (id_cache && id_cache->context) { - remote_client = (SilcClientEntry)id_cache->context; + remote_client = silc_client_get_client_by_id(client, conn, remote_id); + if (!remote_client || !remote_client->nickname) { + if (remote_client) { if (remote_client->status & SILC_CLIENT_STATUS_RESOLVING) { remote_client->status &= ~SILC_CLIENT_STATUS_RESOLVING; goto out; @@ -183,10 +177,9 @@ void silc_client_private_message(SilcClient client, return; } - remote_client = (SilcClientEntry)id_cache->context; - /* Parse the payload and decrypt it also if private message key is set */ - payload = silc_private_message_payload_parse(packet->buffer, + payload = silc_private_message_payload_parse(packet->buffer->data, + packet->buffer->len, remote_client->receive_key); if (!payload) { silc_free(remote_id); @@ -196,9 +189,10 @@ void silc_client_private_message(SilcClient client, flags = silc_private_message_get_flags(payload); /* Pass the private message to application */ - client->ops->private_message(client, conn, remote_client, flags, - silc_private_message_get_message(payload, - NULL)); + client->internal->ops->private_message( + client, conn, remote_client, flags, + silc_private_message_get_message(payload, + NULL)); /* See if we are away (gone). If we are away we will reply to the sender with the set away message. */ @@ -255,14 +249,15 @@ static void silc_client_private_message_key_cb(SilcClient client, goto out; /* Print some info for application */ - client->ops->say(client, conn, SILC_CLIENT_MESSAGE_AUDIT, - "Received private message key from %s%s%s %s%s%s", - clients[0]->nickname, - clients[0]->server ? "@" : "", - clients[0]->server ? clients[0]->server : "", - clients[0]->username ? "(" : "", - clients[0]->username ? clients[0]->username : "", - clients[0]->username ? ")" : ""); + client->internal->ops->say( + client, conn, SILC_CLIENT_MESSAGE_AUDIT, + "Received private message key from %s%s%s %s%s%s", + clients[0]->nickname, + clients[0]->server ? "@" : "", + clients[0]->server ? clients[0]->server : "", + clients[0]->username ? "(" : "", + clients[0]->username ? clients[0]->username : "", + clients[0]->username ? ")" : ""); out: silc_packet_context_free(packet); @@ -349,14 +344,13 @@ int silc_client_add_private_message_key(SilcClient client, } /* Save the key */ - client_entry->key = silc_calloc(key_len, sizeof(*client_entry->key)); - memcpy(client_entry->key, key, key_len); + client_entry->key = silc_memdup(key, key_len); client_entry->key_len = key_len; /* Produce the key material as the protocol defines */ keymat = silc_calloc(1, sizeof(*keymat)); if (silc_ske_process_key_material_data(key, key_len, 16, 256, 16, - client->md5hash, keymat) + client->internal->md5hash, keymat) != SILC_SKE_STATUS_OK) return FALSE;