add statistic on namestore iteration delay
[oweals/gnunet.git] / src / namestore / namestore.h
index 761360c478c67d7aa654dfc1db5fc9f40936394a..b398af8a915ece6c713c33f3bea3d8d1dbb6d638 100644 (file)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     (C) 2011-2013 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2011-2013 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
@@ -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.
 */
 
 /**
@@ -53,30 +53,12 @@ struct GNUNET_NAMESTORE_Header
 
 
 /**
- * Lookup a block in the namestore
- */
-struct LookupBlockMessage
-{
-  /**
-   * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_BLOCK
-   */
-  struct GNUNET_NAMESTORE_Header gns_header;
-
-  /**
-   * The query.
-   */
-  struct GNUNET_HashCode query GNUNET_PACKED;
-
-};
-
-
-/**
- * Lookup response
+ * Store a record to the namestore (as authority).
  */
-struct LookupBlockResponseMessage
+struct RecordStoreMessage
 {
   /**
-   * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_BLOCK_RESPONSE
+   * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE
    */
   struct GNUNET_NAMESTORE_Header gns_header;
 
@@ -86,157 +68,124 @@ struct LookupBlockResponseMessage
   struct GNUNET_TIME_AbsoluteNBO expire;
 
   /**
-   * Signature.
+   * Name length
    */
-  struct GNUNET_CRYPTO_EcdsaSignature signature;
+  uint16_t name_len GNUNET_PACKED;
 
   /**
-   * Derived public key.
+   * Length of serialized record data
    */
-  struct GNUNET_CRYPTO_EcdsaPublicKey derived_key;
-
-  /* follwed by encrypted block data */
-};
-
+  uint16_t rd_len GNUNET_PACKED;
 
-/**
- * Cache a record in the namestore.
- */
-struct BlockCacheMessage
-{
   /**
-   * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_BLOCK_CACHE
+   * Number of records contained
    */
-  struct GNUNET_NAMESTORE_Header gns_header;
+  uint16_t rd_count GNUNET_PACKED;
 
   /**
-   * Expiration time
+   * always zero (for alignment)
    */
-  struct GNUNET_TIME_AbsoluteNBO expire;
+  uint16_t reserved GNUNET_PACKED;
 
   /**
-   * Signature.
+   * The private key of the authority.
    */
-  struct GNUNET_CRYPTO_EcdsaSignature signature;
+  struct GNUNET_CRYPTO_EcdsaPrivateKey private_key;
 
-  /**
-   * Derived public key.
+  /* followed by:
+   * name with length name_len
+   * serialized record data with rd_count records
    */
-  struct GNUNET_CRYPTO_EcdsaPublicKey derived_key;
-
-  /* follwed by encrypted block data */
 };
 
 
 /**
- * Response to a request to cache a block.
+ * Response to a record storage request.
  */
-struct BlockCacheResponseMessage
+struct RecordStoreResponseMessage
 {
   /**
-   * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_BLOCK_CACHE_RESPONSE
+   * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE_RESPONSE
    */
   struct GNUNET_NAMESTORE_Header gns_header;
 
   /**
-   * #GNUNET_OK on success, #GNUNET_SYSERR error
+   * #GNUNET_SYSERR on failure, #GNUNET_OK on success
    */
   int32_t op_result GNUNET_PACKED;
 };
 
 
 /**
- * Store a record to the namestore (as authority).
+ * Lookup a label
  */
-struct RecordStoreMessage
+struct LabelLookupMessage
 {
   /**
-   * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE
+   * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_LOOKUP
    */
   struct GNUNET_NAMESTORE_Header gns_header;
 
   /**
-   * Expiration time
-   */
-  struct GNUNET_TIME_AbsoluteNBO expire;
-
-  /**
-   * Name length
-   */
-  uint16_t name_len GNUNET_PACKED;
-
-  /**
-   * Length of serialized record data
-   */
-  uint16_t rd_len GNUNET_PACKED;
-
-  /**
-   * Number of records contained
-   */
-  uint16_t rd_count GNUNET_PACKED;
-
-  /**
-   * always zero (for alignment)
+   * Length of the name
    */
-  uint16_t reserved GNUNET_PACKED;
+  uint32_t label_len GNUNET_PACKED;
 
   /**
-   * The private key of the authority.
+   * The private key of the zone to look up in
    */
-  struct GNUNET_CRYPTO_EcdsaPrivateKey private_key;
+  struct GNUNET_CRYPTO_EcdsaPrivateKey zone;
 
   /* followed by:
    * name with length name_len
-   * serialized record data with rd_count records
    */
 };
 
 
 /**
- * Response to a record storage request.
+ * Lookup a label
  */
-struct RecordStoreResponseMessage
+struct LabelLookupResponseMessage
 {
   /**
-   * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE_RESPONSE
+   * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_LOOKUP_RESPONSE
    */
   struct GNUNET_NAMESTORE_Header gns_header;
 
   /**
-   * #GNUNET_SYSERR on failure, #GNUNET_OK on success
+   * Name length
    */
-  int32_t op_result GNUNET_PACKED;
-};
+  uint16_t name_len GNUNET_PACKED;
 
+  /**
+   * Length of serialized record data
+   */
+  uint16_t rd_len GNUNET_PACKED;
 
-/**
- * Lookup a label
- */
-struct LabelLookupMessage
-{
   /**
-   * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_LABEL_LOOKUP
+   * Number of records contained
    */
-  struct GNUNET_NAMESTORE_Header gns_header;
+  uint16_t rd_count GNUNET_PACKED;
 
   /**
-   * The private key of the zone to look up in
+   * Was the label found in the database??
+   * GNUNET_YES or GNUNET_NO
    */
-  struct GNUNET_CRYPTO_EcdsaPrivateKey zone;
+  uint16_t found GNUNET_PACKED;
 
   /**
-   * Length of the name
+   * The private key of the authority.
    */
-  uint16_t label_len GNUNET_PACKED;
+  struct GNUNET_CRYPTO_EcdsaPrivateKey private_key;
 
   /* followed by:
    * name with length name_len
+   * serialized record data with rd_count records
    */
 };
 
 
 
-
 /**
  * Lookup a name for a zone hash
  */
@@ -353,7 +302,13 @@ struct ZoneMonitorStartMessage
   /**
    * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_MONITOR_START
    */
-  struct GNUNET_NAMESTORE_Header gns_header;
+  struct GNUNET_MessageHeader header;
+
+  /**
+   * #GNUNET_YES to first iterate over all records,
+   * #GNUNET_NO to only monitor changes.o
+   */
+  uint32_t iterate_first GNUNET_PACKED;
 
   /**
    * Zone key.
@@ -390,6 +345,14 @@ struct ZoneIterationNextMessage
    * Type will be #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_NEXT
    */
   struct GNUNET_NAMESTORE_Header gns_header;
+
+  /**
+   * Number of records to return to the iterator in one shot
+   * (before #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_NEXT
+   * should be send again). In NBO.
+   */
+  uint64_t limit;
+
 };