diff options
Diffstat (limited to 'src/mesh/mesh_common.c')
-rw-r--r-- | src/mesh/mesh_common.c | 250 |
1 files changed, 250 insertions, 0 deletions
diff --git a/src/mesh/mesh_common.c b/src/mesh/mesh_common.c new file mode 100644 index 0000000..c9af35c --- /dev/null +++ b/src/mesh/mesh_common.c @@ -0,0 +1,250 @@ +/* + This file is part of GNUnet. + (C) 2012 Christian Grothoff (and other contributing authors) + + GNUnet is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNUnet; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ + +/** + * @file mesh/mesh_common.c + * @brief MESH helper functions + * @author Bartlomiej Polot + */ + +#include "mesh.h" + + +/** + * Check if one pid is bigger than other, accounting for overflow. + * + * @param bigger Argument that should be bigger. + * @param smaller Argument that should be smaller. + * + * @return True if bigger (arg1) has a higher value than smaller (arg 2). + */ +int +GMC_is_pid_bigger (uint32_t bigger, uint32_t smaller) +{ + return (GNUNET_YES == PID_OVERFLOW(smaller, bigger) || + (bigger > smaller && GNUNET_NO == PID_OVERFLOW(bigger, smaller))); +} + +/** + * Get the higher ACK value out of two values, taking in account overflow. + * + * @param a First ACK value. + * @param b Second ACK value. + * + * @return Highest ACK value from the two. + */ +uint32_t +GMC_max_pid (uint32_t a, uint32_t b) +{ + if (GMC_is_pid_bigger(a, b)) + return a; + return b; +} + + +/** + * Get the lower ACK value out of two values, taking in account overflow. + * + * @param a First ACK value. + * @param b Second ACK value. + * + * @return Lowest ACK value from the two. + */ +uint32_t +GMC_min_pid (uint32_t a, uint32_t b) +{ + if (GMC_is_pid_bigger(a, b)) + return b; + return a; +} + + +#if !defined(GNUNET_CULL_LOGGING) +const char * +GNUNET_MESH_DEBUG_M2S (uint16_t m) +{ + static char buf[32]; + switch (m) + { + /** + * Request the creation of a path + */ + case 256: return "GNUNET_MESSAGE_TYPE_MESH_PATH_CREATE"; + + /** + * Request the modification of an existing path + */ + case 257: return "GNUNET_MESSAGE_TYPE_MESH_PATH_CHANGE"; + + /** + * Notify that a connection of a path is no longer valid + */ + case 258: return "GNUNET_MESSAGE_TYPE_MESH_PATH_BROKEN"; + + /** + * At some point, the route will spontaneously change + */ + case 259: return "GNUNET_MESSAGE_TYPE_MESH_PATH_CHANGED"; + + /** + * Transport data in the mesh (origin->end) unicast + */ + case 260: return "GNUNET_MESSAGE_TYPE_MESH_UNICAST"; + + /** + * Transport data to all peers in a tunnel + */ + case 261: return "GNUNET_MESSAGE_TYPE_MESH_MULTICAST"; + + /** + * Transport data back in the mesh (end->origin) + */ + case 262: return "GNUNET_MESSAGE_TYPE_MESH_TO_ORIGIN"; + + /** + * Send origin an ACK that the path is complete + */ + case 263: return "GNUNET_MESSAGE_TYPE_MESH_PATH_ACK"; + + /** + * Avoid path timeouts + */ + case 264: return "GNUNET_MESSAGE_TYPE_MESH_PATH_KEEPALIVE"; + + /** + * Request the destuction of a path + */ + case 265: return "GNUNET_MESSAGE_TYPE_MESH_PATH_DESTROY"; + + /** + * Request the destruction of a whole tunnel + */ + case 266: return "GNUNET_MESSAGE_TYPE_MESH_TUNNEL_DESTROY"; + + /** + * ACK for a data packet. + */ + case 267: return "GNUNET_MESSAGE_TYPE_MESH_ACK"; + + /** + * POLL for ACK. + */ + case 268: return "GNUNET_MESSAGE_TYPE_MESH_POLL"; + + /** + * Connect to the mesh service, specifying subscriptions + */ + case 272: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT"; + + /** + * Ask the mesh service to create a new tunnel + */ + case 273: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_CREATE"; + + /** + * Ask the mesh service to destroy a tunnel + */ + case 274: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_DESTROY"; + + /** + * Ask the mesh service to add a peer to an existing tunnel + */ + case 275: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_ADD"; + + /** + * Ask the mesh service to remove a peer from a tunnel + */ + case 276: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_DEL"; + + /** + * Ask the mesh service to add a peer offering a service to an existing tunnel + */ + case 277: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_ADD_BY_TYPE"; + + /** + * Ask the mesh service to add a peer described by a service string + */ + case 278: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_ANNOUNCE_REGEX"; + + /** + * Ask the mesh service to add a peer described by a service string + */ + case 279: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_ADD_BY_STRING"; + + /** + * Ask the mesh service to add a peer to the blacklist of an existing tunnel + */ + case 280: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_BLACKLIST"; + + /** + * Ask the mesh service to remove a peer from the blacklist of a tunnel + */ + case 281: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_UNBLACKLIST"; + + /** + * Set tunnel speed to slowest peer + */ + case 282: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_MIN"; + + /** + * Set tunnel speed to fastest peer + */ + case 283: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_MAX"; + + /** + * Set tunnel buffering on. + */ + case 284: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_BUFFER"; + + /** + * Set tunnel buffering off. + */ + case 285: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_NOBUFFER"; + + /** + * Local ACK for data. + */ + case 286: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_ACK"; + + /** + * Local monitoring of service. + */ + case 287: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_MONITOR"; + + /** + * Local monitoring of service of a specific tunnel. + */ + case 288: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_MONITOR_TUNNEL"; + + /** + * 640kb should be enough for everybody + */ + case 299: return "GNUNET_MESSAGE_TYPE_MESH_RESERVE_END"; + } + sprintf(buf, "%u (UNKNOWN TYPE)", m); + return buf; +} +#else +const char * +GNUNET_MESH_DEBUG_M2S (uint16_t m) +{ + return ""; +} +#endif |