From 8df584aafe56a0ab901c780e5405feb273e09475 Mon Sep 17 00:00:00 2001 From: Matthias Wachs Date: Wed, 7 Sep 2011 11:42:10 +0000 Subject: [PATCH] correct usage of ats \0 termination --- .../gnunet-service-transport_neighbours.c | 25 ++++++++++++++++--- .../gnunet-service-transport_validation.c | 18 ++++++++++--- 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/transport/gnunet-service-transport_neighbours.c b/src/transport/gnunet-service-transport_neighbours.c index 031950151..8937ae5a9 100644 --- a/src/transport/gnunet-service-transport_neighbours.c +++ b/src/transport/gnunet-service-transport_neighbours.c @@ -256,7 +256,7 @@ transmission_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc); * @param receiver intended receiver * @param success whether it worked or not */ -static void +void transmit_send_continuation (void *cls, const struct GNUNET_PeerIdentity *receiver, int success) @@ -318,7 +318,6 @@ try_transmission_to_peer (struct NeighbourMapEntry *n) n->is_active = mq; mq->n = n; - ret = papi->send (papi->cls, &n->id, mq->message_buf, mq->message_buf_size, 0 /* priority -- remove from plugin API? */ , @@ -598,6 +597,11 @@ GST_neighbours_try_connect (const struct GNUNET_PeerIdentity *target) GNUNET_assert (neighbours != NULL); +#if DEBUG_TRANSPORT + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Trying to connect to peer `%s'\n", + GNUNET_i2s (target)); +#endif + GNUNET_assert (0 != memcmp (target, &GST_my_identity, sizeof (struct GNUNET_PeerIdentity))); @@ -606,8 +610,16 @@ GST_neighbours_try_connect (const struct GNUNET_PeerIdentity *target) return; /* already connected */ if (n == NULL) { +#if DEBUG_TRANSPORT + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Unknown peer `%s', creating new neighbour\n", + GNUNET_i2s (target)); +#endif n = GNUNET_malloc (sizeof (struct NeighbourMapEntry)); n->id = *target; + GNUNET_array_grow (n->ats, n->ats_count, 1); + n->ats[0].type = htonl (GNUNET_TRANSPORT_ATS_ARRAY_TERMINATOR);; + n->ats[0].value = htonl (0); GNUNET_BANDWIDTH_tracker_init (&n->in_tracker, GNUNET_CONSTANTS_DEFAULT_BW_IN_OUT, MAX_BANDWIDTH_CARRY_S); @@ -621,6 +633,11 @@ GST_neighbours_try_connect (const struct GNUNET_PeerIdentity *target) } if (n->asc != NULL) return; /* already trying */ +#if DEBUG_TRANSPORT + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Asking ATS for suggested address to connect to peer `%s'\n", + GNUNET_i2s (target)); +#endif n->asc = GNUNET_ATS_suggest_address (GST_ats, target, &try_connect_using_address, n); @@ -727,6 +744,7 @@ GST_neighbours_send (const struct GNUNET_PeerIdentity *target, const void *msg, cont (cont_cls, GNUNET_SYSERR); return; } + GNUNET_assert (msg_size >= sizeof (struct GNUNET_MessageHeader)); GNUNET_STATISTICS_update (GST_stats, gettext_noop @@ -922,8 +940,9 @@ neighbours_iterate (void *cls, const GNUNET_HashCode * key, void *value) if (GNUNET_YES != n->is_connected) return GNUNET_OK; + GNUNET_assert (n->ats_count > 0); - ic->cb (ic->cb_cls, &n->id, n->ats, n->ats_count - 1); + ic->cb (ic->cb_cls, &n->id, n->ats, n->ats_count); return GNUNET_OK; } diff --git a/src/transport/gnunet-service-transport_validation.c b/src/transport/gnunet-service-transport_validation.c index cbf0bc7d2..395f4e87a 100644 --- a/src/transport/gnunet-service-transport_validation.c +++ b/src/transport/gnunet-service-transport_validation.c @@ -408,8 +408,12 @@ add_valid_address (void *cls, const char *tname, } ve = find_validation_entry (&public_key, &pid, tname, addr, addrlen); ve->valid_until = GNUNET_TIME_absolute_max (ve->valid_until, expiration); + struct GNUNET_TRANSPORT_ATS_Information ats; + ats.type = htonl (GNUNET_TRANSPORT_ATS_ARRAY_TERMINATOR); + ats.value = htonl (0); + GNUNET_ATS_address_update (GST_ats, &pid, ve->valid_until, tname, NULL, addr, - addrlen, NULL, 0); + addrlen, &ats, 1); return GNUNET_OK; } @@ -774,10 +778,13 @@ transmit_ping_if_allowed (void *cls, const struct GNUNET_PeerIdentity *pid, if (papi == NULL) ret = -1; else + { + GNUNET_assert (papi->send != NULL); ret = papi->send (papi->cls, pid, message_buf, tsize, PING_PRIORITY, HELLO_REVALIDATION_START_TIME, NULL /* no session */ , ve->addr, ve->addrlen, GNUNET_YES, NULL, NULL); + } } if (-1 != ret) { @@ -911,6 +918,7 @@ GST_validation_handle_pong (const struct GNUNET_PeerIdentity *sender, if (ntohs (hdr->size) < sizeof (struct TransportPongMessage)) { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "SIZE!\n"); GNUNET_break_op (0); return; } @@ -965,8 +973,7 @@ GST_validation_handle_pong (const struct GNUNET_PeerIdentity *sender, GNUNET_break_op (0); return; } - -#if VERBOSE_VALIDATION +#if DEBUG_TRANSPORT GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Address validated for peer `%s' with plugin `%s': `%s'\n", GNUNET_i2s (sender), tname, GST_plugins_a2s (tname, addr, @@ -975,7 +982,10 @@ GST_validation_handle_pong (const struct GNUNET_PeerIdentity *sender, /* validity achieved, remember it! */ ve->valid_until = GNUNET_TIME_relative_to_absolute (HELLO_ADDRESS_EXPIRATION); - GNUNET_ATS_address_update (GST_ats, &ve->pid, ve->valid_until, ve->transport_name, NULL, ve->addr, ve->addrlen, NULL, 0); /* FIXME: compute and add latency here... */ + struct GNUNET_TRANSPORT_ATS_Information ats; + ats.type = htonl (GNUNET_TRANSPORT_ATS_ARRAY_TERMINATOR); + ats.value = htonl (0); + GNUNET_ATS_address_update (GST_ats, &ve->pid, ve->valid_until, ve->transport_name, NULL, ve->addr, ve->addrlen, &ats, 1); /* FIXME: compute and add latency here... */ /* build HELLO to store in PEERINFO */ ve->copied = GNUNET_NO; -- 2.25.1