X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=apps%2Fsilcd%2Fserver_util.c;h=19ea23e67821e2efb77f6fe817ce5bc773890ed3;hp=084628cb7affdd65cc50889d0aa982a153ffa0d9;hb=88d6f6ef0b3c6e0b70517111f7d16c55264659d2;hpb=d6ee63c019f9e35c09c52cfb6c53759aec37992f diff --git a/apps/silcd/server_util.c b/apps/silcd/server_util.c index 084628cb..19ea23e6 100644 --- a/apps/silcd/server_util.c +++ b/apps/silcd/server_util.c @@ -162,17 +162,15 @@ SilcBool silc_server_remove_clients_by_server(SilcServer server, if (server_signoff) { idp = silc_id_payload_encode(entry->id, SILC_ID_SERVER); - if (idp) { - argv = silc_realloc(argv, sizeof(*argv) * (argc + 1)); - argv_lens = silc_realloc(argv_lens, sizeof(*argv_lens) * (argc + 1)); - argv_types = silc_realloc(argv_types, sizeof(*argv_types) * (argc + 1)); - argv[argc] = silc_calloc(silc_buffer_len(idp), sizeof(*argv[0])); - memcpy(argv[argc], idp->data, silc_buffer_len(idp)); - argv_lens[argc] = silc_buffer_len(idp); - argv_types[argc] = argc + 1; - argc++; - silc_buffer_free(idp); - } + argv = silc_realloc(argv, sizeof(*argv) * (argc + 1)); + argv_lens = silc_realloc(argv_lens, sizeof(*argv_lens) * (argc + 1)); + argv_types = silc_realloc(argv_types, sizeof(*argv_types) * (argc + 1)); + argv[argc] = silc_calloc(silc_buffer_len(idp), sizeof(*argv[0])); + memcpy(argv[argc], idp->data, silc_buffer_len(idp)); + argv_lens[argc] = silc_buffer_len(idp); + argv_types[argc] = argc + 1; + argc++; + silc_buffer_free(idp); } if (silc_idcache_get_all(server->local_list->clients, &list)) { @@ -415,10 +413,8 @@ silc_server_update_clients_by_real_server(SilcServer server, since the server is local. */ if (!local) { SILC_LOG_DEBUG(("Moving client to local list")); - silc_idcache_add(server->local_list->clients, client_cache->name, - client_cache->id, client_cache->context); - silc_idcache_del_by_context(server->global_list->clients, client, - NULL); + silc_idcache_move(server->global_list->clients, + server->local_list->clients, client_cache); } server_entry = server_entry->router; } else { @@ -427,20 +423,16 @@ silc_server_update_clients_by_real_server(SilcServer server, since the server is local. */ if (server_entry->server_type != SILC_BACKUP_ROUTER && !local) { SILC_LOG_DEBUG(("Moving client to local list")); - silc_idcache_add(server->local_list->clients, client_cache->name, - client_cache->id, client_cache->context); - silc_idcache_del_by_context(server->global_list->clients, client, - NULL); + silc_idcache_move(server->global_list->clients, + server->local_list->clients, client_cache); } else if (server->server_type == SILC_BACKUP_ROUTER && local) { /* If we are backup router and this client is on local list, we must move it to global list, as it is not currently local to us (we are not primary). */ SILC_LOG_DEBUG(("Moving client to global list")); - silc_idcache_add(server->global_list->clients, client_cache->name, - client_cache->id, client_cache->context); - silc_idcache_del_by_context(server->local_list->clients, client, - NULL); + silc_idcache_move(server->local_list->clients, + server->global_list->clients, client_cache); } } @@ -467,10 +459,8 @@ silc_server_update_clients_by_real_server(SilcServer server, since the server is global. */ if (local) { SILC_LOG_DEBUG(("Moving client to global list")); - silc_idcache_add(server->global_list->clients, client_cache->name, - client_cache->id, client_cache->context); - silc_idcache_del_by_context(server->local_list->clients, client, - NULL); + silc_idcache_move(server->local_list->clients, + server->global_list->clients, client_cache); } server_entry = server_entry->router; } else { @@ -479,10 +469,8 @@ silc_server_update_clients_by_real_server(SilcServer server, since the server is global. */ if (server_entry->server_type != SILC_BACKUP_ROUTER && local) { SILC_LOG_DEBUG(("Moving client to global list")); - silc_idcache_add(server->global_list->clients, client_cache->name, - client_cache->id, client_cache->context); - silc_idcache_del_by_context(server->local_list->clients, client, - NULL); + silc_idcache_move(server->local_list->clients, + server->global_list->clients, client_cache); } } return server_entry; @@ -1067,6 +1055,8 @@ SilcUInt32 silc_server_num_sockets_by_remote(SilcServer server, if (!ip && !hostname) return 0; + SILC_LOG_DEBUG(("Num connections %d", silc_dlist_count(server->conns))); + silc_dlist_start(server->conns); while ((conn = silc_dlist_get(server->conns))) { if (conn->sock) { @@ -1233,6 +1223,7 @@ SilcBool silc_server_connection_allowed(SilcServer server, global->connections_max_per_host); if (max_hosts && conn_number >= max_hosts) { + SILC_LOG_DEBUG(("Server is full, %d >= %d", conn_number, max_hosts)); SILC_LOG_INFO(("Server is full, closing %s (%s) connection", hostname, ip)); silc_server_disconnect_remote(server, sock, @@ -1242,6 +1233,8 @@ SilcBool silc_server_connection_allowed(SilcServer server, } if (num_sockets >= max_per_host) { + SILC_LOG_DEBUG(("Too many connections, %d >= %d", num_sockets, + max_per_host)); SILC_LOG_INFO(("Too many connections from %s (%s), closing connection", hostname, ip)); silc_server_disconnect_remote(server, sock, @@ -1997,7 +1990,7 @@ void silc_server_create_connections(SilcServer server) silc_schedule_task_del_by_callback(server->schedule, silc_server_connect_to_router); silc_schedule_task_add_timeout(server->schedule, - silc_server_connect_to_router, server, 0, 1); + silc_server_connect_to_router, server, 1, 0); } static void