From: Pekka Riikonen Date: Sat, 13 Dec 2008 20:02:18 +0000 (+0200) Subject: Merge branch 'topic/detach-fixes' of git://valera-ext.nynaeve.net/silc into silc... X-Git-Tag: silc.toolkit.1.1.9~7 X-Git-Url: http://git.silcnet.org/gitweb/?a=commitdiff_plain;h=5b480c5339b4e5f52a0aa91c6a9e3c661466ebc8;hp=-c;p=silc.git Merge branch 'topic/detach-fixes' of git://valera-ext.nynaeve.net/silc into silc.1.1.branch --- 5b480c5339b4e5f52a0aa91c6a9e3c661466ebc8 diff --combined apps/silcd/server.c index 777d7243,3d0623ac..2f97d79d --- a/apps/silcd/server.c +++ b/apps/silcd/server.c @@@ -233,10 -233,7 +233,10 @@@ SILC_TASK_CALLBACK(silc_server_packet_e if (server->router_conn && server->router_conn->sock == stream && !server->router && server->standalone) { + if (idata->sconn && idata->sconn->callback) + (*idata->sconn->callback)(server, NULL, idata->sconn->callback_context); silc_server_create_connections(server); + silc_server_free_sock_user_data(server, stream, NULL); } else { /* If backup disconnected then mark that resuming will not be allowed */ if (server->server_type == SILC_ROUTER && !server->backup_router && @@@ -283,14 -280,9 +283,14 @@@ static void silc_server_packet_error(Si if (!silc_packet_stream_is_valid(stream)) return; + /* In case we get here many times, register only one timeout */ + silc_schedule_task_del_by_all(server->schedule, 0, + silc_server_packet_error_timeout, stream); + + /* Close connection with random timeout */ silc_schedule_task_add_timeout(server->schedule, silc_server_packet_error_timeout, stream, - silc_rng_get_byte(server->rng) % 5, 0); + silc_rng_get_byte(server->rng) % 10, 0); } /* Packet stream callbacks */ @@@ -2911,6 -2903,18 +2911,18 @@@ static void silc_server_rekey_completio sock, idata->sconn->rekey_timeout, 0); } + /* Helper to stop future rekeys on a link. */ + void silc_server_stop_rekey(SilcServer server, SilcClientEntry client) + { + if (!client->connection) + return; + + SILC_LOG_DEBUG(("Stopping rekey for client %p", client)); + + silc_schedule_task_del_by_all(server->schedule, 0, silc_server_do_rekey, + client->connection); + } + /* Rekey callback. Start rekey as initiator */ SILC_TASK_CALLBACK(silc_server_do_rekey)