X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=apps%2Fsilcd%2Fserver.c;h=d6a4d4e220e7cc229ec04618143537b92a54f083;hp=f90aca67e2ba55daa6568bd6ea54f9dbf4777fd8;hb=e8c2b7b9cabcf221862e7d91a1a7a1e0d6f02dd8;hpb=6493ad0f849286d972031f20c6eed45140d5e0a7 diff --git a/apps/silcd/server.c b/apps/silcd/server.c index f90aca67..d6a4d4e2 100644 --- a/apps/silcd/server.c +++ b/apps/silcd/server.c @@ -689,6 +689,9 @@ SILC_TASK_CALLBACK(silc_server_connect_to_router) sconn->backup_replace_port = ptr->backup_replace_port; } + if (!server->router_conn && !sconn->backup) + server->router_conn = sconn; + silc_schedule_task_add(server->schedule, fd, silc_server_connect_router, (void *)sconn, 0, 1, SILC_TASK_TIMEOUT, @@ -988,6 +991,8 @@ SILC_TASK_CALLBACK(silc_server_connect_to_router_final) silc_free(sconn->backup_replace_ip); silc_free(sconn); } + if (sconn == server->router_conn) + server->router_conn = NULL; /* Free the protocol object */ if (sock->protocol == protocol) @@ -1556,6 +1561,14 @@ SILC_TASK_CALLBACK(silc_server_packet_process) if (sock->user_data) silc_server_free_sock_user_data(server, sock); + else if (server->router_conn && server->router_conn->sock == sock && + !server->router && server->standalone) + silc_schedule_task_add(server->schedule, 0, + silc_server_connect_to_router, + server, 1, 0, + SILC_TASK_TIMEOUT, + SILC_TASK_PRI_NORMAL); + silc_server_close_connection(server, sock); return; } @@ -2365,7 +2378,7 @@ void silc_server_free_sock_user_data(SilcServer server, /* Check whether we have a backup router connection */ if (!backup_router || backup_router == user_data) { silc_schedule_task_add(server->schedule, 0, - silc_server_connect_to_router, + silc_server_connect_to_router, server, 1, 0, SILC_TASK_TIMEOUT, SILC_TASK_PRI_NORMAL);