From ff866d1146522c1347c2c7388f39505071caafe2 Mon Sep 17 00:00:00 2001 From: Matthias Wachs Date: Thu, 25 Aug 2011 13:25:57 +0000 Subject: [PATCH] Extended ATS and transport service to store session IDs to support inbound sessions --- src/ats/ats_api.c | 2 ++ src/include/gnunet_ats_service.h | 1 + src/transport/gnunet-service-transport_clients.c | 4 ++++ .../gnunet-service-transport_neighbours.c | 15 ++++++++++++++- 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/ats/ats_api.c b/src/ats/ats_api.c index aee7fd886..4f791050d 100644 --- a/src/ats/ats_api.c +++ b/src/ats/ats_api.c @@ -286,6 +286,7 @@ suggest_address (void *cls, const GNUNET_HashCode * key, void *value) /* trivial strategy: pick first available address... */ asc->cb (asc->cb_cls, &asc->target, ar->plugin_name, ar->plugin_addr, ar->plugin_addr_len, + ar->session, GNUNET_BANDWIDTH_value_init (asc->atc->total_bps / 32), ar->ats, ar->ats_count); asc->cb = NULL; @@ -682,6 +683,7 @@ notify_valid (void *cls, const GNUNET_HashCode * key, void *value) asc->cb (asc->cb_cls, &asc->target, ar->plugin_name, ar->plugin_addr, ar->plugin_addr_len, + ar->session, GNUNET_BANDWIDTH_value_init (asc->atc->total_bps / 32), ar->ats, ar->ats_count); GNUNET_ATS_suggest_address_cancel (asc); diff --git a/src/include/gnunet_ats_service.h b/src/include/gnunet_ats_service.h index 1de3d1041..618eab0a6 100644 --- a/src/include/gnunet_ats_service.h +++ b/src/include/gnunet_ats_service.h @@ -117,6 +117,7 @@ typedef void (*GNUNET_ATS_AddressSuggestionCallback) (void *cls, const char *plugin_name, const void *plugin_addr, size_t plugin_addr_len, + struct Session *session, struct GNUNET_BANDWIDTH_Value32NBO bandwidth, diff --git a/src/transport/gnunet-service-transport_clients.c b/src/transport/gnunet-service-transport_clients.c index 3ad2149bb..05ccbe60b 100644 --- a/src/transport/gnunet-service-transport_clients.c +++ b/src/transport/gnunet-service-transport_clients.c @@ -493,6 +493,10 @@ clients_handle_send (void *cls, struct GNUNET_SERVER_Client *client, if (GNUNET_NO == GST_neighbours_test_connected (&obm->peer)) { /* not connected, not allowed to send; can happen due to asynchronous operations */ +#if DEBUG_TRANSPORT + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Could not send message to peer `%s': not connected\n", GNUNET_i2s (&obm->peer)); +#endif GNUNET_STATISTICS_update (GST_stats, gettext_noop ("# bytes payload dropped (other peer was not connected)"), diff --git a/src/transport/gnunet-service-transport_neighbours.c b/src/transport/gnunet-service-transport_neighbours.c index 172db755b..306924d12 100644 --- a/src/transport/gnunet-service-transport_neighbours.c +++ b/src/transport/gnunet-service-transport_neighbours.c @@ -318,6 +318,8 @@ try_transmission_to_peer (struct NeighbourMapEntry *n) GNUNET_CONTAINER_DLL_remove (n->messages_head, n->messages_tail, mq); 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? */ , @@ -514,6 +516,16 @@ GST_neighbours_switch_to_address (const struct GNUNET_PeerIdentity *peer, GNUNET_break (0); return; } + +#if DEBUG_TRANSPORT + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "SWITCH! Peer `%4s' switches to plugin `%s' address '%s' session %X\n", + GNUNET_i2s (peer), + plugin_name, + (address_len == 0) ? "" : + GST_plugins_a2s(plugin_name,address,address_len), + session); +#endif + GNUNET_free_non_null (n->addr); n->addr = GNUNET_malloc (address_len); memcpy (n->addr, address, address_len); @@ -551,6 +563,7 @@ static void try_connect_using_address (void *cls, const struct GNUNET_PeerIdentity *target, const char *plugin_name, const void *plugin_address, size_t plugin_address_len, + struct Session *session, struct GNUNET_BANDWIDTH_Value32NBO bandwidth, const struct GNUNET_TRANSPORT_ATS_Information *ats, uint32_t ats_count) @@ -559,7 +572,7 @@ try_connect_using_address (void *cls, const struct GNUNET_PeerIdentity *target, n->asc = NULL; GST_neighbours_switch_to_address (target, plugin_name, plugin_address, - plugin_address_len, NULL, ats, ats_count); + plugin_address_len, session, ats, ats_count); if (GNUNET_YES == n->is_connected) return; n->is_connected = GNUNET_YES; -- 2.25.1