diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2010-05-12 15:20:58 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2010-05-12 15:20:58 +0000 |
commit | dc1a5fbbcad2e3437159aa952fd480b331af51eb (patch) | |
tree | 77e912107a19c0cb3e75c2efadb09a8137a4dd3b | |
parent | 98bc82b2645e7146abe5e812ff8653ac2df337aa (diff) | |
download | gnunet-dc1a5fbbcad2e3437159aa952fd480b331af51eb.tar.gz gnunet-dc1a5fbbcad2e3437159aa952fd480b331af51eb.zip |
-rw-r--r-- | src/transport/plugin_transport_http.c | 58 |
1 files changed, 42 insertions, 16 deletions
diff --git a/src/transport/plugin_transport_http.c b/src/transport/plugin_transport_http.c index 904e0d794..085cb78a0 100644 --- a/src/transport/plugin_transport_http.c +++ b/src/transport/plugin_transport_http.c | |||
@@ -168,7 +168,7 @@ struct Plugin *plugin; | |||
168 | 168 | ||
169 | static CURLM *multi_handle; | 169 | static CURLM *multi_handle; |
170 | 170 | ||
171 | static struct sockaddr_in * current_ip; | 171 | static struct sockaddr * current_ip; |
172 | 172 | ||
173 | /** | 173 | /** |
174 | * Finds a http session in our linked list using peer identity as a key | 174 | * Finds a http session in our linked list using peer identity as a key |
@@ -289,17 +289,29 @@ static int | |||
289 | acceptPolicyCallback (void *cls, | 289 | acceptPolicyCallback (void *cls, |
290 | const struct sockaddr *addr, socklen_t addr_len) | 290 | const struct sockaddr *addr, socklen_t addr_len) |
291 | { | 291 | { |
292 | struct sockaddr_in * addrin =(struct sockaddr_in *) addr; | 292 | struct sockaddr_in *addrin; |
293 | /* 40 == max IPv6 Address length as string: (4 * 8) + (7 * :) + \0 */ | 293 | struct sockaddr_in6 *addrin6; |
294 | char * address = GNUNET_malloc(40); | 294 | char * address; |
295 | inet_ntop(addrin->sin_family, &addrin->sin_addr.s_addr,address,40); | 295 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Address %p\n",current_ip); |
296 | memcpy( cls, addrin, sizeof (struct sockaddr_in) ); | 296 | if (addr->sa_family == AF_INET6) |
297 | if (addrin->sin_family == AF_INET) | 297 | { |
298 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Incoming IPv4 connection from `%s'\n", address); | 298 | address = GNUNET_malloc(INET6_ADDRSTRLEN); |
299 | if (addrin->sin_family == AF_INET6) | 299 | addrin6 = (struct sockaddr_in6 *) addr; |
300 | inet_ntop(addrin6->sin6_family, &(addrin6->sin6_addr),address,INET6_ADDRSTRLEN); | ||
300 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Incoming IPv6 connection from `%s'\n",address); | 301 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Incoming IPv6 connection from `%s'\n",address); |
301 | GNUNET_free (address); | 302 | memcpy(current_ip,addr, sizeof (struct sockaddr)); |
302 | 303 | //current_ip = addr; | |
304 | GNUNET_free (address); | ||
305 | } | ||
306 | if (addr->sa_family == AF_INET) | ||
307 | { | ||
308 | address = GNUNET_malloc(INET_ADDRSTRLEN); | ||
309 | addrin = (struct sockaddr_in *) addr; | ||
310 | inet_ntop(addrin->sin_family, &(addrin->sin_addr),address,INET_ADDRSTRLEN); | ||
311 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Incoming IPv4 connection from `%s'\n",address); | ||
312 | memcpy(current_ip,addr, sizeof (struct sockaddr)); | ||
313 | GNUNET_free (address); | ||
314 | } | ||
303 | /* Every connection is accepted, nothing more to do here */ | 315 | /* Every connection is accepted, nothing more to do here */ |
304 | return MHD_YES; | 316 | return MHD_YES; |
305 | } | 317 | } |
@@ -323,12 +335,26 @@ accessHandlerCallback (void *cls, | |||
323 | { | 335 | { |
324 | struct Session * http_session; | 336 | struct Session * http_session; |
325 | struct MHD_Response *response; | 337 | struct MHD_Response *response; |
326 | struct sockaddr_in * addrin = (struct sockaddr_in *) cls; | ||
327 | http_session = *httpSessionCache; | 338 | http_session = *httpSessionCache; |
328 | char * address = GNUNET_malloc(40); | ||
329 | 339 | ||
340 | struct sockaddr *addr; | ||
341 | struct sockaddr_in *addrin; | ||
342 | struct sockaddr_in6 *addrin6; | ||
343 | char * address; | ||
330 | 344 | ||
331 | inet_ntop(addrin->sin_family, &addrin->sin_addr.s_addr,address,40); | 345 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Address %p %u\n",current_ip,current_ip->sa_family); |
346 | if ( current_ip->sa_family == AF_INET) | ||
347 | { | ||
348 | address = GNUNET_malloc(INET_ADDRSTRLEN); | ||
349 | addrin = (struct sockaddr_in *) current_ip; | ||
350 | inet_ntop(addrin->sin_family, &(addrin->sin_addr),address,INET_ADDRSTRLEN); | ||
351 | } | ||
352 | if (current_ip->sa_family == AF_INET6) | ||
353 | { | ||
354 | address = GNUNET_malloc(INET6_ADDRSTRLEN); | ||
355 | addrin6 = (struct sockaddr_in6 *) current_ip; | ||
356 | inet_ntop(addrin6->sin6_family, &(addrin6->sin6_addr),address,INET6_ADDRSTRLEN); | ||
357 | } | ||
332 | 358 | ||
333 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"HTTP Daemon has an incoming `%s' request from `%s'\n",method, address); | 359 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"HTTP Daemon has an incoming `%s' request from `%s'\n",method, address); |
334 | 360 | ||
@@ -713,7 +739,7 @@ libgnunet_plugin_transport_http_init (void *cls) | |||
713 | } | 739 | } |
714 | 740 | ||
715 | current_ip = GNUNET_malloc ( sizeof(struct sockaddr_in) ); | 741 | current_ip = GNUNET_malloc ( sizeof(struct sockaddr_in) ); |
716 | 742 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Address %p\n",current_ip); | |
717 | if ((http_daemon_v4 == NULL) && (http_daemon_v6 == NULL) && (port != 0)) | 743 | if ((http_daemon_v4 == NULL) && (http_daemon_v6 == NULL) && (port != 0)) |
718 | { | 744 | { |
719 | http_daemon_v6 = MHD_start_daemon (MHD_USE_IPv6, | 745 | http_daemon_v6 = MHD_start_daemon (MHD_USE_IPv6, |
@@ -729,7 +755,7 @@ libgnunet_plugin_transport_http_init (void *cls) | |||
729 | http_daemon_v4 = MHD_start_daemon (MHD_NO_FLAG, | 755 | http_daemon_v4 = MHD_start_daemon (MHD_NO_FLAG, |
730 | port, | 756 | port, |
731 | &acceptPolicyCallback, | 757 | &acceptPolicyCallback, |
732 | NULL, &accessHandlerCallback, NULL, | 758 | current_ip, &accessHandlerCallback, current_ip, |
733 | MHD_OPTION_CONNECTION_LIMIT, (unsigned int) 16, | 759 | MHD_OPTION_CONNECTION_LIMIT, (unsigned int) 16, |
734 | MHD_OPTION_PER_IP_CONNECTION_LIMIT, (unsigned int) 1, | 760 | MHD_OPTION_PER_IP_CONNECTION_LIMIT, (unsigned int) 1, |
735 | MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int) 16, | 761 | MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int) 16, |