diff options
Diffstat (limited to 'src/include/gnunet_gns_service.h')
-rw-r--r-- | src/include/gnunet_gns_service.h | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/src/include/gnunet_gns_service.h b/src/include/gnunet_gns_service.h new file mode 100644 index 0000000..2422178 --- /dev/null +++ b/src/include/gnunet_gns_service.h @@ -0,0 +1,163 @@ +/* + This file is part of GNUnet + (C) 2012 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 + by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + 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. + */ + +/** + * @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? + */ + + +#ifndef GNUNET_GNS_SERVICE_H +#define GNUNET_GNS_SERVICE_H + +#include "gnunet_util_lib.h" +#include "gnunet_namestore_service.h" + +#ifdef __cplusplus +extern "C" +{ +#if 0 /* keep Emacsens' auto-indent happy */ +} +#endif +#endif + + +/** + * Connection to the GNS service. + */ +struct GNUNET_GNS_Handle; + +/** + * Handle to control a get operation. + */ +struct GNUNET_GNS_LookupHandle; + +/** + * Record types + * Based on GNUNET_DNSPARSER_TYPEs (standard DNS) + */ +enum GNUNET_GNS_RecordType +{ + /* Standard DNS */ + GNUNET_GNS_RECORD_TYPE_A = 1, + GNUNET_GNS_RECORD_TYPE_NS = 2, + GNUNET_GNS_RECORD_TYPE_CNAME = 5, + GNUNET_GNS_RECORD_TYPE_SOA = 6, + GNUNET_GNS_RECORD_TYPE_PTR = 12, + GNUNET_GNS_RECORD_MX = 15, + GNUNET_GNS_RECORD_TXT = 16, + GNUNET_GNS_RECORD_AAAA = 28, + + /* GNS specific */ + GNUNET_GNS_RECORD_PKEY = 256 +}; + +/** + * Initialize the connection with the GNS service. + * FIXME: Do we need the ht_len? + * + * @param cfg configuration to use + * @param ht_len size of the internal hash table to use for parallel lookups + * @return NULL on error + */ +struct GNUNET_GNS_Handle * +GNUNET_GNS_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, + unsigned int ht_len); + + +/** + * Shutdown connection with the GNS service. + * + * @param handle connection to shut down + */ +void +GNUNET_GNS_disconnect (struct GNUNET_GNS_Handle *handle); + + +/* *************** Standard API: lookup ******************* */ + +/** + * Iterator called on each result obtained for a GNS + * lookup + * + * @param cls closure + * @param name "name" of the original lookup + * @param record the records in reply + * @param num_records the number of records in reply + */ +typedef void (*GNUNET_GNS_LookupIterator) (void *cls, + const char * name, + const struct GNUNET_NAMESTORE_RecordData *record, + unsigned int num_records); + + + +/** + * 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 + * // FIXME: what happens afterwards? + * @param handle handle to the GNS service + * @param timeout timeout of request + * @param name the name to look up + * @param type the GNUNET_GNS_RecordType to look for + * @param iter function to call on each result + * @param iter_cls closure for iter + * + * @return handle to stop the async lookup + */ +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); + + +/** + * Stop async GNS lookup. Frees associated resources. + * + * @param lookup_handle lookup operation to stop. + * + * On return lookup_handle will no longer be valid, caller + * must not use again!!! + */ +void +GNUNET_GNS_lookup_stop (struct GNUNET_GNS_LookupHandle *lookup_handle); + + +#if 0 /* keep Emacsens' auto-indent happy */ +{ +#endif +#ifdef __cplusplus +} +#endif + + +#endif +/* gnunet_gns_service.h */ |