aboutsummaryrefslogtreecommitdiff
path: root/src/transport/plugin_transport_http.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2011-06-30 12:28:23 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2011-06-30 12:28:23 +0000
commit9b0efad5a1cd2ff9886a460866b715a3216fea1c (patch)
tree456e32620ccf21edc18c21609f9eb61648c97239 /src/transport/plugin_transport_http.c
parent5b86133d8584b76fa7e5700c4a11305e606c32c5 (diff)
downloadgnunet-9b0efad5a1cd2ff9886a460866b715a3216fea1c.tar.gz
gnunet-9b0efad5a1cd2ff9886a460866b715a3216fea1c.zip
Diffstat (limited to 'src/transport/plugin_transport_http.c')
-rw-r--r--src/transport/plugin_transport_http.c111
1 files changed, 29 insertions, 82 deletions
diff --git a/src/transport/plugin_transport_http.c b/src/transport/plugin_transport_http.c
index b955ba139..07c4bd5e8 100644
--- a/src/transport/plugin_transport_http.c
+++ b/src/transport/plugin_transport_http.c
@@ -2916,100 +2916,47 @@ tcp_nat_port_map_callback (void *cls,
2916{ 2916{
2917 2917
2918 struct Plugin *plugin = cls; 2918 struct Plugin *plugin = cls;
2919 struct IPv4HttpAddress *t4; 2919 struct IPv4HttpAddress t4;
2920 struct IPv6HttpAddress *t6; 2920 struct IPv6HttpAddress t6;
2921 void *arg; 2921 void *arg;
2922 size_t args; 2922 size_t args;
2923 int af; 2923 int af;
2924 2924
2925 2925 GNUNET_assert(cls !=NULL );
2926 GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, 2926 GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR,
2927 "tcp", 2927 "tcp",
2928 "NPMC called with %d for address `%s'\n", 2928 "NPMC called with %d for address `%s'\n",
2929 add_remove, 2929 add_remove,
2930 GNUNET_a2s (addr, addrlen)); 2930 GNUNET_a2s (addr, addrlen));
2931
2931 /* convert 'addr' to our internal format */ 2932 /* convert 'addr' to our internal format */
2932 return; 2933 return;
2933 GNUNET_assert(cls !=NULL);
2934 af = addr->sa_family;
2935 if ((af == AF_INET) &&
2936 (plugin->use_ipv4 == GNUNET_YES) &&
2937 (plugin->bind6_address == NULL) ) {
2938
2939 struct in_addr bnd_cmp = ((struct sockaddr_in *) addr)->sin_addr;
2940 t4 = GNUNET_malloc(sizeof(struct IPv4HttpAddress));
2941 // Not skipping loopback addresses
2942
2943
2944 t4->ipv4_addr = ((struct sockaddr_in *) addr)->sin_addr.s_addr;
2945 t4->u_port = htons (plugin->port_inbound);
2946 if (plugin->bind4_address != NULL) {
2947 if (0 == memcmp(&plugin->bind4_address->sin_addr, &bnd_cmp, sizeof (struct in_addr)))
2948 {
2949 GNUNET_CONTAINER_DLL_insert(plugin->ipv4_addr_head,
2950 plugin->ipv4_addr_tail,t4);
2951 plugin->env->notify_address(plugin->env->cls,
2952 GNUNET_YES,
2953 t4, sizeof (struct IPv4HttpAddress));
2954 return;
2955 }
2956 GNUNET_free (t4);
2957 return;
2958 }
2959 else
2960 {
2961 GNUNET_CONTAINER_DLL_insert (plugin->ipv4_addr_head,
2962 plugin->ipv4_addr_tail,
2963 t4);
2964 plugin->env->notify_address(plugin->env->cls,
2965 GNUNET_YES,
2966 t4, sizeof (struct IPv4HttpAddress));
2967 return;
2968 }
2969 }
2970 if ((af == AF_INET6) &&
2971 (plugin->use_ipv6 == GNUNET_YES) &&
2972 (plugin->bind4_address == NULL) ) {
2973
2974 struct in6_addr bnd_cmp6 = ((struct sockaddr_in6 *) addr)->sin6_addr;
2975
2976 t6 = GNUNET_malloc(sizeof(struct IPv6HttpAddress));
2977 GNUNET_assert(t6 != NULL);
2978
2979 if (plugin->bind6_address != NULL) {
2980 if (0 == memcmp(&plugin->bind6_address->sin6_addr,
2981 &bnd_cmp6,
2982 sizeof (struct in6_addr))) {
2983 memcpy (&t6->ipv6_addr,
2984 &((struct sockaddr_in6 *) addr)->sin6_addr,
2985 sizeof (struct in6_addr));
2986 t6->u6_port = htons (plugin->port_inbound);
2987 plugin->env->notify_address(plugin->env->cls,
2988 GNUNET_YES,
2989 t6, sizeof (struct IPv6HttpAddress));
2990 GNUNET_CONTAINER_DLL_insert(plugin->ipv6_addr_head,
2991 plugin->ipv6_addr_tail,
2992 t6);
2993 return;
2994 }
2995 GNUNET_free (t6);
2996 return;
2997 }
2998 memcpy (&t6->ipv6_addr,
2999 &((struct sockaddr_in6 *) addr)->sin6_addr,
3000 sizeof (struct in6_addr));
3001 t6->u6_port = htons (plugin->port_inbound);
3002 GNUNET_CONTAINER_DLL_insert(plugin->ipv6_addr_head,plugin->ipv6_addr_tail,t6);
3003 2934
2935 af = addr->sa_family;
2936 switch (af)
2937 {
2938 case AF_INET:
2939 t4.ipv4_addr = ((struct sockaddr_in *) addr)->sin_addr.s_addr;
2940 memcpy (&t4.ipv4_addr,
2941 &((struct sockaddr_in *) addr)->sin_addr.s_addr,
2942 sizeof (struct in_addr));
2943 t4.u_port = htons (plugin->port_inbound);
3004 plugin->env->notify_address(plugin->env->cls, 2944 plugin->env->notify_address(plugin->env->cls,
3005 GNUNET_YES, 2945 add_remove,
3006 t6, sizeof (struct IPv6HttpAddress)); 2946 &t4, sizeof (struct IPv6HttpAddress));
3007 } 2947 break;
3008 2948 case AF_INET6:
3009 /* modify our published address list */ 2949 memcpy (&t6.ipv6_addr,
3010 plugin->env->notify_address (plugin->env->cls, 2950 &((struct sockaddr_in6 *) addr)->sin6_addr,
3011 add_remove, 2951 sizeof (struct in6_addr));
3012 arg, args); 2952 t6.u6_port = htons (plugin->port_inbound);
2953 plugin->env->notify_address(plugin->env->cls,
2954 add_remove,
2955 &t6, sizeof (struct IPv6HttpAddress));
2956 break;
2957 default:
2958 return;
2959 }
3013} 2960}
3014 2961
3015/** 2962/**
@@ -3546,7 +3493,7 @@ LIBGNUNET_PLUGIN_TRANSPORT_INIT (void *cls)
3546 struct sockaddr **addrs; 3493 struct sockaddr **addrs;
3547 socklen_t *addrlens; 3494 socklen_t *addrlens;
3548 int ret; 3495 int ret;
3549 ret = GNUNET_SERVICE_get_server_addresses ("transport-http", 3496 ret = GNUNET_SERVICE_get_server_addresses (component_name,
3550 env->cfg, 3497 env->cfg,
3551 &addrs, 3498 &addrs,
3552 &addrlens); 3499 &addrlens);