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.
17 * @author Christian Grothoff
20 * obtain information about our current address
22 * @defgroup transport Transport service
25 * @see [Documentation](https://gnunet.org/transport-service)
29 #ifndef GNUNET_TRANSPORT_HELLO_SERVICE_H
30 #define GNUNET_TRANSPORT_HELLO_SERVICE_H
35 #if 0 /* keep Emacsens' auto-indent happy */
40 #include "gnunet_util_lib.h"
41 #include "gnunet_ats_service.h"
44 * Version number of the transport API.
46 #define GNUNET_TRANSPORT_HELLO_VERSION 0x00000000
50 * Some addresses contain sensitive information or are
51 * not suitable for global distribution. We use address
52 * classes to filter addresses by which domain they make
53 * sense to be used in. These are used in a bitmask.
55 enum GNUNET_TRANSPORT_AddressClass
61 GNUNET_TRANSPORT_AC_NONE = 0,
64 * Addresses that fall into no other category
65 * (i.e. incoming which we cannot use elsewhere).
67 GNUNET_TRANSPORT_AC_OTHER = 1,
70 * Addresses that are global and are insensitive
73 GNUNET_TRANSPORT_AC_GLOBAL = 2,
76 * Addresses that are global and are sensitive
77 * (i.e. IPv6 with our MAC).
79 GNUNET_TRANSPORT_AC_GLOBAL_PRIVATE = 4,
82 * Addresses useful in the local wired network,
83 * i.e. a MAC. Sensitive, but obvious to people nearby.
84 * Useful for broadcasts.
86 GNUNET_TRANSPORT_AC_LAN = 8,
89 * Addresses useful in the local wireless network,
90 * i.e. a MAC. Sensitive, but obvious to people nearby.
91 * Useful for broadcasts.
93 GNUNET_TRANSPORT_AC_WLAN = 16,
96 * Addresses useful in the local bluetooth network. Sensitive, but
97 * obvious to people nearby. Useful for broadcasts.
99 GNUNET_TRANSPORT_AC_BT = 32,
102 * Bitmask for "any" address.
104 GNUNET_TRANSPORT_AC_ANY = 65535
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 */