- if (!silc_idcache_find_by_id_one(conn->client_cache, remote_id,
- SILC_ID_CLIENT, &id_cache))
- {
- /* Allocate client entry */
- remote_client = silc_calloc(1, sizeof(*remote_client));
- remote_client->id = remote_id;
- silc_parse_nickname(nickname, &remote_client->nickname,
- &remote_client->server, &remote_client->num);
-
- /* Save the client to cache */
- silc_idcache_add(conn->client_cache, remote_client->nickname,
- SILC_ID_CLIENT, remote_client->id, remote_client,
- TRUE);
- } else {
- 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;
+ }
+ remote_client->status |= SILC_CLIENT_STATUS_RESOLVING;