commit b7da788732aa32dc668be73460ebfd140076bbc7
parent 224ea9e3e94ce8762f9d1b081294d2d4cba0052b
Author: Matthias Wachs <wachs@net.in.tum.de>
Date: Wed, 4 Sep 2013 09:41:55 +0000
mhd is failing to bind both IPv4 and IPv6 -> restructured http plugin to no fail if one fails
Diffstat:
1 file changed, 44 insertions(+), 29 deletions(-)
diff --git a/src/transport/plugin_transport_http_server.c b/src/transport/plugin_transport_http_server.c
@@ -2006,6 +2006,7 @@ static int
server_start (struct HTTP_Server_Plugin *plugin)
{
unsigned int timeout;
+ char *msg;
GNUNET_assert (NULL != plugin);
#if BUILD_HTTPS
@@ -2029,22 +2030,23 @@ server_start (struct HTTP_Server_Plugin *plugin)
"MHD cannot set timeout per connection! Default time out %u sec.\n",
timeout);
#endif
- plugin->server_v4 = NULL;
- if (plugin->use_ipv4 == GNUNET_YES)
+
+ plugin->server_v6 = NULL;
+ if (plugin->use_ipv6 == GNUNET_YES)
{
- plugin->server_v4 = MHD_start_daemon (
+ plugin->server_v6 = MHD_start_daemon (
#if VERBOSE_SERVER
MHD_USE_DEBUG |
#endif
#if BUILD_HTTPS
MHD_USE_SSL |
#endif
- MHD_NO_FLAG, plugin->port,
+ MHD_USE_IPv6, plugin->port,
&server_accept_cb, plugin,
&server_access_cb, plugin,
MHD_OPTION_SOCK_ADDR,
- (struct sockaddr_in *)
- plugin->server_addr_v4,
+ (struct sockaddr_in6 *)
+ plugin->server_addr_v6,
MHD_OPTION_CONNECTION_LIMIT,
(unsigned int)
plugin->max_connections,
@@ -2065,23 +2067,32 @@ server_start (struct HTTP_Server_Plugin *plugin)
&server_disconnect_cb, plugin,
MHD_OPTION_EXTERNAL_LOGGER,
server_log, NULL, MHD_OPTION_END);
+ if (plugin->server_v6 == NULL)
+ {
+ GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, plugin->name,
+ "Failed to start %s IPv6 server component on port %u\n",
+ plugin->name, plugin->port);
+ }
+ else
+ server_reschedule (plugin, plugin->server_v6, GNUNET_NO);
}
- plugin->server_v6 = NULL;
- if (plugin->use_ipv6 == GNUNET_YES)
+
+ plugin->server_v4 = NULL;
+ if (plugin->use_ipv4 == GNUNET_YES)
{
- plugin->server_v6 = MHD_start_daemon (
+ plugin->server_v4 = MHD_start_daemon (
#if VERBOSE_SERVER
MHD_USE_DEBUG |
#endif
#if BUILD_HTTPS
MHD_USE_SSL |
#endif
- MHD_USE_IPv6, plugin->port,
+ MHD_NO_FLAG, plugin->port,
&server_accept_cb, plugin,
&server_access_cb, plugin,
MHD_OPTION_SOCK_ADDR,
- (struct sockaddr_in6 *)
- plugin->server_addr_v6,
+ (struct sockaddr_in *)
+ plugin->server_addr_v4,
MHD_OPTION_CONNECTION_LIMIT,
(unsigned int)
plugin->max_connections,
@@ -2102,29 +2113,34 @@ server_start (struct HTTP_Server_Plugin *plugin)
&server_disconnect_cb, plugin,
MHD_OPTION_EXTERNAL_LOGGER,
server_log, NULL, MHD_OPTION_END);
-
- }
-
- if ((plugin->use_ipv4 == GNUNET_YES) && (plugin->server_v4 == NULL))
- {
- GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, plugin->name,
- "Failed to start %s IPv4 server component on port %u\n",
- plugin->name, plugin->port);
- return GNUNET_SYSERR;
+ if (plugin->server_v4 == NULL)
+ {
+ GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, plugin->name,
+ "Failed to start %s IPv4 server component on port %u\n",
+ plugin->name, plugin->port);
+ }
+ else
+ server_reschedule (plugin, plugin->server_v4, GNUNET_NO);
}
- server_reschedule (plugin, plugin->server_v4, GNUNET_NO);
- if ((plugin->use_ipv6 == GNUNET_YES) && (plugin->server_v6 == NULL))
+ msg = "No";
+ if ((plugin->server_v6 == NULL) && (plugin->server_v6 == NULL))
{
GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, plugin->name,
- "Failed to start %s IPv6 server component on port %u\n",
- plugin->name, plugin->port);
+ "%s %s server component started on port %u\n",
+ msg, plugin->name, plugin->port);
return GNUNET_SYSERR;
}
- server_reschedule (plugin, plugin->server_v6, GNUNET_NO);
+ else if ((plugin->server_v6 != NULL) && (plugin->server_v6 != NULL))
+ msg = "IPv4 and IPv6";
+ else if (plugin->server_v6 != NULL)
+ msg = "IPv6";
+ else if (plugin->server_v4 != NULL)
+ msg = "IPv4";
GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name,
- "%s server component started on port %u\n", plugin->name,
- plugin->port);
+ "%s %s server component started on port %u\n",
+ msg, plugin->name, plugin->port);
+
return GNUNET_OK;
}
@@ -3124,7 +3140,6 @@ LIBGNUNET_PLUGIN_TRANSPORT_INIT (void *cls)
LIBGNUNET_PLUGIN_TRANSPORT_DONE (api);
return NULL;
}
-
return api;
}