[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r27271 - gnunet/src/transport
From: |
gnunet |
Subject: |
[GNUnet-SVN] r27271 - gnunet/src/transport |
Date: |
Thu, 23 May 2013 16:01:36 +0200 |
Author: wachs
Date: 2013-05-23 16:01:35 +0200 (Thu, 23 May 2013)
New Revision: 27271
Modified:
gnunet/src/transport/gnunet-service-transport.c
gnunet/src/transport/gnunet-service-transport_manipulation.c
gnunet/src/transport/gnunet-service-transport_manipulation.h
Log:
fix for 0002890
Modified: gnunet/src/transport/gnunet-service-transport.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport.c 2013-05-23 14:01:21 UTC
(rev 27270)
+++ gnunet/src/transport/gnunet-service-transport.c 2013-05-23 14:01:35 UTC
(rev 27271)
@@ -548,6 +548,7 @@
"Peer `%s' disconnected and we are connected to %u peers\n",
GNUNET_i2s (peer), connections);
+ GST_manipulation_peer_disconnect (peer);
disconnect_msg.header.size = htons (sizeof (struct DisconnectInfoMessage));
disconnect_msg.header.type = htons
(GNUNET_MESSAGE_TYPE_TRANSPORT_DISCONNECT);
disconnect_msg.reserved = htonl (0);
Modified: gnunet/src/transport/gnunet-service-transport_manipulation.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport_manipulation.c
2013-05-23 14:01:21 UTC (rev 27270)
+++ gnunet/src/transport/gnunet-service-transport_manipulation.c
2013-05-23 14:01:35 UTC (rev 27271)
@@ -628,6 +628,8 @@
{
next = dqe->next;
GNUNET_CONTAINER_DLL_remove
(tmp->send_head, tmp->send_tail, dqe);
+ if (NULL != dqe->cont)
+ dqe->cont
(dqe->cont_cls, GNUNET_SYSERR, dqe->msg_size, 0);
GNUNET_free (dqe);
}
if (GNUNET_SCHEDULER_NO_TASK != tmp->send_delay_task)
@@ -640,7 +642,53 @@
return GNUNET_OK;
}
+/**
+ * Notify manipulation about disconnect so it can discard queued messages
+ *
+ * @param peer the disconnecting peer
+ */
+void
+GST_manipulation_peer_disconnect (const struct GNUNET_PeerIdentity *peer)
+{
+ struct TM_Peer *tmp;
+ struct DelayQueueEntry *dqe;
+ struct DelayQueueEntry *next;
+ if (NULL != (tmp = GNUNET_CONTAINER_multihashmap_get (man_handle.peers,
&peer->hashPubKey)))
+ {
+ next = tmp->send_head;
+ while (NULL != (dqe = next))
+ {
+ next = dqe->next;
+ GNUNET_CONTAINER_DLL_remove
(tmp->send_head, tmp->send_tail, dqe);
+ if (NULL != dqe->cont)
+ dqe->cont
(dqe->cont_cls, GNUNET_SYSERR, dqe->msg_size, 0);
+ GNUNET_free (dqe);
+ }
+ }
+ else if (UINT32_MAX != find_metric (&man_handle.general,
GNUNET_ATS_QUALITY_NET_DELAY, TM_SEND))
+ {
+ next = generic_dqe_head;
+ while (NULL != (dqe = next))
+ {
+ if (0 == memcmp (&peer, &dqe->id,
sizeof (dqe->id)))
+ {
+
GNUNET_CONTAINER_DLL_remove (generic_dqe_head, generic_dqe_tail, dqe);
+ if (NULL != dqe->cont)
+ dqe->cont
(dqe->cont_cls, GNUNET_SYSERR, dqe->msg_size, 0);
+ GNUNET_free (dqe);
+
+ }
+ }
+ if (GNUNET_SCHEDULER_NO_TASK != generic_send_delay_task)
+ {
+ GNUNET_SCHEDULER_cancel
(generic_send_delay_task);
+ generic_send_delay_task =
GNUNET_SCHEDULER_add_delayed
(GNUNET_TIME_absolute_get_remaining(generic_dqe_head->sent_at), &send_delayed,
generic_dqe_head);
+ }
+ }
+}
+
+
/**
* Stop traffic manipulation
*/
@@ -657,6 +705,8 @@
{
next = cur->next;
GNUNET_CONTAINER_DLL_remove (generic_dqe_head,
generic_dqe_tail, cur);
+ if (NULL != cur->cont)
+ cur->cont (cur->cont_cls, GNUNET_SYSERR,
cur->msg_size, 0);
GNUNET_free (cur);
}
if (GNUNET_SCHEDULER_NO_TASK != generic_send_delay_task)
Modified: gnunet/src/transport/gnunet-service-transport_manipulation.h
===================================================================
--- gnunet/src/transport/gnunet-service-transport_manipulation.h
2013-05-23 14:01:21 UTC (rev 27270)
+++ gnunet/src/transport/gnunet-service-transport_manipulation.h
2013-05-23 14:01:35 UTC (rev 27271)
@@ -103,6 +103,14 @@
uint32_t ats_count);
/**
+ * Notify manipulation about disconnect so it can discard queued messages
+ *
+ * @param peer the disconnecting peer
+ */
+void
+GST_manipulation_peer_disconnect (const struct GNUNET_PeerIdentity *peer);
+
+/**
* Initialize traffic manipulation
*
* @param GST_cfg configuration handle
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r27271 - gnunet/src/transport,
gnunet <=