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 it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your 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 Affero General Public License for more details.
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
18 SPDX-License-Identifier: AGPL3.0-or-later
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,
107 * Bitmask for "any" address.
109 GNUNET_TRANSPORT_AC_ANY = 65535
115 * Function called whenever there is an update to the
116 * HELLO of this peer.
119 * @param hello our updated HELLO
122 (*GNUNET_TRANSPORT_HelloUpdateCallback) (void *cls,
123 const struct GNUNET_MessageHeader *hello);
127 * Handle to cancel a #GNUNET_TRANSPORT_hello_get() operation.
129 struct GNUNET_TRANSPORT_HelloGetHandle;
133 * Obtain updates on changes to the HELLO message for this peer. The callback
134 * given in this function is never called synchronously.
136 * @param cfg configuration to use
137 * @param ac which network type should the addresses from the HELLO belong to?
138 * @param rec function to call with the HELLO
139 * @param rec_cls closure for @a rec
140 * @return handle to cancel the operation
142 struct GNUNET_TRANSPORT_HelloGetHandle *
143 GNUNET_TRANSPORT_hello_get (const struct GNUNET_CONFIGURATION_Handle *cfg,
144 enum GNUNET_TRANSPORT_AddressClass ac,
145 GNUNET_TRANSPORT_HelloUpdateCallback rec,
150 * Stop receiving updates about changes to our HELLO message.
152 * @param ghh handle to cancel
155 GNUNET_TRANSPORT_hello_get_cancel (struct GNUNET_TRANSPORT_HelloGetHandle *ghh);
159 * Function with addresses found in a HELLO.
162 * @param peer identity of the peer
163 * @param address the address (UTF-8, 0-terminated)
164 * @param nt network type of the address
165 * @param expiration when does this address expire?
168 (*GNUNET_TRANSPORT_AddressCallback) (void *cls,
169 const struct GNUNET_PeerIdentity *peer,
171 enum GNUNET_NetworkType nt,
172 struct GNUNET_TIME_Absolute expiration);
176 * Parse a HELLO message that we have received into its
177 * constituent addresses.
179 * @param hello message to parse
180 * @param cb function to call on each address found
181 * @param cb_cls closure for @a cb
182 * @return #GNUNET_OK if hello was well-formed, #GNUNET_SYSERR if not
185 GNUNET_TRANSPORT_hello_parse (const struct GNUNET_MessageHeader *hello,
186 GNUNET_TRANSPORT_AddressCallback cb,
190 #if 0 /* keep Emacsens' auto-indent happy */
197 /* ifndef GNUNET_TRANSPORT_HELLO_SERVICE_H */
200 /** @} */ /* end of group */
202 /* end of gnunet_transport_hello_service.h */