From 44149c5338b0f8a9339fb1f7640ff5b3888b8a86 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Tue, 4 Jul 2000 08:30:24 +0000 Subject: [PATCH] Added silc_server_get_route to return communication object for fastest route. --- apps/silcd/route.c | 47 ++++++++++++++++++++++++++++++++++++++++++++-- apps/silcd/route.h | 2 ++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/apps/silcd/route.c b/apps/silcd/route.c index dad5ae3b..98520474 100644 --- a/apps/silcd/route.c +++ b/apps/silcd/route.c @@ -25,13 +25,18 @@ /* * $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; +} diff --git a/apps/silcd/route.h b/apps/silcd/route.h index aec76e69..bc024947 100644 --- a/apps/silcd/route.h +++ b/apps/silcd/route.h @@ -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 -- 2.43.0