- major refactoring, implement bi-directional keepalives, retransmit initial messages...
[oweals/gnunet.git] / src / mesh / mesh_common.c
index cfc2f00cec4b4185cf68ac31097e9bc475f1c9d4..106555ad8fea373217ac4bf63705478f4f23a846 100644 (file)
 */
 
 /**
- * @file mesh/mesh.c
+ * @file mesh/mesh_common.c
  * @brief MESH helper functions
  * @author Bartlomiej Polot
  */
 
 #include "mesh.h"
 
+
+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)));
+}
+
+
+uint32_t
+GMC_max_pid (uint32_t a, uint32_t b)
+{
+  if (GMC_is_pid_bigger(a, b))
+    return a;
+  return b;
+}
+
+
+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)
@@ -36,142 +63,112 @@ GNUNET_MESH_DEBUG_M2S (uint16_t m)
       /**
        * Request the creation of a path
        */
-    case 256: return "GNUNET_MESSAGE_TYPE_MESH_PATH_CREATE"; break;
+    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"; break;
+    case 257: return "GNUNET_MESSAGE_TYPE_MESH_PATH_ACK";
 
       /**
        * Notify that a connection of a path is no longer valid
        */
-    case 258: return "GNUNET_MESSAGE_TYPE_MESH_PATH_BROKEN"; break;
+    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"; break;
+    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"; break;
-
-      /**
-       * Transport data to all peers in a tunnel
-       */
-    case 261: return "GNUNET_MESSAGE_TYPE_MESH_MULTICAST"; break;
+    case 260: return "GNUNET_MESSAGE_TYPE_MESH_UNICAST";
 
       /**
        * Transport data back in the mesh (end->origin)
        */
-    case 262: return "GNUNET_MESSAGE_TYPE_MESH_TO_ORIGIN"; break;
+    case 262: return "GNUNET_MESSAGE_TYPE_MESH_TO_ORIGIN";
 
       /**
-       * Send origin an ACK that the path is complete
+       * Send origin an ACK that UNICAST arrived
        */
-    case 263: return "GNUNET_MESSAGE_TYPE_MESH_PATH_ACK"; break;
+    case 263: return "GNUNET_MESSAGE_TYPE_MESH_UNICAST_ACK";
 
       /**
-       * Avoid path timeouts
+       * Send origin an ACK that TO_ORIGIN arrived
        */
-    case 264: return "GNUNET_MESSAGE_TYPE_MESH_PATH_KEEPALIVE"; break;
+    case 264: return "GNUNET_MESSAGE_TYPE_MESH_TO_ORIG_ACK";
 
       /**
        * Request the destuction of a path
        */
-    case 265: return "GNUNET_MESSAGE_TYPE_MESH_PATH_DESTROY"; break;
+    case 266: return "GNUNET_MESSAGE_TYPE_MESH_PATH_DESTROY";
 
       /**
        * Request the destruction of a whole tunnel
        */
-    case 266: return "GNUNET_MESSAGE_TYPE_MESH_TUNNEL_DESTROY"; break;
+    case 267: return "GNUNET_MESSAGE_TYPE_MESH_TUNNEL_DESTROY";
 
       /**
        * ACK for a data packet.
        */
-    case 267: return "GNUNET_MESSAGE_TYPE_MESH_ACK"; break;
-
-      /**
-       * Connect to the mesh service, specifying subscriptions
-       */
-    case 272: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT"; break;
+    case 268: return "GNUNET_MESSAGE_TYPE_MESH_ACK";
 
       /**
-       * Ask the mesh service to create a new tunnel
-       */
-    case 273: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_CREATE"; break;
-
-      /**
-       * Ask the mesh service to destroy a tunnel
-       */
-    case 274: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_DESTROY"; break;
-
-      /**
-       * Ask the mesh service to add a peer to an existing tunnel
-       */
-    case 275: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_ADD"; break;
-
-      /**
-       * Ask the mesh service to remove a peer from a tunnel
+       * POLL for ACK.
        */
-    case 276: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_DEL"; break;
+    case 269: return "GNUNET_MESSAGE_TYPE_MESH_POLL";
 
       /**
-       * Ask the mesh service to add a peer offering a service to an existing tunnel
+       * Announce origin is still alive.
        */
-    case 277: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_ADD_BY_TYPE"; break;
+    case 270: return "GNUNET_MESSAGE_TYPE_MESH_FWD_KEEPALIVE";
 
       /**
-       * Ask the mesh service to add a peer described by a service string
+       * Announce destination is still alive.
        */
-    case 278: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_ANNOUNCE_REGEX"; break;
+    case 271: return "GNUNET_MESSAGE_TYPE_MESH_BCK_KEEPALIVE";
 
-      /**
-       * 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"; break;
-
-      /**
-       * Ask the mesh service to add a peer to the blacklist of an existing tunnel
+    /**
+       * Connect to the mesh service, specifying subscriptions
        */
-    case 280: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_BLACKLIST"; break;
+    case 272: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT";
 
       /**
-       * Ask the mesh service to remove a peer from the blacklist of a tunnel
+       * Ask the mesh service to create a new tunnel
        */
-    case 281: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_UNBLACKLIST"; break;
+    case 273: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_CREATE";
 
       /**
-       * Set tunnel speed to slowest peer
+       * Ask the mesh service to destroy a tunnel
        */
-    case 282: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_MIN"; break;
+    case 274: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_DESTROY";
 
       /**
-       * Set tunnel speed to fastest peer
+       * Local payload traffic
        */
-    case 283: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_MAX"; break;
+    case 275: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_DATA";
 
       /**
-       * Set tunnel buffering on.
+       * Local ACK for data.
        */
-    case 284: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_BUFFER"; break;
+    case 286: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_ACK";
 
       /**
-       * Set tunnel buffering off.
+       * Local monitoring of service.
        */
-    case 285: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_NOBUFFER"; break;
+    case 287: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO_TUNNELS";
 
       /**
-       * Local ACK for data.
+       * Local monitoring of service of a specific tunnel.
        */
-    case 286: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_ACK"; break;
+    case 288: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_INFO_TUNNEL";
 
       /**
        * 640kb should be enough for everybody
        */
-    case 299: return "GNUNET_MESSAGE_TYPE_MESH_RESERVE_END"; break;
+    case 299: return "GNUNET_MESSAGE_TYPE_MESH_RESERVE_END";
     }
   sprintf(buf, "%u (UNKNOWN TYPE)", m);
   return buf;