[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r19327 - gnunet/src/mesh
From: |
gnunet |
Subject: |
[GNUnet-SVN] r19327 - gnunet/src/mesh |
Date: |
Mon, 23 Jan 2012 15:21:03 +0100 |
Author: bartpolot
Date: 2012-01-23 15:21:03 +0100 (Mon, 23 Jan 2012)
New Revision: 19327
Modified:
gnunet/src/mesh/gnunet-service-mesh.c
Log:
- Attempted to fix #2095 (add incoming tunnel to incomings), don't let
destination destroy tunnel, disconnect instead
Modified: gnunet/src/mesh/gnunet-service-mesh.c
===================================================================
--- gnunet/src/mesh/gnunet-service-mesh.c 2012-01-23 13:08:11 UTC (rev
19326)
+++ gnunet/src/mesh/gnunet-service-mesh.c 2012-01-23 14:21:03 UTC (rev
19327)
@@ -1312,14 +1312,16 @@
path_info->pos = peer_info_transmit_slot (neighbor);
neighbor->types[path_info->pos] = GNUNET_MESSAGE_TYPE_MESH_PATH_CREATE;
neighbor->infos[path_info->pos] = path_info;
- neighbor->core_transmit[path_info->pos] = GNUNET_CORE_notify_transmit_ready
(core_handle, /* handle */
-
0, /* cork */
-
0, /* priority */
-
GNUNET_TIME_UNIT_FOREVER_REL, /* timeout */
-
&id, /* target */
-
sizeof (struct GNUNET_MESH_ManipulatePath) + (p->length * sizeof (struct
GNUNET_PeerIdentity)), /*size */
-
&send_core_create_path, /* callback */
-
path_info); /* cls */
+ neighbor->core_transmit[path_info->pos] =
+ GNUNET_CORE_notify_transmit_ready (core_handle, /* handle */
+ 0, /* cork */
+ 0, /* priority */
+ GNUNET_TIME_UNIT_FOREVER_REL, /*
timeout */
+ &id, /* target */
+ sizeof (struct
GNUNET_MESH_ManipulatePath) +
+ (p->length * sizeof (struct
GNUNET_PeerIdentity)), /*size */
+ &send_core_create_path, /* callback */
+ path_info); /* cls */
}
@@ -2234,10 +2236,15 @@
}
c = t->client_dest;
GNUNET_CRYPTO_hash (&t->local_tid_dest, sizeof (MESH_TunnelNumber), &hash);
- if (NULL != c &&
- GNUNET_YES != GNUNET_CONTAINER_multihashmap_remove (c->tunnels, &hash,
t))
+ if (NULL != c)
{
- r = GNUNET_SYSERR;
+ if (GNUNET_YES !=
+ GNUNET_CONTAINER_multihashmap_remove (c->tunnels, &hash, t) ||
+ GNUNET_YES !=
+ GNUNET_CONTAINER_multihashmap_remove (incoming_tunnels, &hash, t))
+ {
+ r = GNUNET_SYSERR;
+ }
}
if (t->local_tid >= GNUNET_MESH_LOCAL_TUNNEL_ID_SERV)
{
@@ -3782,6 +3789,17 @@
send_client_tunnel_disconnect(t, c);
GNUNET_assert (GNUNET_YES ==
GNUNET_CONTAINER_multihashmap_remove (c->tunnels, &hash, t));
+ if (c == t->client_dest)
+ {
+ GNUNET_assert (GNUNET_YES ==
+ GNUNET_CONTAINER_multihashmap_remove (incoming_tunnels,
&hash, t));
+ GNUNET_assert (GNUNET_YES ==
+ GNUNET_CONTAINER_multihashmap_remove (t->peers,
&my_full_id.hashPubKey, t));
+ t->client_dest = NULL;
+ t->local_tid_dest = 0;
+ GNUNET_SERVER_receive_done (client, GNUNET_OK);
+ return;
+ }
t->client = NULL;
tunnel_send_destroy (t);
@@ -4022,6 +4040,8 @@
GNUNET_CRYPTO_hash (&t->local_tid_dest, sizeof (MESH_TunnelNumber), &hash);
GNUNET_CONTAINER_multihashmap_put (c->tunnels, &hash, t,
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
+ GNUNET_CONTAINER_multihashmap_put (incoming_tunnels, &hash, t,
+
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
GNUNET_SERVER_notification_context_unicast (nc, c->handle, &cmsg.header,
GNUNET_NO);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r19327 - gnunet/src/mesh,
gnunet <=