Author: Pekka Riikonen <priikone@silcnet.org>
- Copyright (C) 1997 - 2008 Pekka Riikonen
+ Copyright (C) 1997 - 2009 Pekka Riikonen
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
SilcBuffer tmpreply;
int i;
- SILC_LOG_DEBUG(("Timeout pending command"));
+ SILC_LOG_DEBUG(("Timeout pending command %p", reply));
/* Allocate temporary and bogus command reply context */
cmdr = silc_calloc(1, sizeof(*cmdr));
SilcClientID *client_id = (SilcClientID *)q->sock;
SilcClientEntry client;
SilcPacketStream sock;
+ SilcIDListData idata;
+
client = silc_idlist_find_client_by_id(server->local_list, client_id,
TRUE, NULL);
if (client && client->connection) {
sock = client->connection;
+ SILC_LOG_DEBUG(("Detaching client %s",
+ silc_id_render(client->id, SILC_ID_CLIENT)));
+
+ /* Stop rekey for the client. */
+ silc_server_stop_rekey(server, client);
+
+ /* Abort any active protocol */
+ idata = silc_packet_get_context(sock);
+ if (idata && idata->sconn && idata->sconn->op) {
+ SILC_LOG_DEBUG(("Abort active protocol"));
+ silc_async_abort(idata->sconn->op, NULL, NULL);
+ idata->sconn->op = NULL;
+ }
+
/* Close the connection on our side */
client->router = NULL;
client->connection = NULL;
silc_server_close_connection(server, sock);
+ /* Mark the client as locally detached. */
+ client->local_detached = TRUE;
+
/*
* Decrement the user count; we'll increment it if the user resumes on our
* server.