[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r17003 - gnunet/src/transport
From: |
gnunet |
Subject: |
[GNUnet-SVN] r17003 - gnunet/src/transport |
Date: |
Fri, 23 Sep 2011 13:10:34 +0200 |
Author: wachs
Date: 2011-09-23 13:10:34 +0200 (Fri, 23 Sep 2011)
New Revision: 17003
Modified:
gnunet/src/transport/gnunet-service-transport_neighbours.c
Log:
fixing https://www.gnunet.org/bugs/view.php?id=1800
- erroneous session termination
- erroneous address deletion
+ additional checks
Modified: gnunet/src/transport/gnunet-service-transport_neighbours.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport_neighbours.c 2011-09-23
10:17:48 UTC (rev 17002)
+++ gnunet/src/transport/gnunet-service-transport_neighbours.c 2011-09-23
11:10:34 UTC (rev 17003)
@@ -382,6 +382,15 @@
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 @@
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 @@
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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r17003 - gnunet/src/transport,
gnunet <=