- begin work on enhanced multipart receiving
[oweals/gnunet.git] / src / mesh / mesh_path.h
1 /*
2      This file is part of GNUnet.
3      (C) 2001 - 2013 Christian Grothoff (and other contributing authors)
4
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.
9
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.
14
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.
19 */
20
21 /**
22  * @file mesh/mesh_path.h
23  * @brief Path handling functions
24  * @author Bartlomiej Polot
25  */
26
27 #ifndef MESH_PATH_H_
28 #define MESH_PATH_H_
29
30 #ifdef __cplusplus
31 extern "C"
32 {
33   #if 0                           /* keep Emacsens' auto-indent happy */
34 }
35 #endif
36 #endif
37
38 /******************************************************************************/
39 /************************      DATA STRUCTURES     ****************************/
40 /******************************************************************************/
41
42 /**
43  * Information regarding a possible path to reach a single peer
44  */
45 struct MeshPeerPath
46 {
47
48     /**
49      * Linked list
50      */
51   struct MeshPeerPath *next;
52   struct MeshPeerPath *prev;
53
54     /**
55      * List of all the peers that form the path from origin to target.
56      */
57   GNUNET_PEER_Id *peers;
58
59     /**
60      * Number of peers (hops) in the path
61      */
62   unsigned int length;
63
64     /**
65      * Path's score, how reliable is the path.
66      */
67   int score;
68
69 };
70
71 /******************************************************************************/
72 /*************************        FUNCTIONS       *****************************/
73 /******************************************************************************/
74
75 /**
76  * Create a new path.
77  *
78  * @param length How many hops will the path have.
79  *
80  * @return A newly allocated path with a peer array of the specified length.
81  */
82 struct MeshPeerPath *
83 path_new (unsigned int length);
84
85
86 /**
87  * Invert the path.
88  *
89  * @param path The path to invert.
90  */
91 void
92 path_invert (struct MeshPeerPath *path);
93
94
95 /**
96  * Duplicate a path, incrementing short peer's rc.
97  *
98  * @param path The path to duplicate.
99  */
100 struct MeshPeerPath *
101 path_duplicate (const struct MeshPeerPath *path);
102
103
104 /**
105  * Get the length of a path.
106  *
107  * @param path The path to measure, with the local peer at any point of it.
108  *
109  * @return Number of hops to reach destination.
110  *         UINT_MAX in case the peer is not in the path.
111  */
112 unsigned int
113 path_get_length (struct MeshPeerPath *path);
114
115
116 /**
117  * Destroy the path and free any allocated resources linked to it
118  *
119  * @param p the path to destroy
120  *
121  * @return GNUNET_OK on success
122  */
123 int
124 path_destroy (struct MeshPeerPath *p);
125
126 void
127 path_debug (struct MeshPeerPath *p);
128
129 #if 0                           /* keep Emacsens' auto-indent happy */
130 {
131   #endif
132   #ifdef __cplusplus
133 }
134 #endif
135
136
137 /* ifndef MESH_PATH_H */
138 #endif