Mark outbound initiated server to server connections as local.
[silc.git] / apps / silcd / server.c
index 0e1cffb084ddac0918c65e38d35bcd17a0e4c0ef..0da85e541dd5f68025715da27cc3bb821bbfd00b 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "serverincludes.h"
 #include "server_internal.h"
+#include <assert.h>
 
 /************************* Types and definitions ****************************/
 
@@ -767,6 +768,7 @@ SilcBool silc_server_init(SilcServer server)
   SilcNetListener listener;
   SilcUInt16 *port;
   char **ip;
+  char *external_ip;
 
   SILC_LOG_DEBUG(("Initializing server"));
 
@@ -870,8 +872,11 @@ SilcBool silc_server_init(SilcServer server)
   /* Create a Server ID for the server. */
   port = silc_net_listener_get_port(listener, NULL);
   ip = silc_net_listener_get_ip(listener, NULL);
-  silc_id_create_server_id(server->config->server_info->primary->public_ip ?
-                          server->config->server_info->primary->public_ip :
+  external_ip = server->config->server_info->external_ip ?
+               server->config->server_info->external_ip :
+               server->config->server_info->primary->public_ip;
+  silc_id_create_server_id(external_ip ?
+                          external_ip :
                           ip[0], port[0], server->rng, &id);
   if (!id)
     goto err;
@@ -1798,6 +1803,8 @@ void silc_server_start_key_exchange(SilcServerConnection sconn)
   }
   entry->server = server;
   entry->data.sconn = sconn;
+  entry->data.conn_type = SILC_CONN_UNKNOWN;
+  entry->data.status |= SILC_IDLIST_STATUS_LOCAL;
   silc_packet_set_context(sconn->sock, entry);
 
   SILC_LOG_DEBUG(("Created unknown connection %p", entry));
@@ -3129,6 +3136,7 @@ void silc_server_free_client_data(SilcServer server,
 
   /* Update statistics */
   server->stat.my_clients--;
+  assert(server->stat.clients > 0);
   server->stat.clients--;
   if (server->stat.cell_clients)
     server->stat.cell_clients--;