updates
authorPekka Riikonen <priikone@silcnet.org>
Fri, 25 Jan 2002 18:36:11 +0000 (18:36 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Fri, 25 Jan 2002 18:36:11 +0000 (18:36 +0000)
CHANGES
apps/silcd/server.c
apps/silcd/server.h

diff --git a/CHANGES b/CHANGES
index f843b00b73de48b3d797aad4ab2b1a7090e72db0..57af8b8aa3325296a4ce2739b9e84f84ffd2b335 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -11,6 +11,12 @@ Fri Jan 25 19:12:36 EET 2002  Pekka Riikonen <priikone@silcnet.org>
        * Raised the default connection-retry count from 4 to 7 in
          server.  Affected file silcd/server.h.
 
+       * Cancel any possible reconnect timeouts when we start the
+         key exchange.  Affected file silcd/server.c.
+
+       * Do not reconnect on connection failure when SCONNECT was
+         given.  Affected files silcd/server.[ch].
+
 Tue Jan 22 18:19:36 EET 2002  Pekka Riikonen <priikone@silcnet.org>
 
        * Removed assert()'s from the lib/silcclient/client_keyagr.c.
index 509453855b6313d4bf727fdf2d0bc6c20248e6b1..e894d964ae17e06a933a14f55ab6310fbef332fe 100644 (file)
@@ -525,6 +525,10 @@ void silc_server_start_key_exchange(SilcServer server,
   SilcServerKEInternalContext *proto_ctx;
   void *context;
 
+  /* Cancel any possible retry timeouts */
+  silc_schedule_task_del_by_callback(server->schedule,
+                                    silc_server_connect_router);
+
   /* Set socket options */
   silc_net_set_socket_nonblock(sock);
   silc_net_set_socket_opt(sock, SOL_SOCKET, SO_REUSEADDR, 1);
@@ -638,11 +642,13 @@ SILC_TASK_CALLBACK(silc_server_connect_router)
                                    sconn->remote_port, 
                                    sconn->remote_host);
   if (sock < 0) {
-    SILC_LOG_ERROR(("Could not connect to router"));
-    silc_schedule_task_add(server->schedule, fd, 
-                          silc_server_connect_to_router_retry,
-                          context, 0, 1, SILC_TASK_TIMEOUT, 
-                          SILC_TASK_PRI_NORMAL);
+    SILC_LOG_ERROR(("Could not connect to router %s:%d",
+                   sconn->remote_host, sconn->remote_port));
+    if (!sconn->no_reconnect)
+      silc_schedule_task_add(server->schedule, fd, 
+                            silc_server_connect_to_router_retry,
+                            context, 0, 1, SILC_TASK_TIMEOUT, 
+                            SILC_TASK_PRI_NORMAL);
     return;
   }
 
@@ -2209,7 +2215,7 @@ void silc_server_packet_parse_type(SilcServer server,
 /* Creates connection to a remote router. */
 
 void silc_server_create_connection(SilcServer server,
-                                  char *remote_host, uint32 port)
+                                  const char *remote_host, uint32 port)
 {
   SilcServerConnection sconn;
 
@@ -2218,6 +2224,7 @@ void silc_server_create_connection(SilcServer server,
   sconn->server = server;
   sconn->remote_host = strdup(remote_host);
   sconn->remote_port = port;
+  sconn->no_reconnect = TRUE;
 
   silc_schedule_task_add(server->schedule, 0, 
                         silc_server_connect_router,
index 012d1edfb56fb2e400a45c5fc957a35ece73f033..65ab966e51115a25809f265c020d6ecedb4d428c 100644 (file)
@@ -86,6 +86,7 @@ typedef struct {
   bool backup;
   char *backup_replace_ip;
   int backup_replace_port;
+  bool no_reconnect;
   
   /* Current connection retry info */
   uint32 retry_count;
@@ -133,7 +134,7 @@ void silc_server_packet_parse_type(SilcServer server,
                                   SilcSocketConnection sock,
                                   SilcPacketContext *packet);
 void silc_server_create_connection(SilcServer server,
-                                  char *remote_host, uint32 port);
+                                  const char *remote_host, uint32 port);
 void silc_server_close_connection(SilcServer server,
                                  SilcSocketConnection sock);
 void silc_server_free_client_data(SilcServer server,