From 985f57f253454fde2875f3623d76635d90a273cc Mon Sep 17 00:00:00 2001 From: Skywing Date: Fri, 27 Jun 2008 00:16:37 -0500 Subject: [PATCH] Add ``ExternalIp'' config directive to ServerInfo tag in silcd.conf. This allows server linking with a server behind a NAT connecting out to a router. --- apps/silcd/server.c | 8 ++++++-- apps/silcd/serverconfig.c | 6 ++++++ apps/silcd/serverconfig.h | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/apps/silcd/server.c b/apps/silcd/server.c index 0e1cffb0..05deee4b 100644 --- a/apps/silcd/server.c +++ b/apps/silcd/server.c @@ -767,6 +767,7 @@ SilcBool silc_server_init(SilcServer server) SilcNetListener listener; SilcUInt16 *port; char **ip; + char *external_ip; SILC_LOG_DEBUG(("Initializing server")); @@ -870,8 +871,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; diff --git a/apps/silcd/serverconfig.c b/apps/silcd/serverconfig.c index 30d76af3..6e49475a 100644 --- a/apps/silcd/serverconfig.c +++ b/apps/silcd/serverconfig.c @@ -595,6 +595,10 @@ SILC_CONFIG_CALLBACK(fetch_serverinfo) CONFIG_IS_DOUBLE(server_info->server_type); server_info->server_type = strdup((char *) val); } + else if (!strcmp(name, "externalip")) { + CONFIG_IS_DOUBLE(server_info->external_ip); + server_info->external_ip = strdup((char *) val); + } else if (!strcmp(name, "admin")) { CONFIG_IS_DOUBLE(server_info->admin); server_info->admin = strdup((char *) val); @@ -1256,6 +1260,7 @@ static const SilcConfigTable table_serverinfo[] = { { "primary", SILC_CONFIG_ARG_BLOCK, fetch_serverinfo, table_serverinfo_c}, { "secondary", SILC_CONFIG_ARG_BLOCK, fetch_serverinfo, table_serverinfo_c}, { "servertype", SILC_CONFIG_ARG_STR, fetch_serverinfo, NULL}, + { "externalip", SILC_CONFIG_ARG_STR, fetch_serverinfo, NULL}, { "location", SILC_CONFIG_ARG_STR, fetch_serverinfo, NULL}, { "admin", SILC_CONFIG_ARG_STR, fetch_serverinfo, NULL}, { "adminemail", SILC_CONFIG_ARG_STR, fetch_serverinfo, NULL}, @@ -1639,6 +1644,7 @@ void silc_server_config_destroy(SilcServerConfig config) silc_free(di); } silc_free(si->server_type); + silc_free(si->external_ip); silc_free(si->location); silc_free(si->admin); silc_free(si->email); diff --git a/apps/silcd/serverconfig.h b/apps/silcd/serverconfig.h index 183f6501..5c77b8d2 100644 --- a/apps/silcd/serverconfig.h +++ b/apps/silcd/serverconfig.h @@ -59,6 +59,7 @@ typedef struct SilcServerConfigServerInfoStruct { char *server_name; SilcServerConfigServerInfoInterface *primary; SilcServerConfigServerInfoInterface *secondary; + char *external_ip; /* E.g. public IP if we're in a NAT */ char *server_type; /* E.g. "Test Server" */ char *location; /* geographic location */ char *admin; /* admin full name */ -- 2.24.0