-do not run test without sqlite
[oweals/gnunet.git] / src / psycstore / psycstore.h
index f28d1ba786e45661762314fa89a6d60f9e6f9ba6..67104e8ad9bf238a88c07fb6af7eeb0aecc2ad6d 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * This file is part of GNUnet
- * (C) 2013 Christian Grothoff (and other contributing authors)
+ * Copyright (C) 2013 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
@@ -14,8 +14,8 @@
  *
  * 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.
  */
 
 /**
@@ -42,15 +42,17 @@ struct OperationResult
    */
   struct GNUNET_MessageHeader header;
 
+  uint32_t reserved GNUNET_PACKED;
+
   /**
    * Operation ID.
    */
-  uint32_t op_id GNUNET_PACKED;
+  uint64_t op_id GNUNET_PACKED;
 
   /**
    * Status code for the operation.
    */
-  int64_t result_code GNUNET_PACKED;
+  uint64_t result_code GNUNET_PACKED;
 
   /* followed by 0-terminated error message (on error) */
 
@@ -70,14 +72,17 @@ struct CountersResult
   struct GNUNET_MessageHeader header;
 
   /**
-   * Operation ID.
+   * Status code for the operation:
+   * #GNUNET_OK: success, counter values are returned.
+   * #GNUNET_NO: no message has been sent to the channel yet.
+   * #GNUNET_SYSERR: an error occurred.
    */
-  uint32_t op_id GNUNET_PACKED;
+  uint32_t result_code GNUNET_PACKED;
 
   /**
-   * Status code for the operation.
+   * Operation ID.
    */
-  int64_t result_code GNUNET_PACKED;
+  uint64_t op_id GNUNET_PACKED;
 
   uint64_t max_fragment_id GNUNET_PACKED;
 
@@ -99,15 +104,14 @@ struct FragmentResult
    */
   struct GNUNET_MessageHeader header;
 
+  uint32_t psycstore_flags GNUNET_PACKED;
+
   /**
    * Operation ID.
    */
-  uint32_t op_id GNUNET_PACKED;
-
-  uint32_t psycstore_flags GNUNET_PACKED;
-
-  /* followed by GNUNET_MULTICAST_MessageHeader */
+  uint64_t op_id GNUNET_PACKED;
 
+  /* Followed by GNUNET_MULTICAST_MessageHeader */
 };
 
 
@@ -121,14 +125,16 @@ struct StateResult
    */
   struct GNUNET_MessageHeader header;
 
+  uint16_t name_size GNUNET_PACKED;
+
+  uint16_t reserved GNUNET_PACKED;
+
   /**
    * Operation ID.
    */
-  uint32_t op_id GNUNET_PACKED;
-
-  uint16_t name_size  GNUNET_PACKED;
+  uint64_t op_id GNUNET_PACKED;
 
-  /* followed by name and value */
+  /* Followed by name and value */
 };
 
 
@@ -139,13 +145,14 @@ struct OperationRequest
 {
   struct GNUNET_MessageHeader header;
 
+  uint32_t reserved GNUNET_PACKED;
+
   /**
    * Operation ID.
    */
-  uint32_t op_id GNUNET_PACKED;
+  uint64_t op_id GNUNET_PACKED;
 
   struct GNUNET_CRYPTO_EddsaPublicKey channel_key;
-
 };
 
 
@@ -159,10 +166,12 @@ struct MembershipStoreRequest
    */
   struct GNUNET_MessageHeader header;
 
+  uint32_t reserved GNUNET_PACKED;
+
   /**
    * Operation ID.
    */
-  uint32_t op_id GNUNET_PACKED;
+  uint64_t op_id GNUNET_PACKED;
 
   /**
    * Channel's public key.
@@ -172,12 +181,12 @@ struct MembershipStoreRequest
   /**
    * Slave's public key.
    */
-  struct GNUNET_CRYPTO_EddsaPublicKey slave_key;
+  struct GNUNET_CRYPTO_EcdsaPublicKey slave_key;
 
   uint64_t announced_at GNUNET_PACKED;
   uint64_t effective_since GNUNET_PACKED;
   uint64_t group_generation GNUNET_PACKED;
-  int did_join GNUNET_PACKED;
+  uint8_t did_join;
 };
 
 
@@ -191,10 +200,12 @@ struct MembershipTestRequest
    */
   struct GNUNET_MessageHeader header;
 
+  uint32_t reserved GNUNET_PACKED;
+
   /**
    * Operation ID.
    */
-  uint32_t op_id GNUNET_PACKED;
+  uint64_t op_id GNUNET_PACKED;
 
   /**
    * Channel's public key.
@@ -204,7 +215,7 @@ struct MembershipTestRequest
   /**
    * Slave's public key.
    */
-  struct GNUNET_CRYPTO_EddsaPublicKey slave_key;
+  struct GNUNET_CRYPTO_EcdsaPublicKey slave_key;
 
   uint64_t message_id GNUNET_PACKED;
 
@@ -223,16 +234,21 @@ struct FragmentStoreRequest
   struct GNUNET_MessageHeader header;
 
   /**
-   * Operation ID.
+   * enum GNUNET_PSYCSTORE_MessageFlags
    */
-  uint32_t op_id GNUNET_PACKED;
+  uint32_t psycstore_flags GNUNET_PACKED;
 
   /**
    * Channel's public key.
    */
   struct GNUNET_CRYPTO_EddsaPublicKey channel_key;
 
-  uint32_t psycstore_flags GNUNET_PACKED;
+  /**
+   * Operation ID.
+   */
+  uint64_t op_id;
+
+  /* Followed by fragment */
 };
 
 
@@ -246,17 +262,43 @@ struct FragmentGetRequest
    */
   struct GNUNET_MessageHeader header;
 
+  uint32_t reserved GNUNET_PACKED;
+
   /**
    * Operation ID.
    */
-  uint32_t op_id GNUNET_PACKED;
+  uint64_t op_id GNUNET_PACKED;
 
   /**
    * Channel's public key.
    */
   struct GNUNET_CRYPTO_EddsaPublicKey channel_key;
 
-  uint64_t fragment_id GNUNET_PACKED;
+  /**
+   * Slave's public key.
+   */
+  struct GNUNET_CRYPTO_EcdsaPublicKey slave_key;
+
+  /**
+   * First fragment ID to request.
+   */
+  uint64_t first_fragment_id GNUNET_PACKED;
+
+  /**
+   * Last fragment ID to request.
+   */
+  uint64_t last_fragment_id GNUNET_PACKED;
+
+  /**
+   * Maximum number of fragments to retrieve.
+   */
+  uint64_t fragment_limit GNUNET_PACKED;
+
+  /**
+   * Do membership test with @a slave_key before returning fragment?
+   * #GNUNET_YES or #GNUNET_NO
+   */
+  uint8_t do_membership_test;
 };
 
 
@@ -270,17 +312,43 @@ struct MessageGetRequest
    */
   struct GNUNET_MessageHeader header;
 
+  uint32_t reserved GNUNET_PACKED;
+
   /**
    * Operation ID.
    */
-  uint32_t op_id GNUNET_PACKED;
+  uint64_t op_id GNUNET_PACKED;
 
   /**
    * Channel's public key.
    */
   struct GNUNET_CRYPTO_EddsaPublicKey channel_key;
 
-  uint64_t message_id GNUNET_PACKED;
+  /**
+   * Slave's public key.
+   */
+  struct GNUNET_CRYPTO_EcdsaPublicKey slave_key;
+
+  /**
+   * First message ID to request.
+   */
+  uint64_t first_message_id GNUNET_PACKED;
+
+  /**
+   * Last message ID to request.
+   */
+  uint64_t last_message_id GNUNET_PACKED;
+
+  /**
+   * Maximum number of messages to retrieve.
+   */
+  uint64_t message_limit GNUNET_PACKED;
+
+  /**
+   * Do membership test with @a slave_key before returning fragment?
+   * #GNUNET_YES or #GNUNET_NO
+   */
+  uint8_t do_membership_test;
 };
 
 
@@ -294,19 +362,38 @@ struct MessageGetFragmentRequest
    */
   struct GNUNET_MessageHeader header;
 
+  uint32_t reserved GNUNET_PACKED;
+
   /**
    * Operation ID.
    */
-  uint32_t op_id GNUNET_PACKED;
+  uint64_t op_id GNUNET_PACKED;
 
   /**
    * Channel's public key.
    */
   struct GNUNET_CRYPTO_EddsaPublicKey channel_key;
 
+  /**
+   * Slave's public key.
+   */
+  struct GNUNET_CRYPTO_EcdsaPublicKey slave_key;
+
+  /**
+   * Requested message ID.
+   */
   uint64_t message_id GNUNET_PACKED;
 
+  /**
+   * Requested fragment offset.
+   */
   uint64_t fragment_offset GNUNET_PACKED;
+
+  /**
+   * Do membership test with @a slave_key before returning fragment?
+   * #GNUNET_YES or #GNUNET_NO
+   */
+  uint8_t do_membership_test;
 };
 
 
@@ -320,10 +407,12 @@ struct StateHashUpdateRequest
    */
   struct GNUNET_MessageHeader header;
 
+  uint32_t reserved GNUNET_PACKED;
+
   /**
    * Operation ID.
    */
-  uint32_t op_id GNUNET_PACKED;
+  uint64_t op_id GNUNET_PACKED;
 
   /**
    * Channel's public key.
@@ -333,12 +422,14 @@ struct StateHashUpdateRequest
   struct GNUNET_HashCode hash;
 };
 
+
 enum StateOpFlags
 {
   STATE_OP_FIRST = 1 << 0,
   STATE_OP_LAST = 1 << 1
 };
 
+
 /**
  * @see GNUNET_PSYCSTORE_state_modify()
  */
@@ -352,33 +443,22 @@ struct StateModifyRequest
   /**
    * Operation ID.
    */
-  uint32_t op_id GNUNET_PACKED;
+  uint64_t op_id GNUNET_PACKED;
 
   /**
-   * Channel's public key.
+   * ID of the message to apply the state changes in.
    */
-  struct GNUNET_CRYPTO_EddsaPublicKey channel_key;
-
   uint64_t message_id GNUNET_PACKED;
 
-  uint64_t state_delta GNUNET_PACKED;
-
   /**
-   * Size of name, including NUL terminator.
+   * State delta of the message with ID @a message_id.
    */
-  uint16_t name_size GNUNET_PACKED;
-
-  /**
-   * OR'd StateOpFlags
-   */
-  uint8_t flags;
+  uint64_t state_delta GNUNET_PACKED;
 
   /**
-   * enum GNUNET_ENV_Operator
+   * Channel's public key.
    */
-  uint8_t oper;
-
-  /* Followed by NUL-terminated name, then the value. */
+  struct GNUNET_CRYPTO_EddsaPublicKey channel_key;
 };
 
 
@@ -393,26 +473,36 @@ struct StateSyncRequest
   struct GNUNET_MessageHeader header;
 
   /**
-   * Operation ID.
+   * Size of name, including NUL terminator.
    */
-  uint32_t op_id GNUNET_PACKED;
+  uint16_t name_size GNUNET_PACKED;
 
   /**
-   * Channel's public key.
+   * OR'd StateOpFlags
    */
-  struct GNUNET_CRYPTO_EddsaPublicKey channel_key;
+  uint8_t flags;
 
-  uint64_t message_id GNUNET_PACKED;
+  uint8_t reserved;
 
   /**
-   * Size of name, including NUL terminator.
+   * Operation ID.
    */
-  uint16_t name_size GNUNET_PACKED;
+  uint64_t op_id GNUNET_PACKED;
 
   /**
-   * OR'd StateOpFlags
+   * ID of the message that contains the state_hash PSYC header variable.
    */
-  uint8_t flags;
+  uint64_t state_hash_message_id GNUNET_PACKED;
+
+  /**
+   * ID of the last stateful message before @a state_hash_message_id.
+   */
+  uint64_t max_state_message_id GNUNET_PACKED;
+
+  /**
+   * Channel's public key.
+   */
+  struct GNUNET_CRYPTO_EddsaPublicKey channel_key;
 
   /* Followed by NUL-terminated name, then the value. */
 };