fix type error and test cases
[oweals/gnunet.git] / src / set / gnunet-service-set_protocol.h
index f02c6171803b495adcb1c25b15b7f0265350038b..0138b21c777bf6fd019f2c02e39b20e30dc6922b 100644 (file)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     (C) 2013 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2013, 2014 GNUnet e.V.
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
 
      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.
+     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+     Boston, MA 02110-1301, USA.
 */
-
 /**
  * @author Florian Dold
- * @file set/set_protocol.h
+ * @author Christian Grothoff
+ * @file set/gnunet-service-set_protocol.h
  * @brief Peer-to-Peer messages for gnunet set
  */
 #ifndef SET_PROTOCOL_H
@@ -44,11 +44,6 @@ struct OperationRequestMessage
    */
   uint32_t operation GNUNET_PACKED;
 
-  /**
-   * Salt to use for this operation.
-   */
-  uint32_t salt GNUNET_PACKED;
-
   /**
    * For Intersection: my element count
    */
@@ -57,16 +52,22 @@ struct OperationRequestMessage
   /**
    * Application-specific identifier of the request.
    */
-  struct GNUNET_HashCode app_id;
+  struct GNUNET_HashCode app_idX;
 
   /* rest: optional message */
 };
 
 
+/**
+ * Message containing buckets of an invertible bloom filter.
+ *
+ * If an IBF has too many buckets for an IBF message,
+ * it is split into multiple messages.
+ */
 struct IBFMessage
 {
   /**
-   * Type: #GNUNET_MESSAGE_TYPE_SET_P2P_IBF
+   * Type: #GNUNET_MESSAGE_TYPE_SET_UNION_P2P_IBF
    */
   struct GNUNET_MessageHeader header;
 
@@ -79,19 +80,45 @@ struct IBFMessage
   /**
    * Padding, must be 0.
    */
-  uint8_t reserved;
+  uint8_t reserved1;
+
+  /**
+   * Padding, must be 0.
+   */
+  uint16_t reserved2 GNUNET_PACKED;
 
   /**
    * Offset of the strata in the rest of the message
    */
-  uint16_t offset GNUNET_PACKED;
+  uint32_t offset GNUNET_PACKED;
 
   /**
    * Salt used when hashing elements for this IBF.
    */
   uint32_t salt GNUNET_PACKED;
 
-  /* rest: strata */
+  /* rest: buckets */
+};
+
+
+struct InquiryMessage
+{
+  /**
+   * Type: #GNUNET_MESSAGE_TYPE_SET_UNION_P2P_IBF
+   */
+  struct GNUNET_MessageHeader header;
+
+  /**
+   * Salt used when hashing elements for this inquiry.
+   */
+  uint32_t salt GNUNET_PACKED;
+
+  /**
+   * Reserved, set to 0.
+   */
+  uint32_t reserved GNUNET_PACKED;
+
+  /* rest: inquiry IBF keys */
 };
 
 
@@ -126,27 +153,28 @@ struct BFMessage
   struct GNUNET_MessageHeader header;
 
   /**
-   * mutator used with this bloomfilter.
+   * Number of elements the sender still has in the set.
    */
   uint32_t sender_element_count GNUNET_PACKED;
 
   /**
-   * mutator used with this bloomfilter.
+   * XOR of all hashes over all elements remaining in the set.
+   * Used to determine termination.
    */
-  uint32_t sender_mutator GNUNET_PACKED;
+  struct GNUNET_HashCode element_xor_hash;
 
   /**
-   * Length of the bloomfilter data
+   * Mutator used with this bloomfilter.
    */
-  uint32_t bloomfilter_total_length GNUNET_PACKED;
+  uint32_t sender_mutator GNUNET_PACKED;
 
   /**
-   * Length of the appended bloomfilter data block
+   * Total length of the bloomfilter data.
    */
-  uint32_t bloomfilter_length GNUNET_PACKED;
+  uint32_t bloomfilter_total_length GNUNET_PACKED;
 
   /**
-   * Length of the bloomfilter data
+   * Number of bits (k-value) used in encoding the bloomfilter.
    */
   uint32_t bits_per_element GNUNET_PACKED;
 
@@ -156,26 +184,42 @@ struct BFMessage
 };
 
 
-struct BFPart
+/**
+ * Last message, send to confirm the final set.  Contains the element
+ * count as it is possible that the peer determined that we were done
+ * by getting the empty set, which in that case also needs to be
+ * communicated.
+ */
+struct IntersectionDoneMessage
 {
   /**
-   * Type: #GNUNET_MESSAGE_TYPE_SET_INTERSECTION_P2P_BF
+   * Type: #GNUNET_MESSAGE_TYPE_SET_INTERSECTION_P2P_DONE
    */
   struct GNUNET_MessageHeader header;
 
   /**
-   * Length of the appended bloomfilter data block
+   * Final number of elements in intersection.
    */
-  uint32_t chunk_length GNUNET_PACKED;
+  uint32_t final_element_count GNUNET_PACKED;
 
   /**
-   * offset in the bloolfilter data block, if multipart message
+   * XOR of all hashes over all elements remaining in the set.
    */
-  uint32_t chunk_offset GNUNET_PACKED;
+  struct GNUNET_HashCode element_xor_hash;
+};
 
+
+/**
+ * Strata estimator together with the peer's overall set size.
+ */
+struct StrataEstimatorMessage
+{
   /**
-   * rest: the sender's bloomfilter
+   * Type: #GNUNET_MESSAGE_TYPE_SET_UNION_P2P_SE(C)
    */
+  struct GNUNET_MessageHeader header;
+
+  uint64_t set_size;
 };
 
 GNUNET_NETWORK_STRUCT_END