Do not disconnct already disconnected streams.
silc_id_str2id(packet->src_id, packet->src_id_len,
packet->src_id_type, &client_id, sizeof(client_id))) {
if (!SILC_ID_CLIENT_COMPARE(client->id, &client_id)) {
silc_id_str2id(packet->src_id, packet->src_id_len,
packet->src_id_type, &client_id, sizeof(client_id))) {
if (!SILC_ID_CLIENT_COMPARE(client->id, &client_id)) {
- SILC_LOG_DEBUG(("Packet source is not same as sender"));
+ SILC_LOG_DEBUG(("Packet source is not same as sender, packet %s",
+ silc_get_packet_name(packet->type)));
+ silc_schedule_task_del_by_context(server->schedule, server);
+ silc_schedule_uninit(server->schedule);
+ server->schedule = NULL;
+
silc_idcache_free(server->local_list->clients);
silc_idcache_free(server->local_list->servers);
silc_idcache_free(server->local_list->channels);
silc_idcache_free(server->local_list->clients);
silc_idcache_free(server->local_list->servers);
silc_idcache_free(server->local_list->channels);
silc_skr_free(server->repository);
silc_packet_engine_stop(server->packet_engine);
silc_skr_free(server->repository);
silc_packet_engine_stop(server->packet_engine);
- silc_schedule_task_del_by_context(server->schedule, server);
- silc_schedule_uninit(server->schedule);
- server->schedule = NULL;
-
silc_free(server->local_list);
silc_free(server->global_list);
silc_free(server->server_name);
silc_free(server->local_list);
silc_free(server->global_list);
silc_free(server->server_name);
+ if (server->server_type != SILC_ROUTER) {
+ server->stat.servers = 1;
+ server->stat.cell_servers = 1;
+ } else {
+ server->stat.routers = 1;
+ }
+
/* If we are normal server we'll retrieve network statisticial information
once in a while from the router. */
if (server->server_type != SILC_ROUTER)
silc_schedule_task_add_timeout(server->schedule, silc_server_get_stats,
server, 10, 0);
/* If we are normal server we'll retrieve network statisticial information
once in a while from the router. */
if (server->server_type != SILC_ROUTER)
silc_schedule_task_add_timeout(server->schedule, silc_server_get_stats,
server, 10, 0);
- if (server->server_type == SILC_ROUTER)
- server->stat.routers++;
-
/* Start packet engine */
server->packet_engine =
silc_packet_engine_start(server->rng, server->server_type == SILC_ROUTER,
/* Start packet engine */
server->packet_engine =
silc_packet_engine_start(server->rng, server->server_type == SILC_ROUTER,
while ((ps = silc_dlist_get(list))) {
SilcIDListData idata = silc_packet_get_context(ps);
while ((ps = silc_dlist_get(list))) {
SilcIDListData idata = silc_packet_get_context(ps);
+ if (!silc_packet_stream_is_valid(ps))
+ continue;
+
if (idata)
idata->status &= ~SILC_IDLIST_STATUS_DISABLED;
if (idata)
idata->status &= ~SILC_IDLIST_STATUS_DISABLED;
silc_server_connect_router);
silc_schedule_task_del_by_callback(server->schedule,
silc_server_connect_to_router_retry);
silc_server_connect_router);
silc_schedule_task_del_by_callback(server->schedule,
silc_server_connect_to_router_retry);
+ silc_schedule_task_del_by_callback(server->schedule,
+ silc_server_connect_to_router);
silc_schedule_stop(server->schedule);
silc_schedule_stop(server->schedule);
+ /* Statistics */
+ server->stat.my_servers++;
+ if (server->server_type == SILC_ROUTER)
+ server->stat.servers++;
+ SILC_LOG_DEBUG(("my_servers %d", server->stat.my_servers));
+
silc_idlist_add_data(id_entry, (SilcIDListData)entry);
break;
silc_idlist_add_data(id_entry, (SilcIDListData)entry);
break;
SILC_IDLIST_STATUS_LOCAL);
idata->sconn = sconn;
SILC_IDLIST_STATUS_LOCAL);
idata->sconn = sconn;
+ /* Statistics */
+ server->stat.my_routers++;
+ if (server->server_type == SILC_ROUTER)
+ server->stat.routers++;
+ SILC_LOG_DEBUG(("my_routers %d", server->stat.my_routers));
+
if (!sconn->backup) {
/* Mark this router our primary router if we're still standalone */
if (server->standalone) {
if (!sconn->backup) {
/* Mark this router our primary router if we're still standalone */
if (server->standalone) {
/* Set the entry as packet stream context */
silc_packet_set_context(sconn->sock, id_entry);
/* Set the entry as packet stream context */
silc_packet_set_context(sconn->sock, id_entry);
/* Call the completion callback to indicate that we've connected to
the router */
if (sconn && sconn->callback)
/* Call the completion callback to indicate that we've connected to
the router */
if (sconn && sconn->callback)
returned error. */
if (query->nick_server[0] && !query->dynamic_retry &&
!silc_server_num_sockets_by_remote(server, query->nick_server,
returned error. */
if (query->nick_server[0] && !query->dynamic_retry &&
!silc_server_num_sockets_by_remote(server, query->nick_server,
- query->nick_server, 1334, type)) {
+ query->nick_server, 706, type)) {
SILC_LOG_DEBUG(("Retry query by connecting to %s:%d",
query->nick_server, 706));
silc_server_create_connection(server, FALSE, TRUE, query->nick_server,
SILC_LOG_DEBUG(("Retry query by connecting to %s:%d",
query->nick_server, 706));
silc_server_create_connection(server, FALSE, TRUE, query->nick_server,
- 1334, silc_server_query_connected,
+ 706, silc_server_query_connected,
query);
query->dynamic_retry = TRUE;
query->resolved = FALSE;
query);
query->dynamic_retry = TRUE;
query->resolved = FALSE;
SILC_TASK_CALLBACK(stop_server)
{
SILC_TASK_CALLBACK(stop_server)
{
- /* Stop scheduler, the program will stop eventually after noticing
- that the scheduler is down. */
- silc_schedule_stop(silcd->schedule);
+ silc_server_stop(silcd);
}
/* Dump server statistics into a file into /tmp directory */
}
/* Dump server statistics into a file into /tmp directory */
and we will exit. */
silc_server_run(silcd);
and we will exit. */
silc_server_run(silcd);
- /* Stop the server and free it. */
- silc_server_stop(silcd);
silc_server_config_destroy(silcd->config);
silc_server_free(silcd);
silc_server_config_destroy(silcd->config);
silc_server_free(silcd);