Save route cache for received ID.
authorPekka Riikonen <priikone@silcnet.org>
Thu, 14 Dec 2000 14:33:54 +0000 (14:33 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Thu, 14 Dec 2000 14:33:54 +0000 (14:33 +0000)
CHANGES
apps/silcd/packet_receive.c

diff --git a/CHANGES b/CHANGES
index aed10cdc62bda510fbce0eb506290d65d06dc6dc..b956e377d2e0c4e9b0e2a17506fe6618ee23a2b6 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,7 @@
+Thu Dec 14 15:55:35 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
+
+       * Add route cache for received ID for fast routing.
+
 Sun Dec 10 23:52:00 EET 2000  Pekka Riikonen <priikone@poseidon.pspt.fi>
 
        * Minor typo fixes on command reply handling on server.
index 7b274e10094f82124658985bbd18d0cb44757f38..3d4abebcf1c36ab3657b110a5bc78ce1b976ca3e 100644 (file)
@@ -633,6 +633,7 @@ void silc_server_new_id(SilcServer server, SilcSocketConnection sock,
                            buffer->data, buffer->len, FALSE);
   }
 
+#if 0
   /* If the packet is originated from the one who sent it to us we know
      that the ID belongs to our cell, unless the sender was router. */
   tmpid = silc_id_str2id(packet->src_id, SILC_ID_SERVER);
@@ -651,6 +652,15 @@ void silc_server_new_id(SilcServer server, SilcSocketConnection sock,
   }
 
   silc_free(tmpid);
+#endif
+
+  if (sock->type == SILC_SOCKET_TYPE_SERVER)
+    id_list = server->local_list;
+  else
+    id_list = server->global_list;
+
+  router_sock = sock;
+  router = sock->user_data;
 
   switch(id_type) {
   case SILC_ID_CLIENT:
@@ -662,6 +672,12 @@ void silc_server_new_id(SilcServer server, SilcSocketConnection sock,
     /* Add the client to our local list. We are router and we keep
        cell specific local database of all clients in the cell. */
     silc_idlist_add_client(id_list, NULL, NULL, NULL, id, router, router_sock);
+
+    /* Add route cache for this ID */
+    silc_server_route_add(silc_server_route_hash(
+                         ((SilcClientID *)id)->ip.s_addr,
+                         server->id->port), ((SilcClientID *)id)->ip.s_addr,
+                         router);
     break;
 
   case SILC_ID_SERVER:
@@ -673,6 +689,13 @@ void silc_server_new_id(SilcServer server, SilcSocketConnection sock,
     /* Add the server to our local list. We are router and we keep
        cell specific local database of all servers in the cell. */
     silc_idlist_add_server(id_list, NULL, 0, id, router, router_sock);
+
+    /* Add route cache for this ID */
+    silc_server_route_add(silc_server_route_hash(
+                         ((SilcServerID *)id)->ip.s_addr,
+                         ((SilcServerID *)id)->port), 
+                         ((SilcServerID *)id)->ip.s_addr,
+                         router);
     break;
 
   case SILC_ID_CHANNEL: