From: Pekka Riikonen Date: Fri, 28 Nov 2003 17:22:01 +0000 (+0000) Subject: Added the checks for backup closing connection due to error X-Git-Tag: silc.server.0.9.16~28 X-Git-Url: http://git.silcnet.org/gitweb/?a=commitdiff_plain;h=0cf0435636e1d337caa8d68ecc491c4f4172559a;p=silc.git Added the checks for backup closing connection due to error (local or remote) and thus not allow the resuming to occur in reconnect. --- diff --git a/CHANGES b/CHANGES index 50ac0652..3e545b2f 100644 --- a/CHANGES +++ b/CHANGES @@ -1,10 +1,21 @@ +Fri Nov 28 19:13:21 EET 2003 Pekka Riikonen + + * Changed the SILC_LOG_* macros to not be empty if SILC_DEBUG + is not defined. They can now be safely used in if-statements + without braces. Affected file lib/silcutil/silclog.h. + + * Added the checks for backup closing connection due to error + (local or remote) and thus not allow the resuming to occur + in reconnect. Affected files are silcd/packet_send.c + and server.c. + Tue Nov 25 15:20:59 EET 2003 Pekka Riikonen * Help file updates. Affected files in irssi/src/docs/help/in/. Wed Nov 23 20:51:21 CET 2003 Patrik Weiskircher - * Fixed channel messages across cells. Affected file + * Fixed channel messages across cells. Affected file silcd/packet_send.c Wed Nov 12 11:34:56 EET 2003 Pekka Riikonen diff --git a/apps/silcd/packet_send.c b/apps/silcd/packet_send.c index 8b4c0895..454b6b5e 100644 --- a/apps/silcd/packet_send.c +++ b/apps/silcd/packet_send.c @@ -49,8 +49,17 @@ int silc_server_packet_send_real(SilcServer server, sock->type == SILC_SOCKET_TYPE_SERVER ? "Server" : "Router"))); - if (sock->user_data) + if (sock->user_data) { + /* If backup then mark that resuming will not be allowed */ + if (server->server_type == SILC_ROUTER && !server->backup_router && + sock->type == SILC_SOCKET_TYPE_SERVER) { + SilcServerEntry server_entry = sock->user_data; + if (server_entry->server_type == SILC_BACKUP_ROUTER) + server->backup_closed = TRUE; + } + silc_server_free_sock_user_data(server, sock, NULL); + } SILC_SET_DISCONNECTING(sock); silc_server_close_connection(server, sock); return ret; @@ -776,8 +785,8 @@ silc_server_packet_relay_to_channel_encrypt(SilcServer server, } memcpy(iv, data + (data_len - iv_len - mac_len), iv_len); - silc_message_payload_encrypt(data, data_len - iv_len - mac_len, - data_len - mac_len, iv, iv_len, + silc_message_payload_encrypt(data, data_len - iv_len - mac_len, + data_len - mac_len, iv, iv_len, channel->channel_key, channel->hmac); } diff --git a/apps/silcd/server.c b/apps/silcd/server.c index 4df005aa..09c89c67 100644 --- a/apps/silcd/server.c +++ b/apps/silcd/server.c @@ -2289,8 +2289,17 @@ SILC_TASK_CALLBACK(silc_server_packet_process) sock->type == SILC_SOCKET_TYPE_SERVER ? "Server" : "Router"))); - if (sock->user_data) + if (sock->user_data) { + /* If backup then mark that resuming will not be allowed */ + if (server->server_type == SILC_ROUTER && !server->backup_router && + sock->type == SILC_SOCKET_TYPE_SERVER) { + SilcServerEntry server_entry = sock->user_data; + if (server_entry->server_type == SILC_BACKUP_ROUTER) + server->backup_closed = TRUE; + } + silc_server_free_sock_user_data(server, sock, NULL); + } SILC_SET_DISCONNECTING(sock); silc_server_close_connection(server, sock); } @@ -2311,8 +2320,17 @@ SILC_TASK_CALLBACK(silc_server_packet_process) sock->type == SILC_SOCKET_TYPE_SERVER ? "Server" : "Router"), strerror(errno))); - if (sock->user_data) + if (sock->user_data) { + /* If backup then mark that resuming will not be allowed */ + if (server->server_type == SILC_ROUTER && !server->backup_router && + sock->type == SILC_SOCKET_TYPE_SERVER) { + SilcServerEntry server_entry = sock->user_data; + if (server_entry->server_type == SILC_BACKUP_ROUTER) + server->backup_closed = TRUE; + } + silc_server_free_sock_user_data(server, sock, NULL); + } SILC_SET_DISCONNECTING(sock); silc_server_close_connection(server, sock); } @@ -2337,7 +2355,7 @@ SILC_TASK_CALLBACK(silc_server_packet_process) if (sock->user_data) { char tmp[128]; - /* If backup disconnected then mark that resuming willl not be allowed */ + /* If backup disconnected then mark that resuming will not be allowed */ if (server->server_type == SILC_ROUTER && !server->backup_router && sock->type == SILC_SOCKET_TYPE_SERVER && sock->user_data) { SilcServerEntry server_entry = sock->user_data; @@ -2398,8 +2416,18 @@ SILC_TASK_CALLBACK(silc_server_packet_process) if (SILC_PRIMARY_ROUTE(server) == sock && server->backup_router) server->backup_noswitch = TRUE; - if (sock->user_data) + if (sock->user_data) { + /* If we are router and backup errorred then mark that resuming + will not be allowed */ + if (server->server_type == SILC_ROUTER && !server->backup_router && + sock->type == SILC_SOCKET_TYPE_SERVER) { + SilcServerEntry server_entry = sock->user_data; + if (server_entry->server_type == SILC_BACKUP_ROUTER) + server->backup_closed = TRUE; + } + silc_server_free_sock_user_data(server, sock, NULL); + } SILC_SET_DISCONNECTING(sock); silc_server_close_connection(server, sock); } @@ -2621,7 +2649,7 @@ void silc_server_packet_parse_type(SilcServer server, /* Do not switch to backup in case of error */ server->backup_noswitch = (status == SILC_STATUS_OK ? FALSE : TRUE); - /* If backup disconnected then mark that resuming willl not be allowed */ + /* If backup disconnected then mark that resuming will not be allowed */ if (server->server_type == SILC_ROUTER && !server->backup_router && sock->type == SILC_SOCKET_TYPE_SERVER && sock->user_data) { SilcServerEntry server_entry = sock->user_data; diff --git a/apps/silcd/server_backup.c b/apps/silcd/server_backup.c index dce3c9be..16d0d7e7 100644 --- a/apps/silcd/server_backup.c +++ b/apps/silcd/server_backup.c @@ -688,6 +688,8 @@ void silc_server_backup_resume_router(SilcServer server, unsigned char data[4]; SILC_LOG_DEBUG(("Backup resuming not allowed since we are still " "primary router")); + SILC_LOG_INFO(("Backup resuming not allowed since we are still " + "primary router")); SILC_PUT32_MSB(SILC_SERVER_BACKUP_START, data); silc_server_packet_send(server, sock, SILC_PACKET_FAILURE, 0, data, 4, FALSE); diff --git a/apps/silcd/server_util.c b/apps/silcd/server_util.c index d30c60cf..c6233c7e 100644 --- a/apps/silcd/server_util.c +++ b/apps/silcd/server_util.c @@ -550,7 +550,7 @@ void silc_server_update_clients_by_server(SilcServer server, SILC_LOG_DEBUG(("Client %s", silc_id_render(client->id, SILC_ID_CLIENT))); - if (client->router) + if (client->router && client->router->id) SILC_LOG_DEBUG(("Client->router %s", silc_id_render(client->router->id, SILC_ID_SERVER))); @@ -583,7 +583,7 @@ void silc_server_update_clients_by_server(SilcServer server, client->router = to; } - if (client->router) + if (client->router && client->router->id) SILC_LOG_DEBUG(("Client changed to %s", silc_id_render(client->router->id, SILC_ID_SERVER))); @@ -613,7 +613,7 @@ void silc_server_update_clients_by_server(SilcServer server, SILC_LOG_DEBUG(("Client %s", silc_id_render(client->id, SILC_ID_CLIENT))); - if (client->router) + if (client->router && client->router->id) SILC_LOG_DEBUG(("Client->router %s", silc_id_render(client->router->id, SILC_ID_SERVER))); @@ -642,7 +642,7 @@ void silc_server_update_clients_by_server(SilcServer server, client->router = to; } - if (client->router) + if (client->router && client->router->id) SILC_LOG_DEBUG(("Client changed to %s", silc_id_render(client->router->id, SILC_ID_SERVER)));