X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fcadet%2Fgnunet-service-cadet-new_paths.h;h=7310d75e640e0b72c47a0a06c5286dd75a9e9a3e;hb=0af32e03677ab1c8a819b376c8fa026d0ffa9144;hp=55e521bbffc6789d38336fd5bed84d4814f83933;hpb=2500b62d83abfcde9d27878747426516a84ad009;p=oweals%2Fgnunet.git diff --git a/src/cadet/gnunet-service-cadet-new_paths.h b/src/cadet/gnunet-service-cadet-new_paths.h index 55e521bbf..7310d75e6 100644 --- a/src/cadet/gnunet-service-cadet-new_paths.h +++ b/src/cadet/gnunet-service-cadet-new_paths.h @@ -32,28 +32,33 @@ #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 @@ -81,7 +142,7 @@ GCPP_get_length (struct CadetPeerPath *path); * @return desirability of the path, larger is more desirable */ GNUNET_CONTAINER_HeapCostType -GCPP_get_desirability (struct CadetPeerPath *path); +GCPP_get_desirability (const struct CadetPeerPath *path); /** @@ -91,41 +152,31 @@ GCPP_get_desirability (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 cp original final destination of @a path + * @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 *cp); +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