- SilcUInt32 tmp_len;
- unsigned char *tmp = silc_argument_get_arg_type(cmd->args, 2, &tmp_len);
- if (tmp) {
- SilcClientID *client_id = silc_id_payload_parse_id(tmp, tmp_len, NULL);
- if (client_id) {
- SILC_LOG_DEBUG(("Received invalid client ID notification, deleting "
- "the entry from cache"));
- client = silc_idlist_find_client_by_id(server->global_list,
- client_id, FALSE, NULL);
- if (client) {
-
- if (client->data.public_key)
- silc_hash_table_del_by_context(server->pk_hash,
- client->data.public_key,
- client);
-
- silc_server_remove_from_channels(server, NULL, client, TRUE,
- NULL, TRUE, FALSE);
- silc_idlist_del_data(client);
- silc_idlist_del_client(server->global_list, client);
- }
- silc_free(client_id);
- }
+ SilcID id;
+ if (silc_argument_get_decoded(cmd->args, 2, SILC_ARGUMENT_ID, &id,
+ NULL)) {
+ SILC_LOG_DEBUG(("Received invalid client ID notification, deleting "
+ "the entry from cache"));
+ client = silc_idlist_find_client_by_id(server->global_list,
+ SILC_ID_GET_ID(id), FALSE, NULL);
+ if (!client)
+ return;
+
+ silc_server_remove_from_channels(server, NULL, client, TRUE,
+ NULL, TRUE, FALSE);
+ silc_dlist_del(server->expired_clients, client);
+ silc_idlist_del_data(client);
+ silc_idlist_del_client(server->global_list, client);