updates.
authorPekka Riikonen <priikone@silcnet.org>
Wed, 30 Jan 2002 17:52:45 +0000 (17:52 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Wed, 30 Jan 2002 17:52:45 +0000 (17:52 +0000)
apps/silcd/command.c
apps/silcd/server.c

index 518555733ac5d779a91a7794b64ca0ee9049b6ec..b3fbd805c033353b973ba2ea1495922c5a9c1abe 100644 (file)
@@ -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;
        }
        
index b3914316e3b9cedef4d11937049dcc429a3d323a..091a943610a9ee7cf4e656df0b43145c9530d3e9 100644 (file)
@@ -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);
   }