X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fnat%2Fnat.c;h=907728fb4dd4ea452e83b2742de2457f8a8d4b71;hb=1ed484dfdf1676d92e95b9ed262abc28ca7b3aee;hp=929ba3f627bc45d8f26aa5b806206b17fc50bb30;hpb=c2d9d1e64c9801122caaa6b429fc67706db5c9d7;p=oweals%2Fgnunet.git diff --git a/src/nat/nat.c b/src/nat/nat.c index 929ba3f62..907728fb4 100644 --- a/src/nat/nat.c +++ b/src/nat/nat.c @@ -69,6 +69,11 @@ enum LocalAddressSource * given in the configuration (i.e. hole-punched DynDNS setup). */ LAL_EXTERNAL_IP, + + /** + * Address was obtained by an external STUN server + */ + LAL_EXTERNAL_STUN_IP, /** * Address was obtained by DNS resolution of the external hostname @@ -245,12 +250,7 @@ struct GNUNET_NAT_Handle /** * ID of DynDNS lookup task */ - struct GNUNET_SCHEDULER_Task * dns_task; - - /** - * ID of task to add addresses from bind. - */ - struct GNUNET_SCHEDULER_Task * bind_task; + struct GNUNET_SCHEDULER_Task *dns_task; /** * How often do we scan for changes in our IP address from our local @@ -1032,10 +1032,10 @@ upnp_add (void *cls, _("Error while running upnp client:\n")); //FIXME: convert error code to string - + return; } - + if (GNUNET_YES == add_remove) { add_to_address_list (h, LAL_UPNP, addr, addrlen); @@ -1111,20 +1111,17 @@ add_minis (struct GNUNET_NAT_Handle *h, /** * Task to add addresses from original bind to set of valid addrs. * - * @param cls the NAT handle - * @param tc scheduler context + * @param h the NAT handle */ static void -add_from_bind (void *cls, - const struct GNUNET_SCHEDULER_TaskContext *tc) +add_from_bind (struct GNUNET_NAT_Handle *h) { static struct in6_addr any = IN6ADDR_ANY_INIT; - struct GNUNET_NAT_Handle *h = cls; + unsigned int i; struct sockaddr *sa; const struct sockaddr_in *v4; - h->bind_task = NULL; for (i = 0; i < h->num_local_addrs; i++) { sa = h->local_addrs[i]; @@ -1138,13 +1135,14 @@ add_from_bind (void *cls, } v4 = (const struct sockaddr_in *) sa; if (0 != v4->sin_addr.s_addr) - add_to_address_list (h, LAL_BINDTO_ADDRESS, sa, + add_to_address_list (h, + LAL_BINDTO_ADDRESS, sa, sizeof (struct sockaddr_in)); if (h->enable_upnp) { GNUNET_log (GNUNET_ERROR_TYPE_INFO, - "Running upnp client for address `%s'\n", - GNUNET_a2s (sa,sizeof (struct sockaddr_in))); + "Running upnp client for address `%s'\n", + GNUNET_a2s (sa,sizeof (struct sockaddr_in))); add_minis (h, ntohs (v4->sin_port)); } break; @@ -1155,9 +1153,12 @@ add_from_bind (void *cls, break; } if (0 != - memcmp (&((const struct sockaddr_in6 *) sa)->sin6_addr, &any, + memcmp (&((const struct sockaddr_in6 *) sa)->sin6_addr, + &any, sizeof (struct in6_addr))) - add_to_address_list (h, LAL_BINDTO_ADDRESS, sa, + add_to_address_list (h, + LAL_BINDTO_ADDRESS, + sa, sizeof (struct sockaddr_in6)); break; default: @@ -1167,7 +1168,6 @@ add_from_bind (void *cls, } - /** * Attempt to enable port redirection and detect public IP address contacting * UPnP or NAT-PMP routers on the local network. Use addr to specify to which @@ -1178,7 +1178,7 @@ add_from_bind (void *cls, * @param is_tcp #GNUNET_YES for TCP, #GNUNET_NO for UDP * @param adv_port advertised port (port we are either bound to or that our OS * locally performs redirection from to our bound port). - * @param num_addrs number of addresses in 'addrs' + * @param num_addrs number of addresses in @a addrs * @param addrs the local addresses packets should be redirected to * @param addrlens actual lengths of the addresses * @param address_callback function to call everytime the public IP address changes @@ -1192,7 +1192,7 @@ GNUNET_NAT_register (const struct GNUNET_CONFIGURATION_Handle *cfg, uint16_t adv_port, unsigned int num_addrs, const struct sockaddr **addrs, - const socklen_t * addrlens, + const socklen_t *addrlens, GNUNET_NAT_AddressCallback address_callback, GNUNET_NAT_ReversalCallback reversal_callback, void *callback_cls) @@ -1227,7 +1227,6 @@ GNUNET_NAT_register (const struct GNUNET_CONFIGURATION_Handle *cfg, memcpy (h->local_addrs[i], addrs[i], addrlens[i]); } } - h->bind_task = GNUNET_SCHEDULER_add_now (&add_from_bind, h); if (GNUNET_OK == GNUNET_CONFIGURATION_have_value (cfg, "nat", "INTERNAL_ADDRESS")) { @@ -1343,10 +1342,13 @@ GNUNET_NAT_register (const struct GNUNET_CONFIGURATION_Handle *cfg, if (NULL != h->address_callback) { - h->ifc_task = GNUNET_SCHEDULER_add_now (&list_interfaces, h); + h->ifc_task = GNUNET_SCHEDULER_add_now (&list_interfaces, + h); if (GNUNET_YES == h->use_hostname) - h->hostname_task = GNUNET_SCHEDULER_add_now (&resolve_hostname, h); + h->hostname_task = GNUNET_SCHEDULER_add_now (&resolve_hostname, + h); } + add_from_bind (h); return h; } @@ -1369,7 +1371,9 @@ GNUNET_NAT_unregister (struct GNUNET_NAT_Handle *h) "NAT unregister called\n"); while (NULL != (ml = h->mini_head)) { - GNUNET_CONTAINER_DLL_remove (h->mini_head, h->mini_tail, ml); + GNUNET_CONTAINER_DLL_remove (h->mini_head, + h->mini_tail, + ml); if (NULL != ml->mini) GNUNET_NAT_mini_map_stop (ml->mini); GNUNET_free (ml); @@ -1389,11 +1393,6 @@ GNUNET_NAT_unregister (struct GNUNET_NAT_Handle *h) GNUNET_SCHEDULER_cancel (h->server_read_task); h->server_read_task = NULL; } - if (NULL != h->bind_task) - { - GNUNET_SCHEDULER_cancel (h->bind_task); - h->bind_task = NULL; - } if (NULL != h->ifc_task) { GNUNET_SCHEDULER_cancel (h->ifc_task); @@ -1562,7 +1561,7 @@ GNUNET_NAT_test_address (struct GNUNET_NAT_Handle *h, /** * Converts enum GNUNET_NAT_StatusCode to a string - * + * * @param err error code to resolve to a string * @return pointer to a static string containing the error code */