SilcNetListener listener;
SilcUInt16 *port;
char **ip;
+ char *external_ip;
SILC_LOG_DEBUG(("Initializing 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;
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);
{ "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},
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);
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 */