diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2011-06-30 12:28:23 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2011-06-30 12:28:23 +0000 |
commit | 9b0efad5a1cd2ff9886a460866b715a3216fea1c (patch) | |
tree | 456e32620ccf21edc18c21609f9eb61648c97239 /src/transport/plugin_transport_http.c | |
parent | 5b86133d8584b76fa7e5700c4a11305e606c32c5 (diff) | |
download | gnunet-9b0efad5a1cd2ff9886a460866b715a3216fea1c.tar.gz gnunet-9b0efad5a1cd2ff9886a460866b715a3216fea1c.zip |
Diffstat (limited to 'src/transport/plugin_transport_http.c')
-rw-r--r-- | src/transport/plugin_transport_http.c | 111 |
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); |