aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2010-05-12 15:20:58 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2010-05-12 15:20:58 +0000
commitdc1a5fbbcad2e3437159aa952fd480b331af51eb (patch)
tree77e912107a19c0cb3e75c2efadb09a8137a4dd3b
parent98bc82b2645e7146abe5e812ff8653ac2df337aa (diff)
downloadgnunet-dc1a5fbbcad2e3437159aa952fd480b331af51eb.tar.gz
gnunet-dc1a5fbbcad2e3437159aa952fd480b331af51eb.zip
-rw-r--r--src/transport/plugin_transport_http.c58
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
169static CURLM *multi_handle; 169static CURLM *multi_handle;
170 170
171static struct sockaddr_in * current_ip; 171static 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
289acceptPolicyCallback (void *cls, 289acceptPolicyCallback (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,