2 This file is part of GNUnet.
3 Copyright (C) 2012 GNUnet e.V.
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., 51 Franklin Street, Fifth Floor,
18 Boston, MA 02110-1301, USA.
22 * @file cadet/cadet_common.c
23 * @brief CADET helper functions
24 * @author Bartlomiej Polot
30 * @brief Translate a fwd variable into a string representation, for logging.
32 * @param fwd Is FWD? (#GNUNET_YES or #GNUNET_NO)
34 * @return String representing FWD or BCK.
39 if (GNUNET_YES == fwd)
43 else if (GNUNET_NO == fwd)
49 /* Not an error, can happen with CONNECTION_BROKEN messages. */
55 GC_is_pid_bigger (uint32_t bigger, uint32_t smaller)
57 return (GNUNET_YES == PID_OVERFLOW (smaller, bigger) ||
58 (bigger > smaller && GNUNET_NO == PID_OVERFLOW (bigger, smaller)));
63 GC_max_pid (uint32_t a, uint32_t b)
65 if (GC_is_pid_bigger(a, b))
72 GC_min_pid (uint32_t a, uint32_t b)
74 if (GC_is_pid_bigger(a, b))
80 const struct GNUNET_HashCode *
81 GC_h2hc (const struct GNUNET_CADET_Hash *id)
83 static struct GNUNET_HashCode hc;
84 memcpy (&hc, id, sizeof (*id));
91 GC_h2s (const struct GNUNET_CADET_Hash *id)
95 memcpy (s, GNUNET_h2s_full (GC_h2hc (id)), 52);
103 * Allocate a string with a hexdump of any binary data.
105 * @param bin Arbitrary binary data.
106 * @param len Length of @a bin in bytes.
107 * @param output Where to write the output (if *output be NULL it's allocated).
109 * @return The size of the output.
112 GC_bin2s (void *bin, unsigned int len, char **output)
121 *output = GNUNET_malloc (s_len);
124 for (i = 0; i < len; i++)
126 SPRINTF (&buf[2 * i], "%2X", data[i]);
128 buf[s_len - 1] = '\0';
134 #if !defined(GNUNET_CULL_LOGGING)
138 static char buf[2][16];
146 * Used to mark the "payload" of a non-payload message.
153 * Request the creation of a path
155 case GNUNET_MESSAGE_TYPE_CADET_CONNECTION_CREATE:
160 * Request the modification of an existing path
162 case GNUNET_MESSAGE_TYPE_CADET_CONNECTION_ACK:
167 * Notify that a connection of a path is no longer valid
169 case GNUNET_MESSAGE_TYPE_CADET_CONNECTION_BROKEN:
174 * At some point, the route will spontaneously change
176 case GNUNET_MESSAGE_TYPE_CADET_PATH_CHANGED:
181 * Transport payload data.
183 case GNUNET_MESSAGE_TYPE_CADET_DATA:
188 * Confirm receipt of payload data.
190 case GNUNET_MESSAGE_TYPE_CADET_DATA_ACK:
195 * Key exchange encapsulation.
197 case GNUNET_MESSAGE_TYPE_CADET_KX:
202 * Axolotl key exchange message.
204 case GNUNET_MESSAGE_TYPE_CADET_AX_KX:
211 case GNUNET_MESSAGE_TYPE_CADET_KX_EPHEMERAL:
216 * Answer to session key challenge.
218 case GNUNET_MESSAGE_TYPE_CADET_KX_PONG:
223 * Request the destuction of a path
225 case GNUNET_MESSAGE_TYPE_CADET_CONNECTION_DESTROY:
230 * ACK for a data packet.
232 case GNUNET_MESSAGE_TYPE_CADET_ACK:
239 case GNUNET_MESSAGE_TYPE_CADET_POLL:
244 * Announce origin is still alive.
246 case GNUNET_MESSAGE_TYPE_CADET_KEEPALIVE:
251 * Connect to the cadet service, specifying subscriptions
253 case GNUNET_MESSAGE_TYPE_CADET_LOCAL_CONNECT:
258 * Ask the cadet service to create a new tunnel
260 case GNUNET_MESSAGE_TYPE_CADET_CHANNEL_CREATE:
265 * Ask the cadet service to destroy a tunnel
267 case GNUNET_MESSAGE_TYPE_CADET_CHANNEL_DESTROY:
272 * Confirm the creation of a channel.
274 case GNUNET_MESSAGE_TYPE_CADET_CHANNEL_ACK:
279 * Confirm the creation of a channel.
281 case GNUNET_MESSAGE_TYPE_CADET_CHANNEL_NACK:
286 * OTR encrypted payload.
288 case GNUNET_MESSAGE_TYPE_CADET_ENCRYPTED:
293 * Axolotl encrypted payload.
295 case GNUNET_MESSAGE_TYPE_CADET_AX:
300 * Local payload traffic
302 case GNUNET_MESSAGE_TYPE_CADET_LOCAL_DATA:
307 * Local ACK for data.
309 case GNUNET_MESSAGE_TYPE_CADET_LOCAL_ACK:
314 * Local monitoring of channels.
316 case GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_CHANNELS:
321 * Local monitoring of a channel.
323 case GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_CHANNEL:
328 * Local monitoring of service.
330 case GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_TUNNELS:
335 * Local monitoring of service.
337 case GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_TUNNEL:
342 * Local information about all connections of service.
344 case GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_CONNECTIONS:
349 * Local information of service about a specific connection.
351 case GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_CONNECTION:
356 * Local information about all peers known to the service.
358 case GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEERS:
363 * Local information of service about a specific peer.
365 case GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEER:
370 * Traffic (net-cat style) used by the Command Line Interface.
372 case GNUNET_MESSAGE_TYPE_CADET_CLI:
379 case GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_DUMP:
384 * Used to mark the "payload" of a non-payload message.
392 SPRINTF (buf[idx], "{UNK: %5u}", m);
395 SPRINTF (buf[idx], "{%10s}", s);