X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Finclude%2Fgnunet_gns_service.h;h=1eb67ed50ff9b0a1abeaa4267bbce6685f2dbd38;hb=0f4032609d5372978e0c038ee05f51ce9c131876;hp=90280a7b1a76216fb7a45944033dbb5c67816bfe;hpb=d0818f55815212dde381bd1a65a67f4d7d6124ff;p=oweals%2Fgnunet.git diff --git a/src/include/gnunet_gns_service.h b/src/include/gnunet_gns_service.h index 90280a7b1..1eb67ed50 100644 --- a/src/include/gnunet_gns_service.h +++ b/src/include/gnunet_gns_service.h @@ -1,6 +1,6 @@ /* This file is part of GNUnet - (C) 2012 Christian Grothoff (and other contributing authors) + Copyright (C) 2012-2014, 2017 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,22 +14,23 @@ 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. */ /** - * @file include/gnunet_gns_service.h - * @brief API to the GNS service * @author Martin Schanzenbach * - * TODO: - * - decide what goes into storage API and what into GNS-service API - * - decide where to pass/expose/check keys / signatures - * - are GNS private keys per peer or per user? + * @file + * API to the GNS service + * + * @defgroup gns GNS service + * GNU Name System + * + * @see [Documentation](https://gnunet.org/gns-implementation) + * + * @{ */ - - #ifndef GNUNET_GNS_SERVICE_H #define GNUNET_GNS_SERVICE_H @@ -47,45 +48,35 @@ extern "C" /** - * Connection to the GNS service. + * String we use to indicate the local master zone or a + * root entry in the current zone. + * + * FIXME: probably should be changed to "@" and renamed + * (this name is confusing!) */ -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; /** - * Handle to control a shorten operation + * Handle to control a lookup operation. */ +struct GNUNET_GNS_LookupRequest; /** - * Record types - * Based on GNUNET_DNSPARSER_TYPEs (standard DNS) + * Handle to control a lookup operation where the + * TLD is resolved to a zone as part of the lookup operation. */ -enum GNUNET_GNS_RecordType -{ - /* Standard DNS */ - GNUNET_GNS_RECORD_TYPE_A = GNUNET_DNSPARSER_TYPE_A, - GNUNET_GNS_RECORD_TYPE_NS = GNUNET_DNSPARSER_TYPE_NS, - GNUNET_GNS_RECORD_TYPE_CNAME = GNUNET_DNSPARSER_TYPE_CNAME, - GNUNET_GNS_RECORD_TYPE_SOA = GNUNET_DNSPARSER_TYPE_SOA, - GNUNET_GNS_RECORD_TYPE_PTR = GNUNET_DNSPARSER_TYPE_PTR, - GNUNET_GNS_RECORD_MX = GNUNET_DNSPARSER_TYPE_MX, - GNUNET_GNS_RECORD_TXT = GNUNET_DNSPARSER_TYPE_TXT, - GNUNET_GNS_RECORD_AAAA = GNUNET_DNSPARSER_TYPE_AAAA, - - /* GNS specific */ - GNUNET_GNS_RECORD_PKEY = GNUNET_NAMESTORE_TYPE_PKEY, - GNUNET_GNS_RECORD_PSEU = GNUNET_NAMESTORE_TYPE_PSEU -}; +struct GNUNET_GNS_LookupWithTldRequest; + /** * Initialize the connection with the GNS service. * * @param cfg configuration to use - * * @return handle to the GNS service, or NULL on error */ struct GNUNET_GNS_Handle * @@ -101,21 +92,41 @@ void GNUNET_GNS_disconnect (struct GNUNET_GNS_Handle *handle); -/* *************** Standard API: lookup ******************* */ - /** - * Iterator called on obtained result for a GNS - * lookup + * Iterator called on obtained result for a GNS lookup. * * @param cls closure - * @param name "name" of the original lookup - * @param rd_count number of records + * @param rd_count number of records in @a rd * @param rd the records in reply */ -typedef void (*GNUNET_GNS_LookupResultProcessor) (void *cls, - uint32_t rd_count, - const struct GNUNET_NAMESTORE_RecordData *rd); +typedef void +(*GNUNET_GNS_LookupResultProcessor) (void *cls, + uint32_t rd_count, + const struct GNUNET_GNSRECORD_Data *rd); + + +/** + * Options for the GNS lookup. + */ +enum GNUNET_GNS_LocalOptions +{ + /** + * Defaults, look in cache, then in DHT. + */ + GNUNET_GNS_LO_DEFAULT = 0, + + /** + * Never look in the DHT, keep request to local cache. + */ + GNUNET_GNS_LO_NO_DHT = 1, + + /** + * For the rightmost label, only look in the cache (it + * is our master zone), for the others, the DHT is OK. + */ + GNUNET_GNS_LO_LOCAL_MASTER = 2 +}; /** @@ -123,78 +134,79 @@ typedef void (*GNUNET_GNS_LookupResultProcessor) (void *cls, * * @param handle handle to the GNS service * @param name the name to look up - * @param type the GNUNET_GNS_RecordType to look for + * @param zone zone to look in + * @param type the GNS record type to look for + * @param options local options for the lookup * @param proc function to call on result - * @param proc_cls closure for processor - * + * @param proc_cls closure for @a proc * @return handle to the queued request */ -struct GNUNET_GNS_QueueEntry * +struct GNUNET_GNS_LookupRequest * GNUNET_GNS_lookup (struct GNUNET_GNS_Handle *handle, - const char * name, - enum GNUNET_GNS_RecordType type, - GNUNET_GNS_LookupResultProcessor proc, - void *proc_cls); - - -/* *************** Standard API: shorten ******************* */ + const char *name, + const struct GNUNET_CRYPTO_EcdsaPublicKey *zone, + uint32_t type, + enum GNUNET_GNS_LocalOptions options, + GNUNET_GNS_LookupResultProcessor proc, + void *proc_cls); /** - * Processor called on for a name shortening result - * called only once + * Cancel pending lookup request * - * @param cls closure - * @param short_name the shortened name or NULL if no result + * @param lr the lookup request to cancel */ -typedef void (*GNUNET_GNS_ShortenResultProcessor) (void *cls, - const char* short_name); +void +GNUNET_GNS_lookup_cancel (struct GNUNET_GNS_LookupRequest *lr); /** - * Perform a name shortening operation on the GNS. + * Iterator called on obtained result for a GNS lookup + * where "not GNS" is a valid answer. * - * @param handle handle to the GNS service - * @param name the name to look up - * @param proc function to call on result - * @param proc_cls closure for processor - * @return handle to the operation + * @param cls closure + * @param gns_tld #GNUNET_YES if a GNS lookup was attempted, + * #GNUNET_NO if the TLD is not configured for GNS + * @param rd_count number of records in @a rd + * @param rd the records in the reply */ -struct GNUNET_GNS_QueueEntry * -GNUNET_GNS_shorten (struct GNUNET_GNS_Handle *handle, - const char * name, - GNUNET_GNS_ShortenResultProcessor proc, - void *proc_cls); - - -/* *************** Standard API: get authority ******************* */ +typedef void +(*GNUNET_GNS_LookupResultProcessor2) (void *cls, + int gns_tld, + uint32_t rd_count, + const struct GNUNET_GNSRECORD_Data *rd); /** - * Processor called on for a name shortening result - * called only once + * Perform an asynchronous lookup operation on the GNS, + * determining the zone using the TLD of the given name + * and the current configuration to resolve TLDs to zones. * - * @param cls closure - * @param auth_name the name of the auhtority or NULL + * @param handle handle to the GNS service + * @param name the name to look up, including TLD + * @param type the record type to look up + * @param options local options for the lookup + * @param proc processor to call on result + * @param proc_cls closure for @a proc + * @return handle to the get request */ -typedef void (*GNUNET_GNS_GetAuthResultProcessor) (void *cls, - const char* short_name); +struct GNUNET_GNS_LookupWithTldRequest* +GNUNET_GNS_lookup_with_tld (struct GNUNET_GNS_Handle *handle, + const char *name, + uint32_t type, + enum GNUNET_GNS_LocalOptions options, + GNUNET_GNS_LookupResultProcessor2 proc, + void *proc_cls); /** - * Perform an authority lookup for a given name. + * Cancel pending lookup request * - * @param handle handle to the GNS service - * @param name the name to look up authority for - * @param proc function to call on result - * @param proc_cls closure for processor - * @return handle to the operation + * @param ltr the lookup request to cancel */ -struct GNUNET_GNS_QueueEntry * -GNUNET_GNS_get_authority (struct GNUNET_GNS_Handle *handle, - const char * name, - GNUNET_GNS_GetAuthResultProcessor proc, - void *proc_cls); +void +GNUNET_GNS_lookup_with_tld_cancel (struct GNUNET_GNS_LookupWithTldRequest *ltr); + #if 0 /* keep Emacsens' auto-indent happy */ { @@ -203,6 +215,6 @@ GNUNET_GNS_get_authority (struct GNUNET_GNS_Handle *handle, } #endif - #endif -/* gnunet_gns_service.h */ + +/** @} */ /* end of group */