From 4fc5205b75bdeefe62ace307e8fc024895c776a0 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Sun, 8 Sep 2002 10:38:25 +0000 Subject: [PATCH] Send SERVER_SIGNOFF to local backup routers from primary router. Handle the disconnection of locally connected server correctly on backup router; the server is really originated from the primary router. --- CHANGES | 14 ++++++++++++++ apps/silcd/packet_receive.c | 2 +- apps/silcd/server.c | 13 ++++++++++--- apps/silcd/server_util.c | 4 ++++ doc/draft-riikonen-silc-pp-06.nroff | 2 +- 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/CHANGES b/CHANGES index 88849064..e6e65d8f 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,17 @@ +Sun Sep 8 13:13:44 EEST 2002 Pekka Riikonen + + * 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 * If normal server is standalone and found existing but disabled diff --git a/apps/silcd/packet_receive.c b/apps/silcd/packet_receive.c index d3f03aae..b3828beb 100644 --- a/apps/silcd/packet_receive.c +++ b/apps/silcd/packet_receive.c @@ -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); diff --git a/apps/silcd/server.c b/apps/silcd/server.c index 10c72d22..3126c396 100644 --- a/apps/silcd/server.c +++ b/apps/silcd/server.c @@ -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) diff --git a/apps/silcd/server_util.c b/apps/silcd/server_util.c index 59102d13..93f2d5bd 100644 --- a/apps/silcd/server_util.c +++ b/apps/silcd/server_util.c @@ -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++) diff --git a/doc/draft-riikonen-silc-pp-06.nroff b/doc/draft-riikonen-silc-pp-06.nroff index 776912ec..4acfccd9 100644 --- a/doc/draft-riikonen-silc-pp-06.nroff +++ b/doc/draft-riikonen-silc-pp-06.nroff @@ -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) (n) [] [...] The is the server's ID. The rest of the arguments -- 2.24.0