Send SERVER_SIGNOFF to local backup routers from primary router.
authorPekka Riikonen <priikone@silcnet.org>
Sun, 8 Sep 2002 10:38:25 +0000 (10:38 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Sun, 8 Sep 2002 10:38:25 +0000 (10:38 +0000)
Handle the disconnection of locally connected server correctly
on backup router; the server is really originated from the primary
router.

CHANGES
apps/silcd/packet_receive.c
apps/silcd/server.c
apps/silcd/server_util.c
doc/draft-riikonen-silc-pp-06.nroff

diff --git a/CHANGES b/CHANGES
index 8884906448b7aa201dc6686ef5e2dbe71f8668b7..e6e65d8f967dec39078861a74469e722e313abc1 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,17 @@
+Sun Sep  8 13:13:44 EEST 2002  Pekka Riikonen <priikone@silcnet.org>
+
+       * Distribute the SERVER_SIGNOFF notify also to local backup
+         routers from the primary router.  The backup router may not
+         have the signing of local server directly connected and need
+         to know about the signoff.  Affected file silcd/server_util.c.
+
+       * Use the primary router as the origin of the locally connected
+         server when it is disconnecting from the backup router since
+         that's where it really is coming from.  Now the clients from
+         the disconnecting server are removed correctly and "shadow"
+         clients are not left to the backup router.  Affected file
+         silcd/server.c.
+
 Sat Sep  7 22:26:50 EEST 2002  Pekka Riikonen <priikone@silcnet.org>
 
        * If normal server is standalone and found existing but disabled
index d3f03aae0bca0667e643715008640924f39f2955..b3828beb1a4b392db9fdfa1f1ea8c17b1f3904de 100644 (file)
@@ -1233,7 +1233,7 @@ void silc_server_notify(SilcServer server,
     /* Get server entry */
     server_entry = silc_idlist_find_server_by_id(server->global_list, 
                                                 server_id, TRUE, NULL);
-    local = TRUE;
+    local = FALSE;
     if (!server_entry) {
       server_entry = silc_idlist_find_server_by_id(server->local_list, 
                                                   server_id, TRUE, NULL);
index 10c72d22b511a8148d188dd76fe7aecce0b385b6..3126c396bc38d07897fac43d42eb5fe1932c9876 100644 (file)
@@ -3152,9 +3152,16 @@ void silc_server_free_sock_user_data(SilcServer server,
        silc_server_remove_servers_by_server(server, user_data, TRUE);
 
        /* Remove the clients that this server owns as they will become
-          invalid now too. */
-       silc_server_remove_clients_by_server(server, user_data,
-                                            user_data, TRUE);
+          invalid now too.  For backup router the server is actually
+          coming from the primary router, so mark that as the owner
+          of this entry. */
+       if (server->server_type == SILC_BACKUP_ROUTER &&
+           sock->type == SILC_SOCKET_TYPE_SERVER)
+         silc_server_remove_clients_by_server(server, server->router,
+                                              user_data, TRUE);
+       else
+         silc_server_remove_clients_by_server(server, user_data,
+                                              user_data, TRUE);
 
        /* Remove channels owned by this server */
        if (server->server_type == SILC_SERVER)
index 59102d13b1f81fedbf7b2e7585eedac037ce9f98..93f2d5bd4687cb29bf7144c295953e469e5ab070 100644 (file)
@@ -332,6 +332,10 @@ bool silc_server_remove_clients_by_server(SilcServer server,
                                    SILC_PACKET_NOTIFY, 0, FALSE,
                                    not->data, not->len, FALSE);
 
+    /* Send notify also to local backup routers */
+    silc_server_backup_send(server, NULL, SILC_PACKET_NOTIFY, 0,
+                           not->data, not->len, FALSE, TRUE);
+
     silc_buffer_free(args);
     silc_buffer_free(not);
     for (i = 0; i < argc; i++)
index 776912ec2c81f06bb02f451c14b6a084f6ecc07b..4acfccd97f3de3cd2fccecc72760379424b352dc 100644 (file)
@@ -1418,7 +1418,7 @@ UTF-8 [RFC2279] encoded.
       Sent when server quits SILC network.  Those clients from this
       server that are on channels must be removed from the channel.
 
-      Max Arguments:  2000
+      Max Arguments:  256
           Arguments:  (1) <Server ID>   (n) [<Client ID>]   [...]
 
       The <Server ID> is the server's ID.  The rest of the arguments