SILC_LOG_DEBUG(("Start"));
+ if (!sock && !conn)
+ return;
+
if (!sock || (sock && conn->sock == sock))
del = TRUE;
if (!sock)
/* Unregister all tasks */
silc_schedule_task_del_by_fd(client->schedule, sock->sock);
- silc_schedule_task_del_by_fd(client->schedule, sock->sock);
/* Close the actual connection */
silc_net_close_connection(sock->sock);
/* Free all cache entries */
SilcIDCacheList list;
SilcIDCacheEntry entry;
+ SilcClientCommandPending *r;
bool ret;
if (silc_idcache_get_all(conn->client_cache, &list)) {
silc_hmac_free(conn->hmac_send);
if (conn->hmac_receive)
silc_hmac_free(conn->hmac_receive);
- if (conn->pending_commands)
- silc_dlist_uninit(conn->pending_commands);
if (conn->rekey)
silc_free(conn->rekey);
silc_client_ftp_free_sessions(client, conn);
+ silc_dlist_start(conn->pending_commands);
+ while ((r = silc_dlist_get(conn->pending_commands)) != SILC_LIST_END)
+ silc_dlist_del(conn->pending_commands, r);
+ if (conn->pending_commands)
+ silc_dlist_uninit(conn->pending_commands);
+
memset(conn, 0, sizeof(*conn));
silc_client_del_connection(client, conn);
}
if (packet->len > 1 &&
silc_utf8_valid(packet->data + 1, packet->len - 1))
- message = silc_memdup(packet->data, packet->len);
+ message = silc_memdup(packet->data + 1, packet->len - 1);
client->internal->ops->say(client, sock->user_data,
SILC_CLIENT_MESSAGE_AUDIT,