Added silc_server_get_route to return communication object
authorPekka Riikonen <priikone@silcnet.org>
Tue, 4 Jul 2000 08:30:24 +0000 (08:30 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Tue, 4 Jul 2000 08:30:24 +0000 (08:30 +0000)
for fastest route.

apps/silcd/route.c
apps/silcd/route.h

index dad5ae3b8e9d6d3b8c3a64988f375e5cdc4127e3..98520474bc39177a7733db71ed2f79a15652fb80 100644 (file)
 /*
  * $Id$
  * $Log$
- * Revision 1.1  2000/06/27 11:36:56  priikone
- * Initial revision
+ * Revision 1.2  2000/07/04 08:30:24  priikone
+ *     Added silc_server_get_route to return communication object
+ *     for fastest route.
+ *
+ * Revision 1.1.1.1  2000/06/27 11:36:56  priikone
+ *     Importet from internal CVS/Added Log headers.
  *
  *
  */
 
 #include "serverincludes.h"
+#include "server_internal.h"
 #include "route.h"
 
 /* Route cache hash table */
@@ -63,3 +68,41 @@ SilcServerList *silc_server_route_check(unsigned int dest,
 
   return NULL;
 }
+
+/* Returns the connection object for the fastest route for the given ID.
+   If we are normal server then this just returns our primary route. If
+   we are router we will do route lookup. */
+
+SilcSocketConnection silc_server_get_route(SilcServer server, void *id,
+                                          SilcIdType id_type)
+{
+  unsigned int dest = 0;
+  unsigned short port = 0;
+  SilcServerList *router = NULL;
+
+  if (server->server_type == SILC_SERVER)
+    return (SilcSocketConnection)server->id_entry->router->connection;
+  
+  switch(id_type) {
+  case SILC_ID_CLIENT:
+    dest = ((SilcClientID *)id)->ip.s_addr;
+    port = server->id->port;
+    break;
+  case SILC_ID_SERVER:
+    dest = ((SilcServerID *)id)->ip.s_addr;
+    port = ((SilcServerID *)id)->port;
+    break;
+  case SILC_ID_CHANNEL:
+    dest = ((SilcChannelID *)id)->ip.s_addr;
+    port = ((SilcChannelID *)id)->port;
+    break;
+  default:
+    return NULL;
+  }
+
+  router = silc_server_route_check(dest, port);
+  if (!router)
+    return (SilcSocketConnection)server->id_entry->router->connection;
+
+  return (SilcSocketConnection)router->connection;
+}
index aec76e69ff7201e0de735fa3d2bb74312d971a6b..bc0249477c4bb51ee5a28d227699fb379c26444f 100644 (file)
@@ -73,5 +73,7 @@ void silc_server_route_add(unsigned int index, unsigned int dest,
                           SilcServerList *router);
 SilcServerList *silc_server_route_check(unsigned int dest, 
                                        unsigned short port);
+SilcSocketConnection silc_server_get_route(SilcServer server, void *id,
+                                          SilcIdType id_type);
 
 #endif