loglevel MESSAGE for the incoming connection message + type
[oweals/gnunet.git] / src / cadet / gnunet-service-cadet-new_paths.h
index e00b05a3d4a127850fb719c38e3c879396aca984..7310d75e640e0b72c47a0a06c5286dd75a9e9a3e 100644 (file)
 #include "gnunet-service-cadet-new.h"
 
 /**
- * Create a peer path based on the result of a DHT lookup.
+ * Create a peer path based on the result of a DHT lookup.  If we
+ * already know this path, or one that is longer, simply return NULL.
+ * Otherwise, we try to extend an existing path, or create a new one
+ * if applicable.
  *
  * @param get_path path of the get request
  * @param get_path_length lenght of @a get_path
  * @param put_path path of the put request
  * @param put_path_length length of the @a put_path
- * @return a path through the network
  */
-struct CadetPeerPath *
-GCPP_path_from_dht (const struct GNUNET_PeerIdentity *get_path,
-                    unsigned int get_path_length,
-                    const struct GNUNET_PeerIdentity *put_path,
-                    unsigned int put_path_length);
+void
+GCPP_try_path_from_dht (const struct GNUNET_PeerIdentity *get_path,
+                        unsigned int get_path_length,
+                        const struct GNUNET_PeerIdentity *put_path,
+                        unsigned int put_path_length);
 
 
 /**
- * Destroy a path, we no longer need it.
+ * We got an incoming connection, obtain the corresponding path.
  *
- * @param p path to destroy.
+ * @param path_length number of segments on the @a path
+ * @param path through the network, in reverse order (we are at the end!)
+ * @return corresponding path object
  */
-void
-GCPP_path_destroy (struct CadetPeerPath *p);
+struct CadetPeerPath *
+GCPP_get_path_from_route (unsigned int path_length,
+                          const struct GNUNET_PeerIdentity *pids);
 
 
 /**
@@ -67,6 +72,62 @@ unsigned int
 GCPP_get_length (struct CadetPeerPath *path);
 
 
+/**
+ * Return connection to @a destination using @a path, or return
+ * NULL if no such connection exists.
+ *
+ * @param path path to traverse
+ * @param destination destination node to get to, must be on path
+ * @param off offset of @a destination on @a path
+ * @return NULL if we have no existing connection
+ *         otherwise connection from us to @a destination via @a path
+ */
+struct CadetConnection *
+GCPP_get_connection (struct CadetPeerPath *path,
+                     struct CadetPeer *destination,
+                     unsigned int off);
+
+
+/**
+ * Notify @a path that it is used for connection @a cc
+ * which ends at the path's offset @a off.
+ *
+ * @param path the path to remember the @a cc
+ * @param off the offset where the @a cc ends
+ * @param cc the connection to remember
+ */
+void
+GCPP_add_connection (struct CadetPeerPath *path,
+                     unsigned int off,
+                     struct CadetConnection *cc);
+
+
+/**
+ * Notify @a path that it is no longer used for connection @a cc which
+ * ended at the path's offset @a off.
+ *
+ * @param path the path to forget the @a cc
+ * @param off the offset where the @a cc ended
+ * @param cc the connection to forget
+ */
+void
+GCPP_del_connection (struct CadetPeerPath *path,
+                     unsigned int off,
+                     struct CadetConnection *cc);
+
+
+/**
+ * Find peer's offset on path.
+ *
+ * @param path path to search
+ * @param cp peer to look for
+ * @return offset of @a cp on @a path, or UINT_MAX if not found
+ */
+unsigned int
+GCPP_find_peer (struct CadetPeerPath *path,
+                struct CadetPeer *cp);
+
+
 /**
  * Return how much we like keeping the path.  This is an aggregate
  * score based on various factors, including the age of the path
@@ -91,39 +152,31 @@ GCPP_get_desirability (const struct CadetPeerPath *path);
  * the path desirable).
  *
  * @param path the path that is being released
- * @param cp original final destination of @a path
- * @param node entry in the heap of @a cp where this path is anchored
- *             should be used for updates to the desirability of this path
  */
 void
-GCPP_acquire (struct CadetPeerPath *path,
-              struct CadetPeer *cp,
-              struct GNUNET_CONTAINER_HeapNode *node);
+GCPP_release (struct CadetPeerPath *path);
 
 
 /**
- * The given peer @a cp used to own this @a path.  However, it is no
- * longer interested in maintaining it, so the path should be
- * discarded or shortened (in case a previous peer on the path finds
- * the path desirable).
+ * Obtain the peer at offset @a off in @a path.
  *
- * @param path the path that is being released
+ * @param path peer path to inspect
+ * @param off offset to return, must be smaller than path length
+ * @return peer at offset @a off
  */
-void
-GCPP_release (struct CadetPeerPath *path);
+struct CadetPeer *
+GCPP_get_peer_at_offset (struct CadetPeerPath *path,
+                         unsigned int off);
 
 
 /**
- * Obtain the identity of the peer at offset @a off in @a path.
+ * Convert a path to a human-readable string.
  *
- * @param path peer path to inspect
- * @param off offset to return, must be smaller than path length
- * @param[out] pid where to write the pid, must not be NULL
+ * @param path path to convert
+ * @return string, statically allocated
  */
-void
-GCPP_get_pid_at_offset (struct CadetPeerPath *path,
-                        unsigned int off,
-                        struct GNUNET_PeerIdentity *pid);
+const char *
+GCPP_2s (struct CadetPeerPath *p);
 
 
 #endif