2 This file is part of GNUnet.
3 Copyright (C) 2009-2016 GNUnet e.V.
5 GNUnet is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published
7 by the Free Software Foundation; either version 3, or (at your
8 option) any later version.
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with GNUnet; see the file COPYING. If not, write to the
17 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 Boston, MA 02110-1301, USA.
22 * @author Christian Grothoff
25 * obtain information about our current address
27 * @defgroup transport Transport service
30 * @see [Documentation](https://gnunet.org/transport-service)
34 #ifndef GNUNET_TRANSPORT_HELLO_SERVICE_H
35 #define GNUNET_TRANSPORT_HELLO_SERVICE_H
40 #if 0 /* keep Emacsens' auto-indent happy */
45 #include "gnunet_util_lib.h"
46 #include "gnunet_ats_service.h"
49 * Version number of the transport API.
51 #define GNUNET_TRANSPORT_HELLO_VERSION 0x00000000
55 * Some addresses contain sensitive information or are
56 * not suitable for global distribution. We use address
57 * classes to filter addresses by which domain they make
58 * sense to be used in. These are used in a bitmask.
60 enum GNUNET_TRANSPORT_AddressClass
66 GNUNET_TRANSPORT_AC_NONE = 0,
69 * Addresses that fall into no other category
70 * (i.e. incoming which we cannot use elsewhere).
72 GNUNET_TRANSPORT_AC_OTHER = 1,
75 * Addresses that are global and are insensitive
78 GNUNET_TRANSPORT_AC_GLOBAL = 2,
81 * Addresses that are global and are sensitive
82 * (i.e. IPv6 with our MAC).
84 GNUNET_TRANSPORT_AC_GLOBAL_PRIVATE = 4,
87 * Addresses useful in the local wired network,
88 * i.e. a MAC. Sensitive, but obvious to people nearby.
89 * Useful for broadcasts.
91 GNUNET_TRANSPORT_AC_LAN = 8,
94 * Addresses useful in the local wireless network,
95 * i.e. a MAC. Sensitive, but obvious to people nearby.
96 * Useful for broadcasts.
98 GNUNET_TRANSPORT_AC_WLAN = 16,
101 * Addresses useful in the local bluetooth network. Sensitive, but
102 * obvious to people nearby. Useful for broadcasts.
104 GNUNET_TRANSPORT_AC_BT = 32
110 * Function called whenever there is an update to the
111 * HELLO of this peer.
114 * @param hello our updated HELLO
117 (*GNUNET_TRANSPORT_HelloUpdateCallback) (void *cls,
118 const struct GNUNET_MessageHeader *hello);
122 * Handle to cancel a #GNUNET_TRANSPORT_hello_get() operation.
124 struct GNUNET_TRANSPORT_HelloGetHandle;
128 * Obtain updates on changes to the HELLO message for this peer. The callback
129 * given in this function is never called synchronously.
131 * @param cfg configuration to use
132 * @param ac which network type should the addresses from the HELLO belong to?
133 * @param rec function to call with the HELLO
134 * @param rec_cls closure for @a rec
135 * @return handle to cancel the operation
137 struct GNUNET_TRANSPORT_HelloGetHandle *
138 GNUNET_TRANSPORT_hello_get (const struct GNUNET_CONFIGURATION_Handle *cfg,
139 enum GNUNET_TRANSPORT_AddressClass ac,
140 GNUNET_TRANSPORT_HelloUpdateCallback rec,
145 * Stop receiving updates about changes to our HELLO message.
147 * @param ghh handle to cancel
150 GNUNET_TRANSPORT_hello_get_cancel (struct GNUNET_TRANSPORT_HelloGetHandle *ghh);
154 * Function with addresses found in a HELLO.
157 * @param peer identity of the peer
158 * @param address the address (UTF-8, 0-terminated)
159 * @param nt network type of the address
160 * @param expiration when does this address expire?
163 (*GNUNET_TRANSPORT_AddressCallback) (void *cls,
164 const struct GNUNET_PeerIdentity *peer,
166 enum GNUNET_ATS_Network_Type nt,
167 struct GNUNET_TIME_Absolute expiration);
171 * Parse a HELLO message that we have received into its
172 * constituent addresses.
174 * @param hello message to parse
175 * @param cb function to call on each address found
176 * @param cb_cls closure for @a cb
177 * @return #GNUNET_OK if hello was well-formed, #GNUNET_SYSERR if not
180 GNUNET_TRANSPORT_hello_parse (const struct GNUNET_MessageHeader *hello,
181 GNUNET_TRANSPORT_AddressCallback cb,
185 #if 0 /* keep Emacsens' auto-indent happy */
192 /* ifndef GNUNET_TRANSPORT_HELLO_SERVICE_H */
195 /** @} */ /* end of group */
197 /* end of gnunet_transport_hello_service.h */