- use tunnel encryption state to select decryption key
[oweals/gnunet.git] / src / include / gnunet_gns_service.h
index 2357851168a4ced431ed297a2ba6b8145bcc7613..36ca0ab5e81de2e9adaa4ef1736d1fab12da73d5 100644 (file)
@@ -1,6 +1,6 @@
 /*
       This file is part of GNUnet
-      (C) 2004, 2005, 2006, 2008, 2009, 2011 Christian Grothoff (and other contributing authors)
+      (C) 2012-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
  * @brief API to the GNS service
  * @author Martin Schanzenbach
  */
-
 #ifndef GNUNET_GNS_SERVICE_H
 #define GNUNET_GNS_SERVICE_H
 
 #include "gnunet_util_lib.h"
+#include "gnunet_dnsparser_lib.h"
+#include "gnunet_namestore_service.h"
 
 #ifdef __cplusplus
 extern "C"
@@ -39,41 +40,30 @@ extern "C"
 
 
 /**
- * Connection to the GNS service.
+ * String we use to indicate the local master zone or a
+ * root entry in the current zone.
  */
-struct GNUNET_GNS_Handle;
+#define GNUNET_GNS_MASTERZONE_STR "+"
 
 /**
- * Handle to control a get operation.
+ * Connection to the GNS service.
  */
-struct GNUNET_GNS_LookupHandle;
+struct GNUNET_GNS_Handle;
 
 /**
- * A single GNS record.
+ * Handle to control a lookup operation.
  */
-struct GNUNET_GNS_Record;
+struct GNUNET_GNS_LookupRequest;
 
-/**
- * Records types
- */
-enum GNUNET_GNS_RecordType
-{
-  GNUNET_GNS_RECORD_A,
-  GNUNET_GNS_RECORD_AAAA,
-  GNUNET_GNS_RECORD_MX,
-  GNUNET_GNS_RECORD_PKEY
-};
 
 /**
  * Initialize the connection with the GNS service.
  *
  * @param cfg configuration to use
- * @param ht_len size of the internal hash table to use for parallel lookups
- * @return NULL on error
+ * @return handle to the GNS service, or NULL on error
  */
 struct GNUNET_GNS_Handle *
-GNUNET_GNS_connect (const struct GNUNET_CONFIGURATION_Handle *cfg
-                    unsigned int ht_len);
+GNUNET_GNS_connect (const struct GNUNET_CONFIGURATION_Handle *cfg);
 
 
 /**
@@ -85,87 +75,53 @@ void
 GNUNET_GNS_disconnect (struct GNUNET_GNS_Handle *handle);
 
 
-/* *************** Standard API: add and lookup ******************* */
-
 /**
- * Perform an add operation storing records in the GNS.
- *
- * @param handle handle to GNS service
- * @param key the key to store under
- * @param desired_replication_level estimate of how many
- *                nearest peers this request should reach
- * @param options routing options for this message
- * @param type type of the value
- * @param size number of bytes in data; must be less than 64k
- * @param data the data to store
- * @param exp desired expiration time for the value
- * @param timeout how long to wait for transmission of this request
- * @param cont continuation to call when done (transmitting request to service)
- * @param cont_cls closure for cont
- */
-void
-GNUNET_GNS_add_record (struct GNUNET_GNS_Handle *handle,
-                       const char* name,
-                       enum GNUNET_GNS_RecordType type,
-                       size_t size, const char *data,
-                       struct GNUNET_TIME_Absolute exp,
-                       struct GNUNET_TIME_Relative timeout);
-
-
-/**
- * Iterator called on each result obtained for a GNS
- * operation that expects a reply TODO: eh?
+ * Iterator called on obtained result for a GNS lookup.
  *
  * @param cls closure
- * @param exp when will this value expire
- * @param key key of the result
- * @param records the records in reply
- * @param num_records the number of records in reply
- * @param type type of the result
+ * @param rd_count number of records in @a rd
+ * @param rd the records in reply
  */
-typedef void (*GNUNET_GNS_LookupIterator) (void *cls,
-                                        const GNUNET_HashCode * key,
-                                        const struct GNUNET_GNS_Record *record,
-                                        unsigned int num_records);
-
+typedef void (*GNUNET_GNS_LookupResultProcessor) (void *cls,
+                                                 uint32_t rd_count,
+                                                 const struct GNUNET_GNSRECORD_Data *rd);
 
 
 /**
  * Perform an asynchronous lookup operation on the GNS.
  *
  * @param handle handle to the GNS service
- * @param timeout how long to wait for transmission of this request to the service
- * @param type expected type of the response object
- * @param key the key to look up
- * @param desired_replication_level estimate of how many
-                  nearest peers this request should reach
- * @param options routing options for this message
- * @param xquery extended query data (can be NULL, depending on type)
- * @param xquery_size number of bytes in xquery
- * @param iter function to call on each result
- * @param iter_cls closure for iter
- *
- * @return handle to stop the async get
+ * @param name the name to look up
+ * @param zone zone to look in
+ * @param type the GNS record type to look for
+ * @param only_cached #GNUNET_YES to only check locally (not in the DHT)
+ * @param shorten_zone_key the private key of the shorten zone (can be NULL);
+ *                    specify to enable automatic shortening (given a PSEU
+ *                    record, if a given pseudonym is not yet used in the
+ *                    shorten zone, we automatically add the respective zone
+ *                    under that name)
+ * @param proc function to call on result
+ * @param proc_cls closure for processor
+ * @return handle to the queued request
  */
-struct GNUNET_GNS_LookupHandle *
-GNUNET_GNS_lookup_start (struct GNUNET_GNS_Handle *handle,
-                      struct GNUNET_TIME_Relative timeout,
-                      const char * name,
-                      enum GNUNET_GNS_RecordType type,
-                      GNUNET_GNS_LookupIterator iter,
-                      void *iter_cls);
+struct GNUNET_GNS_LookupRequest *
+GNUNET_GNS_lookup (struct GNUNET_GNS_Handle *handle,
+                  const char *name,
+                  const struct GNUNET_CRYPTO_EcdsaPublicKey *zone,
+                  int type,
+                  int only_cached,
+                  const struct GNUNET_CRYPTO_EcdsaPrivateKey *shorten_zone_key,
+                  GNUNET_GNS_LookupResultProcessor proc,
+                  void *proc_cls);
 
 
 /**
- * Stop async GNS lookup.  Frees associated resources.
- *
- * @param lookup_handle lookup operation to stop.
+ * Cancel pending lookup request
  *
- * On return lookup_handle will no longer be valid, caller
- * must not use again!!!
+ * @param lr the lookup request to cancel
  */
 void
-GNUNET_GNS_lookup_stop (struct GNUNET_GNS_LookupHandle *lookup_handle);
+GNUNET_GNS_lookup_cancel (struct GNUNET_GNS_LookupRequest *lr);
 
 
 #if 0                           /* keep Emacsens' auto-indent happy */