From: Matthias Wachs Date: Fri, 23 Sep 2011 11:10:34 +0000 (+0000) Subject: fixing https://www.gnunet.org/bugs/view.php?id=1800 X-Git-Tag: initial-import-from-subversion-38251~16973 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=a4bcbad810e2c83fc8c3de822b9302776e03fabb;p=oweals%2Fgnunet.git fixing https://gnunet.org/bugs/view.php?id=1800 - erroneous session termination - erroneous address deletion + additional checks --- diff --git a/src/transport/gnunet-service-transport_neighbours.c b/src/transport/gnunet-service-transport_neighbours.c index 89feffbd8..1826080c5 100644 --- a/src/transport/gnunet-service-transport_neighbours.c +++ b/src/transport/gnunet-service-transport_neighbours.c @@ -382,6 +382,15 @@ try_transmission_to_peer (struct NeighbourMapEntry *n) n->is_active = mq; mq->n = n; + if (((n->session == NULL) && (n->addr == NULL) && (n->addrlen == 0))) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "No address peer for peer `%s'\n", + GNUNET_i2s (&n->id)); + transmit_send_continuation (mq, &n->id, GNUNET_SYSERR); + n->transmission_task = GNUNET_SCHEDULER_add_now (&transmission_task, n); + return; + } + ret = papi->send (papi->cls, &n->id, mq->message_buf, mq->message_buf_size, 0 /* priority -- remove from plugin API? */ , @@ -758,15 +767,30 @@ GST_neighbours_session_terminated (const struct GNUNET_PeerIdentity *peer, GNUNET_assert (neighbours != NULL); +#if DEBUG_TRANSPORT + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Session %X to peer `%s' ended \n", + session, GNUNET_i2s (peer)); +#endif + n = lookup_neighbour (peer); if (NULL == n) return; if (session != n->session) return; /* doesn't affect us */ + n->session = NULL; + GNUNET_free (n->addr); + n->addr = NULL; + n->addrlen = 0; + + if (GNUNET_YES != n->is_connected) return; /* not connected anymore anyway, shouldn't matter */ + /* we are not connected until ATS suggests a new address */ + //n->is_connected = GNUNET_NO; + GNUNET_SCHEDULER_cancel (n->timeout_task); n->timeout_task = GNUNET_SCHEDULER_add_delayed (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT, @@ -825,6 +849,24 @@ GST_neighbours_send (const struct GNUNET_PeerIdentity *target, const void *msg, return; } + if ((n->session == NULL) && (n->addr == NULL) && (n->addrlen ==0)) + { + GNUNET_STATISTICS_update (GST_stats, + gettext_noop + ("# messages not sent (no such peer or not connected)"), + 1, GNUNET_NO); +#if DEBUG_TRANSPORT + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Could not send message to peer `%s': no address available\n", + GNUNET_i2s (target)); +#endif + + if (NULL != cont) + cont (cont_cls, GNUNET_SYSERR); + return; + } + + GNUNET_assert (msg_size >= sizeof (struct GNUNET_MessageHeader)); GNUNET_STATISTICS_update (GST_stats, gettext_noop