- fix handling of duplicate incoming channel create with respect to queued retransmis...
[oweals/gnunet.git] / src / mesh / mesh_common.c
index 06c9b7b84e9f2c3061b3f5b58af8a83e686ff4cb..c986213f107b3215b5556a975b47657756c7d7f6 100644 (file)
 
 #include "mesh.h"
 
+/**
+ * @brief Translate a fwd variable into a string representation, for logging.
+ *
+ * @param fwd Is FWD? (#GNUNET_YES or #GNUNET_NO)
+ *
+ * @return String representing FWD or BCK.
+ */
+char *
+GM_f2s (int fwd)
+{
+  if (GNUNET_YES == fwd)
+  {
+    return "FWD";
+  }
+  else if (GNUNET_NO == fwd)
+  {
+    return "BCK";
+  }
+  else
+  {
+    GNUNET_break (0);
+    return "";
+  }
+}
 
 int
-GMC_is_pid_bigger (uint32_t bigger, uint32_t smaller)
+GM_is_pid_bigger (uint32_t bigger, uint32_t smaller)
 {
     return (GNUNET_YES == PID_OVERFLOW (smaller, bigger) ||
             (bigger > smaller && GNUNET_NO == PID_OVERFLOW (bigger, smaller)));
@@ -36,171 +60,276 @@ GMC_is_pid_bigger (uint32_t bigger, uint32_t smaller)
 
 
 uint32_t
-GMC_max_pid (uint32_t a, uint32_t b)
+GM_max_pid (uint32_t a, uint32_t b)
 {
-  if (GMC_is_pid_bigger(a, b))
+  if (GM_is_pid_bigger(a, b))
     return a;
   return b;
 }
 
 
 uint32_t
-GMC_min_pid (uint32_t a, uint32_t b)
+GM_min_pid (uint32_t a, uint32_t b)
 {
-  if (GMC_is_pid_bigger(a, b))
+  if (GM_is_pid_bigger(a, b))
     return b;
   return a;
 }
 
 
+const struct GNUNET_HashCode *
+GM_h2hc (const struct GNUNET_MeshHash *id)
+{
+  static struct GNUNET_HashCode hc;
+  memcpy (&hc, id, sizeof (*id));
+
+  return &hc;
+}
+
+
 #if !defined(GNUNET_CULL_LOGGING)
 const char *
-GNUNET_MESH_DEBUG_M2S (uint16_t m)
+GM_m2s (uint16_t m)
 {
   static char buf[32];
+  const char *t;
+
   switch (m)
-    {
+  {
       /**
        * Request the creation of a path
        */
-    case 256: return "GNUNET_MESSAGE_TYPE_MESH_CONNECTION_CREATE";
+    case GNUNET_MESSAGE_TYPE_MESH_CONNECTION_CREATE:
+      t = "CONNECTION_CREATE";
+      break;
 
       /**
        * Request the modification of an existing path
        */
-    case 257: return "GNUNET_MESSAGE_TYPE_MESH_CONNECTION_ACK";
+    case GNUNET_MESSAGE_TYPE_MESH_CONNECTION_ACK:
+      t = "CONNECTION_ACK";
+      break;
 
       /**
        * Notify that a connection of a path is no longer valid
        */
-    case 258: return "GNUNET_MESSAGE_TYPE_MESH_CONNECTION_BROKEN";
+    case GNUNET_MESSAGE_TYPE_MESH_CONNECTION_BROKEN:
+      t = "CONNECTION_BROKEN";
+      break;
 
       /**
        * At some point, the route will spontaneously change
        */
-    case 259: return "GNUNET_MESSAGE_TYPE_MESH_PATH_CHANGED";
+    case GNUNET_MESSAGE_TYPE_MESH_PATH_CHANGED:
+      t = "PATH_CHANGED";
+      break;
 
       /**
        * Transport payload data.
        */
-    case 260: return "GNUNET_MESSAGE_TYPE_MESH_DATA";
+    case GNUNET_MESSAGE_TYPE_MESH_DATA:
+      t = "DATA";
+      break;
 
     /**
      * Confirm receipt of payload data.
      */
-    case 261: return "GNUNET_MESSAGE_TYPE_MESH_DATA_ACK";
+    case GNUNET_MESSAGE_TYPE_MESH_DATA_ACK:
+      t = "DATA_ACK";
+      break;
 
       /**
        * Key exchange encapsulation.
        */
-    case 262: return "GNUNET_MESSAGE_TYPE_MESH_KX";
+    case GNUNET_MESSAGE_TYPE_MESH_KX:
+      t = "KX";
+      break;
 
       /**
        * New ephemeral key.
        */
-    case 263: return "GNUNET_MESSAGE_TYPE_MESH_KX_EPHEMERAL";
+    case GNUNET_MESSAGE_TYPE_MESH_KX_EPHEMERAL:
+      t = "KX_EPHEMERAL";
+      break;
 
       /**
        * Challenge to test peer's session key.
        */
-    case 264: return "GNUNET_MESSAGE_TYPE_MESH_KX_PING";
+    case GNUNET_MESSAGE_TYPE_MESH_KX_PING:
+      t = "KX_PING";
+      break;
 
       /**
        * Answer to session key challenge.
        */
-    case 265: return "GNUNET_MESSAGE_TYPE_MESH_KX_PONG";
+    case GNUNET_MESSAGE_TYPE_MESH_KX_PONG:
+      t = "KX_PONG";
+      break;
 
       /**
        * Request the destuction of a path
        */
-    case 266: return "GNUNET_MESSAGE_TYPE_MESH_CONNECTION_DESTROY";
-
-      /**
-       * Request the destruction of a whole tunnel
-       */
-    case 267: return "GNUNET_MESSAGE_TYPE_MESH_TUNNEL_DESTROY";
+    case GNUNET_MESSAGE_TYPE_MESH_CONNECTION_DESTROY:
+      t = "CONNECTION_DESTROY";
+      break;
 
       /**
        * ACK for a data packet.
        */
-    case 268: return "GNUNET_MESSAGE_TYPE_MESH_ACK";
+    case GNUNET_MESSAGE_TYPE_MESH_ACK:
+      t = "ACK";
+      break;
 
       /**
        * POLL for ACK.
        */
-    case 269: return "GNUNET_MESSAGE_TYPE_MESH_POLL";
+    case GNUNET_MESSAGE_TYPE_MESH_POLL:
+      t = "POLL";
+      break;
 
       /**
        * Announce origin is still alive.
        */
-    case 270: return "GNUNET_MESSAGE_TYPE_MESH_FWD_KEEPALIVE";
-
-      /**
-       * Announce destination is still alive.
-       */
-    case 271: return "GNUNET_MESSAGE_TYPE_MESH_BCK_KEEPALIVE";
+    case GNUNET_MESSAGE_TYPE_MESH_KEEPALIVE:
+      t = "KEEPALIVE";
+      break;
 
     /**
        * Connect to the mesh service, specifying subscriptions
        */
-    case 272: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT";
+    case GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT:
+      t = "LOCAL_CONNECT";
+      break;
 
       /**
        * Ask the mesh service to create a new tunnel
        */
-    case 273: return "GNUNET_MESSAGE_TYPE_MESH_CHANNEL_CREATE";
+    case GNUNET_MESSAGE_TYPE_MESH_CHANNEL_CREATE:
+      t = "CHANNEL_CREATE";
+      break;
 
       /**
        * Ask the mesh service to destroy a tunnel
        */
-    case 274: return "GNUNET_MESSAGE_TYPE_MESH_CHANNEL_DESTROY";
+    case GNUNET_MESSAGE_TYPE_MESH_CHANNEL_DESTROY:
+      t = "CHANNEL_DESTROY";
+      break;
 
       /**
        * Confirm the creation of a channel.
        */
-    case 275: return "GNUNET_MESSAGE_TYPE_MESH_CHANNEL_ACK";
+    case GNUNET_MESSAGE_TYPE_MESH_CHANNEL_ACK:
+      t = "CHANNEL_ACK";
+      break;
 
       /**
        * Confirm the creation of a channel.
        */
-    case 276: return "GNUNET_MESSAGE_TYPE_MESH_CHANNEL_NACK";
+    case GNUNET_MESSAGE_TYPE_MESH_CHANNEL_NACK:
+      t = "CHANNEL_NACK";
+      break;
 
       /**
        * Encrypted payload.
        */
-    case 280: return "GNUNET_MESSAGE_TYPE_MESH_ENCRYPTED";
+    case GNUNET_MESSAGE_TYPE_MESH_ENCRYPTED:
+      t = "ENCRYPTED";
+      break;
 
       /**
        * Local payload traffic
        */
-    case 285: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_DATA";
+    case GNUNET_MESSAGE_TYPE_MESH_LOCAL_DATA:
+      t = "LOCAL_DATA";
+      break;
 
       /**
        * Local ACK for data.
        */
-    case 286: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_ACK";
+    case GNUNET_MESSAGE_TYPE_MESH_LOCAL_ACK:
+      t = "LOCAL_ACK";
+      break;
+
+      /**
+       * Local monitoring of channels.
+       */
+    case GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO_CHANNELS:
+      t = "LOCAL_INFO_CHANNELS";
+      break;
+
+      /**
+       * Local monitoring of a channel.
+       */
+    case GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO_CHANNEL:
+      t = "LOCAL_INFO_CHANNEL";
+      break;
+
+      /**
+       * Local monitoring of service.
+       */
+    case GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO_TUNNELS:
+      t = "LOCAL_INFO_TUNNELS";
+      break;
 
       /**
        * Local monitoring of service.
        */
-    case 287: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO_TUNNELS";
+    case GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO_TUNNEL:
+      t = "LOCAL_INFO_TUNNEL";
+      break;
+
+      /**
+       * Local information about all connections of service.
+       */
+    case GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO_CONNECTIONS:
+      t = "LOCAL_INFO_CONNECTIONS";
+      break;
+
+      /**
+       * Local information of service about a specific connection.
+       */
+    case GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO_CONNECTION:
+      t = "LOCAL_INFO_CONNECTION";
+      break;
+
+      /**
+       * Local information about all peers known to the service.
+       */
+    case GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO_PEERS:
+      t = "LOCAL_INFO_PEERS";
+      break;
+
+      /**
+       * Local information of service about a specific peer.
+       */
+    case GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO_PEER:
+      t = "LOCAL_INFO_PEER";
+      break;
 
       /**
-       * Local monitoring of service of a specific tunnel.
+       * Traffic (net-cat style) used by the Command Line Interface.
        */
-    case 288: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO_TUNNEL";
+    case GNUNET_MESSAGE_TYPE_MESH_CLI:
+      t = "CLI";
+      break;
 
       /**
        * 640kb should be enough for everybody
        */
-    case 299: return "GNUNET_MESSAGE_TYPE_MESH_RESERVE_END";
-    }
-  sprintf(buf, "%u (UNKNOWN TYPE)", m);
+    case 299:
+      t = "RESERVE_END";
+      break;
+
+    default:
+      sprintf(buf, "%u (UNKNOWN TYPE)", m);
+      return buf;
+  }
+  sprintf(buf, "{%22s}", t);
   return buf;
 }
 #else
 const char *
-GNUNET_MESH_DEBUG_M2S (uint16_t m)
+GM_m2s (uint16_t m)
 {
   return "";
 }