+ char *tmp_nick;
+
+ /* Check whether nickname changed at all. It is possible that nick
+ change notify is received but nickname didn't changed, only the
+ ID changes. */
+ if (client->internal->params->nickname_parse)
+ client->internal->params->nickname_parse(client_entry->nickname,
+ &tmp_nick);
+ else
+ tmp_nick = strdup(tmp);
+
+ if (!strcmp(tmp, tmp_nick)) {
+ /* Nickname didn't change. Update only the ID */
+ silc_idcache_del_by_context(conn->client_cache, client_entry);
+ silc_free(client_entry->id);
+ client_entry->id = silc_id_dup(client_id, SILC_ID_CLIENT);
+ silc_idcache_add(conn->client_cache, strdup(tmp),
+ client_entry->id, client_entry, 0, NULL);
+
+ /* Notify application */
+ client->internal->ops->notify(client, conn, type,
+ client_entry, client_entry);
+ break;
+ }
+ silc_free(tmp_nick);