- add framework for mesh2 mutipeer tests
[oweals/gnunet.git] / src / mesh / mesh_common.c
1 /*
2      This file is part of GNUnet.
3      (C) 2012 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_common.c
23  * @brief MESH helper functions
24  * @author Bartlomiej Polot
25  */
26
27 #include "mesh.h"
28
29
30 int
31 GMC_is_pid_bigger (uint32_t bigger, uint32_t smaller)
32 {
33     return (GNUNET_YES == PID_OVERFLOW(smaller, bigger) ||
34             (bigger > smaller && GNUNET_NO == PID_OVERFLOW(bigger, smaller)));
35 }
36
37
38 uint32_t
39 GMC_max_pid (uint32_t a, uint32_t b)
40 {
41   if (GMC_is_pid_bigger(a, b))
42     return a;
43   return b;
44 }
45
46
47 uint32_t
48 GMC_min_pid (uint32_t a, uint32_t b)
49 {
50   if (GMC_is_pid_bigger(a, b))
51     return b;
52   return a;
53 }
54
55 void
56 GMC_hash32 (uint32_t i, struct GNUNET_HashCode *h)
57 {
58   memset (h, 0, sizeof(struct GNUNET_HashCode));
59   *(unsigned int *) h = i;
60 }
61
62
63 #if !defined(GNUNET_CULL_LOGGING)
64 const char *
65 GNUNET_MESH_DEBUG_M2S (uint16_t m)
66 {
67   static char buf[32];
68   switch (m)
69     {
70       /**
71        * Request the creation of a path
72        */
73     case 256: return "GNUNET_MESSAGE_TYPE_MESH_PATH_CREATE";
74
75       /**
76        * Request the modification of an existing path
77        */
78     case 257: return "GNUNET_MESSAGE_TYPE_MESH_PATH_CHANGE";
79
80       /**
81        * Notify that a connection of a path is no longer valid
82        */
83     case 258: return "GNUNET_MESSAGE_TYPE_MESH_PATH_BROKEN";
84
85       /**
86        * At some point, the route will spontaneously change
87        */
88     case 259: return "GNUNET_MESSAGE_TYPE_MESH_PATH_CHANGED";
89
90       /**
91        * Transport data in the mesh (origin->end) unicast
92        */
93     case 260: return "GNUNET_MESSAGE_TYPE_MESH_UNICAST";
94
95       /**
96        * Transport data to all peers in a tunnel
97        */
98     case 261: return "GNUNET_MESSAGE_TYPE_MESH_MULTICAST";
99
100       /**
101        * Transport data back in the mesh (end->origin)
102        */
103     case 262: return "GNUNET_MESSAGE_TYPE_MESH_TO_ORIGIN";
104
105       /**
106        * Send origin an ACK that the path is complete
107        */
108     case 263: return "GNUNET_MESSAGE_TYPE_MESH_PATH_ACK";
109
110       /**
111        * Avoid path timeouts
112        */
113     case 264: return "GNUNET_MESSAGE_TYPE_MESH_PATH_KEEPALIVE";
114
115       /**
116        * Request the destuction of a path
117        */
118     case 265: return "GNUNET_MESSAGE_TYPE_MESH_PATH_DESTROY";
119
120       /**
121        * Request the destruction of a whole tunnel
122        */
123     case 266: return "GNUNET_MESSAGE_TYPE_MESH_TUNNEL_DESTROY";
124
125       /**
126        * ACK for a data packet.
127        */
128     case 267: return "GNUNET_MESSAGE_TYPE_MESH_ACK";
129
130       /**
131        * POLL for ACK.
132        */
133     case 268: return "GNUNET_MESSAGE_TYPE_MESH_POLL";
134
135       /**
136        * Connect to the mesh service, specifying subscriptions
137        */
138     case 272: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT";
139
140       /**
141        * Ask the mesh service to create a new tunnel
142        */
143     case 273: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_CREATE";
144
145       /**
146        * Ask the mesh service to destroy a tunnel
147        */
148     case 274: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_DESTROY";
149
150       /**
151        * Ask the mesh service to add a peer to an existing tunnel
152        */
153     case 275: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_ADD";
154
155       /**
156        * Ask the mesh service to remove a peer from a tunnel
157        */
158     case 276: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_DEL";
159
160       /**
161        * Ask the mesh service to add a peer offering a service to an existing tunnel
162        */
163     case 277: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_ADD_BY_TYPE";
164
165       /**
166        * Ask the mesh service to add a peer described by a service string
167        */
168     case 278: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_ANNOUNCE_REGEX";
169
170       /**
171        * Ask the mesh service to add a peer described by a service string
172        */
173     case 279: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_ADD_BY_STRING";
174
175       /**
176        * Ask the mesh service to add a peer to the blacklist of an existing tunnel
177        */
178     case 280: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_BLACKLIST";
179
180       /**
181        * Ask the mesh service to remove a peer from the blacklist of a tunnel
182        */
183     case 281: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_UNBLACKLIST";
184
185       /**
186        * Set tunnel speed to slowest peer
187        */
188     case 282: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_MIN";
189
190       /**
191        * Set tunnel speed to fastest peer
192        */
193     case 283: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_MAX";
194
195       /**
196        * Set tunnel buffering on.
197        */
198     case 284: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_BUFFER";
199
200       /**
201        * Set tunnel buffering off.
202        */
203     case 285: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_NOBUFFER";
204
205       /**
206        * Local ACK for data.
207        */
208     case 286: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_ACK";
209
210       /**
211        * Local monitoring of service.
212        */
213     case 287: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_MONITOR";
214
215       /**
216        * Local monitoring of service of a specific tunnel.
217        */
218     case 288: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_MONITOR_TUNNEL";
219
220       /**
221        * 640kb should be enough for everybody
222        */
223     case 299: return "GNUNET_MESSAGE_TYPE_MESH_RESERVE_END";
224     }
225   sprintf(buf, "%u (UNKNOWN TYPE)", m);
226   return buf;
227 }
228 #else
229 const char *
230 GNUNET_MESH_DEBUG_M2S (uint16_t m)
231 {
232   return "";
233 }
234 #endif