gnunet

Main GNUnet Logic
Log | Files | Refs | Submodules | README | LICENSE

commit 5b96183f228a540ea7b90c43955f019f86da8340
parent b3db33d5679f3d4f05802d360da3d8a2fd7192f1
Author: Christian Grothoff <christian@grothoff.org>
Date:   Wed, 16 Oct 2013 11:46:16 +0000

-specify gnsrecord plugin API

Diffstat:
Msrc/include/Makefile.am | 1+
Asrc/include/gnunet_gnsrecord_plugin.h | 142+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 143 insertions(+), 0 deletions(-)

diff --git a/src/include/Makefile.am b/src/include/Makefile.am @@ -49,6 +49,7 @@ gnunetinclude_HEADERS = \ gnunet_getopt_lib.h \ gnunet_gns_service.h \ gnunet_gnsrecord_lib.h \ + gnunet_gnsrecord_plugin.h \ gnunet_hello_lib.h \ gnunet_helper_lib.h \ gnunet_identity_service.h \ diff --git a/src/include/gnunet_gnsrecord_plugin.h b/src/include/gnunet_gnsrecord_plugin.h @@ -0,0 +1,142 @@ +/* + This file is part of GNUnet + (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 + 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_gnsrecord_plugin.h + * @brief plugin API for GNS record types + * @author Christian Grothoff + * @defgroup gnsrecordplugin API to be implemented by applications defining new GNS record types + * @{ */ +#ifndef GNUNET_GNSRECORD_PLUGIN_H +#define GNUNET_GNSRECORD_PLUGIN_H + +#ifdef __cplusplus +extern "C" +{ +#if 0 /* keep Emacsens' auto-indent happy */ +} +#endif +#endif + + +/** + * Function called to convert the binary value @a data of a record of + * type @a type to a human-readable string. + * + * @param cls closure + * @param type type of the record + * @param data value in binary encoding + * @param data_size number of bytes in @a data + * @return NULL on error, otherwise human-readable representation of the value + */ +typedef char * (*GNUNET_GNSRECORD_ValueToStringFunction) (void *cls, + uint32_t type, + const void *data, + size_t data_size); + + +/** + * Function called to convert human-readable version of the value @a s + * of a record of type @a type to the respective binary + * representation. + * + * @param cls closure + * @param type type of the record + * @param s human-readable string + * @param data set to value in binary encoding (will be allocated) + * @param data_size set to number of bytes in @a data + * @return #GNUNET_OK on success + */ +typedef int (*GNUNET_GNSRECORD_StringToValueFunction) (void *cls, + uint32_t type, + const char *s, + void **data, + size_t *data_size); + + +/** + * Function called to convert a type name (i.e. "AAAA") to the + * corresponding number. + * + * @param cls closure + * @param dns_typename name to convert + * @return corresponding number, UINT32_MAX on error + */ +typedef uint32_t (*GNUNET_GNSRECORD_TypenameToNumberFunction) (void *cls, + const char *dns_typename); + + +/** + * Function called to convert a type number (i.e. 1) to the + * corresponding type string (i.e. "A") + * + * @param cls closure + * @param type number of a type to convert + * @return corresponding typestring, NULL on error + */ +typedef const char * (*GNUNET_GNSRECORD_NumberToTypenameFunction) (void *cls, + uint32_t type); + + +/** + * Each plugin is required to return a pointer to a struct of this + * type as the return value from its entry point. + */ +struct GNUNET_GNSRECORD_PluginFunctions +{ + + /** + * Closure for all of the callbacks. + */ + void *cls; + + /** + * Conversion to string. + */ + GNUNET_GNSRECORD_ValueToStringFunction value_to_string; + + /** + * Conversion to binary. + */ + GNUNET_GNSRECORD_StringToValueFunction string_to_value; + + /** + * Typename to number. + */ + GNUNET_GNSRECORD_TypenameToNumberFunction typename_to_number; + + /** + * Number to typename. + */ + GNUNET_GNSRECORD_NumberToTypenameFunction number_to_typename; + +}; + + +/** @} */ /* end of group gnsrecordplugin */ + +#if 0 /* keep Emacsens' auto-indent happy */ +{ +#endif +#ifdef __cplusplus +} +#endif + +#endif