- begin work on enhanced multipart receiving
[oweals/gnunet.git] / src / mesh / gnunet-service-mesh_peer.c
index 6c5bbf752c35aca56e97c615a5680a5316bc182d..aa9f52fe618ae72ecf157101d7b8934da4da82f8 100644 (file)
@@ -1324,8 +1324,10 @@ GMP_connect (struct MeshPeer *peer)
          * path.
          *
          * Re-running the DHT GET should give core time to callback.
+         *
+         * GMT_use_path -> GMC_new -> register_neighbors takes care of
+         * updating statistics about this issue.
          */
-        GNUNET_break (0);
         rerun_search = GNUNET_YES;
       }
       else
@@ -1594,6 +1596,37 @@ GMP_add_path_to_all (const struct MeshPeerPath *p, int confirmed)
 }
 
 
+/**
+ * Remove any path to the peer that has the extact same peers as the one given.
+ *
+ * @param peer Peer to remove the path from.
+ * @param path Path to remove. Is always destroyed .
+ */
+void
+GMP_remove_path (struct MeshPeer *peer, struct MeshPeerPath *path)
+{
+  struct MeshPeerPath *iter;
+  struct MeshPeerPath *next;
+
+  GNUNET_assert (myid == path->peers[0]);
+  GNUNET_assert (peer->id == path->peers[path->length - 1]);
+
+  for (iter = peer->path_head; NULL != iter; iter = next)
+  {
+    next = iter->next;
+    if (0 == memcmp (path->peers, iter->peers,
+                     sizeof (GNUNET_PEER_Id) * path->length))
+    {
+      GNUNET_CONTAINER_DLL_remove (peer->path_head, peer->path_tail, iter);
+      path_destroy (iter);
+      if (path == iter)
+        return;
+    }
+  }
+  path_destroy (path);
+}
+
+
 /**
  * Remove a connection from a neighboring peer.
  *
@@ -1695,6 +1728,7 @@ GMP_get_short_id (const struct MeshPeer *peer)
 struct MeshTunnel3 *
 GMP_get_tunnel (const struct MeshPeer *peer)
 {
+  GNUNET_assert (NULL != peer->tunnel);
   return peer->tunnel;
 }