Initialize the server name
This commit is contained in:
parent
475c83618a
commit
ab651284a2
45
src/kike.c
45
src/kike.c
|
@ -314,6 +314,7 @@ struct server_context
|
||||||
struct connection *clients; ///< Client connections
|
struct connection *clients; ///< Client connections
|
||||||
SSL_CTX *ssl_ctx; ///< SSL context
|
SSL_CTX *ssl_ctx; ///< SSL context
|
||||||
|
|
||||||
|
char *server_name; ///< Our server name
|
||||||
struct str_map users; ///< Maps nicknames to connections
|
struct str_map users; ///< Maps nicknames to connections
|
||||||
struct str_map channels; ///< Maps channel names to data
|
struct str_map channels; ///< Maps channel names to data
|
||||||
|
|
||||||
|
@ -332,6 +333,7 @@ server_context_init (struct server_context *self)
|
||||||
self->listen_fd = -1;
|
self->listen_fd = -1;
|
||||||
self->clients = NULL;
|
self->clients = NULL;
|
||||||
|
|
||||||
|
self->server_name = NULL;
|
||||||
str_map_init (&self->users);
|
str_map_init (&self->users);
|
||||||
// TODO: set channel_free() as the free function?
|
// TODO: set channel_free() as the free function?
|
||||||
str_map_init (&self->channels);
|
str_map_init (&self->channels);
|
||||||
|
@ -360,6 +362,7 @@ server_context_free (struct server_context *self)
|
||||||
free (link);
|
free (link);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free (self->server_name);
|
||||||
str_map_free (&self->users);
|
str_map_free (&self->users);
|
||||||
str_map_free (&self->channels);
|
str_map_free (&self->channels);
|
||||||
poller_free (&self->poller);
|
poller_free (&self->poller);
|
||||||
|
@ -783,6 +786,45 @@ error_ssl_1:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
irc_initialize_server_name (struct server_context *ctx, struct error **e)
|
||||||
|
{
|
||||||
|
enum validation_result res;
|
||||||
|
const char *server_name = str_map_find (&ctx->config, "server_name");
|
||||||
|
if (server_name)
|
||||||
|
{
|
||||||
|
res = irc_validate_hostname (server_name);
|
||||||
|
if (res != VALIDATION_OK)
|
||||||
|
{
|
||||||
|
error_set (e, NETWORK_ERROR, NETWORK_ERROR_INVALID_CONFIGURATION,
|
||||||
|
"invalid configuration value for `%s': %s", "server_name",
|
||||||
|
irc_validate_to_str (res));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
ctx->server_name = xstrdup (server_name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char hostname[HOST_NAME_MAX];
|
||||||
|
if (gethostname (hostname, sizeof hostname))
|
||||||
|
{
|
||||||
|
error_set (e, NETWORK_ERROR, NETWORK_ERROR_INVALID_CONFIGURATION,
|
||||||
|
"%s: %s", "getting the hostname failed", strerror (errno));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
res = irc_validate_hostname (hostname);
|
||||||
|
if (res != VALIDATION_OK)
|
||||||
|
{
|
||||||
|
error_set (e, NETWORK_ERROR, NETWORK_ERROR_INVALID_CONFIGURATION,
|
||||||
|
"`%s' is not set and the hostname (`%s') cannot be used: %s",
|
||||||
|
"server_name", hostname, irc_validate_to_str (res));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
ctx->server_name = xstrdup (hostname);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
irc_listen (struct server_context *ctx, struct error **e)
|
irc_listen (struct server_context *ctx, struct error **e)
|
||||||
{
|
{
|
||||||
|
@ -790,6 +832,9 @@ irc_listen (struct server_context *ctx, struct error **e)
|
||||||
const char *bind_port = str_map_find (&ctx->config, "bind_port");
|
const char *bind_port = str_map_find (&ctx->config, "bind_port");
|
||||||
hard_assert (bind_port != NULL); // We have a default value for this
|
hard_assert (bind_port != NULL); // We have a default value for this
|
||||||
|
|
||||||
|
if (!irc_initialize_server_name (ctx, e))
|
||||||
|
return false;
|
||||||
|
|
||||||
struct addrinfo gai_hints, *gai_result, *gai_iter;
|
struct addrinfo gai_hints, *gai_result, *gai_iter;
|
||||||
memset (&gai_hints, 0, sizeof gai_hints);
|
memset (&gai_hints, 0, sizeof gai_hints);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue