- use message ID for end-to-end ACKs
[oweals/gnunet.git] / src / mesh / mesh_protocol.h
index d35d7141eedfec15e1592846d99cc338c37006a1..6067da90895e6dd8413a3feeabe9bfdf621fecf4 100644 (file)
@@ -35,9 +35,6 @@ extern "C"
 #endif
 #endif
 
-#define MESH_TUNNEL_OPT_NOBUFFER        0x2
-
-
 /******************************************************************************/
 /********************      MESH NETWORK MESSAGES     **************************/
 /******************************************************************************/
@@ -64,7 +61,7 @@ struct GNUNET_MESH_CreateTunnel
   uint32_t tid GNUNET_PACKED;
 
     /**
-     * Tunnel options (MESH_TUNNEL_OPT_*).
+     * Tunnel options (GNUNET_MESH_OPTION_*).
      */
   uint32_t opt GNUNET_PACKED;
 
@@ -124,7 +121,7 @@ struct GNUNET_MESH_Data
   uint32_t ttl GNUNET_PACKED;
 
     /**
-     * Unique ID of the packet
+     * ID of the packet
      */
   uint32_t pid GNUNET_PACKED;
 
@@ -133,12 +130,51 @@ struct GNUNET_MESH_Data
      */
   struct GNUNET_PeerIdentity oid;
 
+  /**
+   * Unique ID of the payload message
+   */
+  uint64_t mid GNUNET_PACKED;
+
     /**
      * Payload follows
      */
 };
 
 
+/**
+ * Message to acknowledge end-to-end data.
+ */
+struct GNUNET_MESH_DataACK
+{
+  /**
+   * Type: GNUNET_MESSAGE_TYPE_MESH_DATA_ACK
+   */
+  struct GNUNET_MessageHeader header;
+
+  /**
+   * TID of the tunnel
+   */
+  uint32_t tid GNUNET_PACKED;
+
+  /**
+   * OID of the tunnel
+   */
+  struct GNUNET_PeerIdentity oid;
+
+  /**
+   * Last message ID received.
+   */
+  uint64_t mid GNUNET_PACKED;
+
+  /**
+   * Bitfield of already-received newer messages // TODO implement and use
+   * pid +  1 @ LSB
+   * pid + 32 @ MSB
+   */
+  uint32_t futures GNUNET_PACKED;
+};
+
+
 /**
  * Message to acknowledge mesh data traffic.
  */
@@ -162,10 +198,10 @@ struct GNUNET_MESH_ACK
     /**
      * Maximum packet ID authorized.
      */
-  uint32_t pid;
-
+  uint32_t pid GNUNET_PACKED;
 };
 
+
 /**
  * Message to query a peer about its Flow Control status regarding a tunnel.
  */
@@ -185,6 +221,11 @@ struct GNUNET_MESH_Poll
    * OID of the tunnel
    */
   struct GNUNET_PeerIdentity oid;
+
+  /**
+   * Last packet sent.
+   */
+  uint32_t pid GNUNET_PACKED;
 };
 
 /**