- update message_to_string
[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_ACK";
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 back in the mesh (end->origin)
97        */
98     case 262: return "GNUNET_MESSAGE_TYPE_MESH_TO_ORIGIN";
99
100       /**
101        * Send origin an ACK that the path is complete
102        */
103     case 263: return "GNUNET_MESSAGE_TYPE_MESH_DATA_ACK";
104
105       /**
106        * Avoid path timeouts
107        */
108     case 264: return "GNUNET_MESSAGE_TYPE_MESH_PATH_KEEPALIVE";
109
110       /**
111        * Request the destuction of a path
112        */
113     case 265: return "GNUNET_MESSAGE_TYPE_MESH_PATH_DESTROY";
114
115       /**
116        * Request the destruction of a whole tunnel
117        */
118     case 266: return "GNUNET_MESSAGE_TYPE_MESH_TUNNEL_DESTROY";
119
120       /**
121        * ACK for a data packet.
122        */
123     case 267: return "GNUNET_MESSAGE_TYPE_MESH_ACK";
124
125       /**
126        * POLL for ACK.
127        */
128     case 268: return "GNUNET_MESSAGE_TYPE_MESH_POLL";
129
130       /**
131        * Connect to the mesh service, specifying subscriptions
132        */
133     case 272: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT";
134
135       /**
136        * Ask the mesh service to create a new tunnel
137        */
138     case 273: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_CREATE";
139
140       /**
141        * Ask the mesh service to destroy a tunnel
142        */
143     case 274: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_DESTROY";
144
145       /**
146        * Local ACK for data.
147        */
148     case 286: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_ACK";
149
150       /**
151        * Local monitoring of service.
152        */
153     case 287: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO_TUNNELS";
154
155       /**
156        * Local monitoring of service of a specific tunnel.
157        */
158     case 288: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO_TUNNEL";
159
160       /**
161        * 640kb should be enough for everybody
162        */
163     case 299: return "GNUNET_MESSAGE_TYPE_MESH_RESERVE_END";
164     }
165   sprintf(buf, "%u (UNKNOWN TYPE)", m);
166   return buf;
167 }
168 #else
169 const char *
170 GNUNET_MESH_DEBUG_M2S (uint16_t m)
171 {
172   return "";
173 }
174 #endif