X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fats%2Fats_api_scheduling.c;h=78e8d61ccef75f1dbf6a546c8eacce195808c20d;hb=82c4c89493dcbfc6ee7fd1232a9088d02e2cd0a2;hp=8ee3fcee37bdb49da4621fd4718ef09cea2395ce;hpb=cf5de44a6784fc5cfaf5a32808c594bee4d26060;p=oweals%2Fgnunet.git diff --git a/src/ats/ats_api_scheduling.c b/src/ats/ats_api_scheduling.c index 8ee3fcee3..78e8d61cc 100644 --- a/src/ats/ats_api_scheduling.c +++ b/src/ats/ats_api_scheduling.c @@ -29,6 +29,8 @@ #define DEBUG_ATS GNUNET_EXTRA_LOGGING +#define INTERFACE_PROCESSING_INTERVALL GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 1) + /** * Message in linked list we should send to the ATS service. The * actual binary message follows this struct. @@ -676,8 +678,8 @@ interface_proc (void *cls, const char *name, net->netmask = (struct sockaddr *) &tmp[1]; net->length = addrlen; + memset (&network4, 0, sizeof (network4)); network4.sin_family = AF_INET; - network4.sin_port = htons (0); #if HAVE_SOCKADDR_IN_SIN_LEN network4.sin_len = sizeof (network4); #endif @@ -700,8 +702,8 @@ interface_proc (void *cls, const char *name, net->netmask = (struct sockaddr *) &tmp[1]; net->length = addrlen; + memset (&network6, 0, sizeof (network6)); network6.sin6_family = AF_INET6; - network6.sin6_port = htons (0); #if HAVE_SOCKADDR_IN_SIN_LEN network6.sin6_len = sizeof (network6); #endif @@ -719,11 +721,13 @@ interface_proc (void *cls, const char *name, /* Store in list */ if (net != NULL) { - char * netmask = strdup (GNUNET_a2s((struct sockaddr *) net->netmask, addrlen)); +#if VERBOSE_ATS + char * netmask = GNUNET_strdup (GNUNET_a2s((struct sockaddr *) net->netmask, addrlen)); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Adding network `%s', netmask `%s'\n", GNUNET_a2s((struct sockaddr *) net->network, addrlen), netmask); GNUNET_free (netmask); +# endif GNUNET_CONTAINER_DLL_insert(sh->net_head, sh->net_tail, net); } return GNUNET_OK; @@ -743,20 +747,23 @@ get_addresses (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) sh->interface_task = GNUNET_SCHEDULER_NO_TASK; delete_networks (sh); GNUNET_OS_network_interfaces_list(interface_proc, sh); - - sh->interface_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES, get_addresses, sh); + sh->interface_task = GNUNET_SCHEDULER_add_delayed (INTERFACE_PROCESSING_INTERVALL, + get_addresses, + sh); } /** * Returns where the address is located: LAN or WAN or ... + * @param sh the scheduling handle * @param addr address * @param addrlen address length * @return location as GNUNET_ATS_Information */ -struct GNUNET_ATS_Information +const struct GNUNET_ATS_Information GNUNET_ATS_address_get_type (struct GNUNET_ATS_SchedulingHandle * sh, const struct sockaddr * addr, socklen_t addrlen) { + GNUNET_assert (sh != NULL); struct GNUNET_ATS_Information ats; struct ATS_Network * cur = sh->net_head; int type = GNUNET_ATS_NET_UNSPECIFIED; @@ -799,7 +806,7 @@ GNUNET_ATS_address_get_type (struct GNUNET_ATS_SchedulingHandle * sh, const stru if (((a4->sin_addr.s_addr & mask4->sin_addr.s_addr)) == net4->sin_addr.s_addr) { - char * net = strdup (GNUNET_a2s ((const struct sockaddr *) net4, addrlen)); + char * net = GNUNET_strdup (GNUNET_a2s ((const struct sockaddr *) net4, addrlen)); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "`%s' is in network `%s'\n", GNUNET_a2s ((const struct sockaddr *)a4, addrlen), net); @@ -824,7 +831,7 @@ GNUNET_ATS_address_get_type (struct GNUNET_ATS_SchedulingHandle * sh, const stru if (res == GNUNET_YES) { - char * net = strdup (GNUNET_a2s ((const struct sockaddr *) net6, addrlen)); + char * net = GNUNET_strdup (GNUNET_a2s ((const struct sockaddr *) net6, addrlen)); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "`%s' is in network `%s'\n", GNUNET_a2s ((const struct sockaddr *) a6, addrlen), net); @@ -840,7 +847,7 @@ GNUNET_ATS_address_get_type (struct GNUNET_ATS_SchedulingHandle * sh, const stru type = GNUNET_ATS_NET_WAN; #if VERBOSE - char * range; + const char * range; switch (type) { case GNUNET_ATS_NET_WAN: range = "WAN"; @@ -862,7 +869,7 @@ GNUNET_ATS_address_get_type (struct GNUNET_ATS_SchedulingHandle * sh, const stru ats.type = htonl (GNUNET_ATS_NETWORK_TYPE); ats.value = htonl (type); - return ats; + return (const struct GNUNET_ATS_Information) ats; } /** @@ -886,7 +893,9 @@ GNUNET_ATS_scheduling_init (const struct GNUNET_CONFIGURATION_Handle *cfg, sh->suggest_cb_cls = suggest_cb_cls; GNUNET_array_grow (sh->session_array, sh->session_array_size, 4); GNUNET_OS_network_interfaces_list(interface_proc, sh); - sh->interface_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES, get_addresses, sh); + sh->interface_task = GNUNET_SCHEDULER_add_delayed (INTERFACE_PROCESSING_INTERVALL, + get_addresses, + sh); reconnect (sh); return sh; } @@ -924,9 +933,9 @@ GNUNET_ATS_scheduling_done (struct GNUNET_ATS_SchedulingHandle *sh) GNUNET_SCHEDULER_cancel(sh->interface_task); sh->interface_task = GNUNET_SCHEDULER_NO_TASK; } - GNUNET_array_grow (sh->session_array, sh->session_array_size, 0); GNUNET_free (sh); + sh = NULL; } @@ -1012,6 +1021,17 @@ GNUNET_ATS_address_update (struct GNUNET_ATS_SchedulingHandle *sh, size_t namelen; size_t msize; + if (address == NULL) + { + GNUNET_break (0); + return; + } + if ((address == NULL) && (session == NULL)) + { + GNUNET_break (0); + return; + } + namelen = (address->transport_name == NULL) ? 0 : strlen (address->transport_name) + 1;