From aeece360025012e270a30d4cd174a60fca30af38 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Wed, 6 Jul 2016 23:09:59 +0000 Subject: -skeletons for transport-ng --- src/include/gnunet_transport_hello_service.h | 142 +++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 src/include/gnunet_transport_hello_service.h (limited to 'src/include/gnunet_transport_hello_service.h') diff --git a/src/include/gnunet_transport_hello_service.h b/src/include/gnunet_transport_hello_service.h new file mode 100644 index 000000000..8fc558d3f --- /dev/null +++ b/src/include/gnunet_transport_hello_service.h @@ -0,0 +1,142 @@ +/* + This file is part of GNUnet. + Copyright (C) 2009-2016 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 + 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., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +/** + * @author Christian Grothoff + * + * @file + * obtain information about our current address + * + * @defgroup transport Transport service + * address information + * + * @see [Documentation](https://gnunet.org/transport-service) + * + * @{ + */ +#ifndef GNUNET_TRANSPORT_HELLO_SERVICE_H +#define GNUNET_TRANSPORT_HELLO_SERVICE_H + +#ifdef __cplusplus +extern "C" +{ +#if 0 /* keep Emacsens' auto-indent happy */ +} +#endif +#endif + +#include "gnunet_util_lib.h" +#include "gnunet_ats_service.h" + +/** + * Version number of the transport API. + */ +#define GNUNET_TRANSPORT_HELLO_VERSION 0x00000000 + + +/** + * Function called whenever there is an update to the + * HELLO of this peer. + * + * @param cls closure + * @param hello our updated HELLO + */ +typedef void +(*GNUNET_TRANSPORT_HelloUpdateCallback) (void *cls, + const struct GNUNET_MessageHeader *hello); + + +/** + * Handle to cancel a #GNUNET_TRANSPORT_hello_get() operation. + */ +struct GNUNET_TRANSPORT_GetHelloHandle; + + +/** + * Obtain updates on changes to the HELLO message for this peer. The callback + * given in this function is never called synchronously. + * + * @param cfg configuration to use + * @param nt which network type should the addresses from the HELLO belong to? + * @param rec function to call with the HELLO + * @param rec_cls closure for @a rec + * @return handle to cancel the operation + */ +struct GNUNET_TRANSPORT_GetHelloHandle * +GNUNET_TRANSPORT_hello_get (struct GNUNET_CONFIGURATION_Handle *cfg, + enum GNUNET_ATS_Network_Type nt, + GNUNET_TRANSPORT_HelloUpdateCallback rec, + void *rec_cls); + + +/** + * Stop receiving updates about changes to our HELLO message. + * + * @param ghh handle to cancel + */ +void +GNUNET_TRANSPORT_hello_get_cancel (struct GNUNET_TRANSPORT_GetHelloHandle *ghh); + + +/** + * Function with addresses found in a HELLO. + * + * @param cls closure + * @param peer identity of the peer + * @param address the address (UTF-8, 0-terminated) + * @param nt network type of the address + * @param expiration when does this address expire? + */ +typedef void +(*GNUNET_TRANSPORT_AddressCallback) (void *cls, + const struct GNUNET_PeerIdentity *peer, + const char *address, + enum GNUNET_ATS_Network_Type nt, + struct GNUNET_TIME_Absolute expiration); + + +/** + * Parse a HELLO message that we have received into its + * constituent addresses. + * + * @param hello message to parse + * @param cb function to call on each address found + * @param cb_cls closure for @a cb + * @return #GNUNET_OK if hello was well-formed, #GNUNET_SYSERR if not + */ +int +GNUNET_TRANSPORT_hello_parse (const struct GNUNET_MessageHeader *hello, + GNUNET_TRANSPORT_AddressCallback cb, + void *cb_cls); + + +#if 0 /* keep Emacsens' auto-indent happy */ +{ +#endif +#ifdef __cplusplus +} +#endif + +/* ifndef GNUNET_TRANSPORT_HELLO_SERVICE_H */ +#endif + +/** @} */ /* end of group */ + +/* end of gnunet_transport_hello_service.h */ -- cgit v1.2.3