From b32065a0fac86ae6b9b84ee81118a77529582506 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Wed, 30 Jan 2002 17:52:45 +0000 Subject: [PATCH] updates. --- apps/silcd/command.c | 56 +++++++++++++++++--------------------------- apps/silcd/server.c | 4 ++-- 2 files changed, 23 insertions(+), 37 deletions(-) diff --git a/apps/silcd/command.c b/apps/silcd/command.c index 51855573..b3fbd805 100644 --- a/apps/silcd/command.c +++ b/apps/silcd/command.c @@ -1083,53 +1083,36 @@ silc_server_command_whowas_send_reply(SilcServerCommandContext cmd, { SilcServer server = cmd->server; char *tmp; - int i, k, count = 0, len; + int i, count = 0, len; SilcBuffer packet, idp; SilcClientEntry entry = NULL; SilcCommandStatus status; uint16 ident = silc_command_get_ident(cmd->payload); + char found = FALSE; char nh[256], uh[256]; - int valid_count; status = SILC_STATUS_OK; + if (clients_count > 1) + status = SILC_STATUS_LIST_START; - /* Process only entries that are not registered anymore. */ - valid_count = 0; for (i = 0; i < clients_count; i++) { - if (clients[i]->data.status & SILC_IDLIST_STATUS_REGISTERED) - clients[i] = NULL; - else - valid_count++; - } + entry = clients[i]; - if (!valid_count) { - /* No valid entries found at all, just send error */ - unsigned char *tmp; - - tmp = silc_argument_get_arg_type(cmd->args, 1, NULL); - if (tmp) - silc_server_command_send_status_data(cmd, SILC_COMMAND_WHOWAS, - SILC_STATUS_ERR_NO_SUCH_NICK, - 3, tmp, strlen(tmp)); - return; - } + /* We will take only clients that are not valid anymore. They are the + ones that are not registered anymore but still have a ID. They + have disconnected us, and thus valid for WHOWAS. */ + if (entry->data.status & SILC_IDLIST_STATUS_REGISTERED || !entry->id) + continue; - if (valid_count > 1) - status = SILC_STATUS_LIST_START; + if (count && i - 1 == count) + break; - for (i = 0, k = 0; i < clients_count; i++) { - entry = clients[i]; - if (!entry) - continue; + found = TRUE; - if (k >= 1) + if (clients_count > 2) status = SILC_STATUS_LIST_ITEM; - if (valid_count > 1 && k == valid_count - 1) + if (clients_count > 1 && i == clients_count - 1) status = SILC_STATUS_LIST_END; - if (count && k - 1 == count) - status = SILC_STATUS_LIST_END; - if (count && k - 1 > count) - break; /* Send WHOWAS reply */ idp = silc_id_payload_encode(entry->id, SILC_ID_CLIENT); @@ -1170,9 +1153,13 @@ silc_server_command_whowas_send_reply(SilcServerCommandContext cmd, silc_buffer_free(packet); silc_buffer_free(idp); - - k++; } + + if (found == FALSE && entry) + silc_server_command_send_status_data(cmd, SILC_COMMAND_WHOWAS, + SILC_STATUS_ERR_NO_SUCH_NICK, + 3, entry->nickname, + strlen(entry->nickname)); } static int @@ -3410,7 +3397,6 @@ SILC_SERVER_CMD_FUNC(join) silc_server_command_dup(cmd)); cmd->pending = TRUE; silc_command_set_ident(cmd->payload, old_ident); - silc_buffer_free(tmpbuf); goto out; } diff --git a/apps/silcd/server.c b/apps/silcd/server.c index b3914316..091a9436 100644 --- a/apps/silcd/server.c +++ b/apps/silcd/server.c @@ -3005,7 +3005,7 @@ bool silc_server_create_channel_key(SilcServer server, channel->rekey->task = silc_schedule_task_add(server->schedule, 0, silc_server_channel_key_rekey, - (void *)channel->rekey, 3600, 0, + (void *)channel->rekey, 36, 0, SILC_TASK_TIMEOUT, SILC_TASK_PRI_NORMAL); } @@ -3117,7 +3117,7 @@ SilcChannelEntry silc_server_save_channel_key(SilcServer server, channel->rekey->task = silc_schedule_task_add(server->schedule, 0, silc_server_channel_key_rekey, - (void *)channel->rekey, 3600, 0, + (void *)channel->rekey, 36, 0, SILC_TASK_TIMEOUT, SILC_TASK_PRI_NORMAL); } -- 2.24.0