2 This file is part of GNUnet.
3 (C) 2001 - 2013 Christian Grothoff (and other contributing authors)
5 GNUnet is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published
7 by the Free Software Foundation; either version 3, or (at your
8 option) any later version.
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with GNUnet; see the file COPYING. If not, write to the
17 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA.
22 * @file cadet/cadet_path.h
23 * @brief Path handling functions
24 * @author Bartlomiej Polot
27 #include "gnunet-service-cadet_connection.h"
35 #if 0 /* keep Emacsens' auto-indent happy */
40 /******************************************************************************/
41 /************************ DATA STRUCTURES ****************************/
42 /******************************************************************************/
45 * Information regarding a possible path to reach a single peer
53 struct CadetPeerPath *next;
54 struct CadetPeerPath *prev;
57 * List of all the peers that form the path from origin to target.
59 GNUNET_PEER_Id *peers;
62 * Number of peers (hops) in the path
67 * User defined data store.
69 struct CadetConnection *c;
72 * Path's score, how reliable is the path.
77 * Task to delete the path.
78 * We tried it, it didn't work, don't try again in a while.
80 GNUNET_SCHEDULER_TaskIdentifier path_delete;
84 /******************************************************************************/
85 /************************* FUNCTIONS *****************************/
86 /******************************************************************************/
91 * @param length How many hops will the path have.
93 * @return A newly allocated path with a peer array of the specified length.
95 struct CadetPeerPath *
96 path_new (unsigned int length);
102 * @param path The path to invert.
105 path_invert (struct CadetPeerPath *path);
109 * Duplicate a path, incrementing short peer's rc.
111 * @param path The path to duplicate.
113 struct CadetPeerPath *
114 path_duplicate (const struct CadetPeerPath *path);
118 * Get the length of a path.
120 * @param path The path to measure, with the local peer at any point of it.
122 * @return Number of hops to reach destination.
123 * UINT_MAX in case the peer is not in the path.
126 path_get_length (struct CadetPeerPath *path);
129 * Mark path as invalid: keep it aroud for a while to avoid trying it in a loop.
131 * DHT_get sometimes returns bad cached results, for instance, on a locally
132 * cached result where the PUT followed a path that is no longer current.
134 * @param p Path to invalidate.
137 path_invalidate (struct CadetPeerPath *p);
140 * Test if a path is valid (or at least not known to be invalid).
142 * @param path Path to test.
144 * @return #GNUNET_YES If the path is valid or unknown,
145 * #GNUNET_NO If the path is known to be invalid.
148 path_is_valid (const struct CadetPeerPath *path);
151 * Destroy the path and free any allocated resources linked to it
153 * @param p the path to destroy
155 * @return GNUNET_OK on success
158 path_destroy (struct CadetPeerPath *p);
161 * Path -> allocated one line string. Caller must free.
166 path_2s (struct CadetPeerPath *p);
169 * Print info about the path for debug.
171 * @param p Path to debug.
174 path_debug (struct CadetPeerPath *p);
176 #if 0 /* keep Emacsens' auto-indent happy */
184 /* ifndef CADET_PATH_H */