GNUnet  0.10.x
gnunet_hello_lib.h
Go to the documentation of this file.
1 /*
2  This file is part of GNUnet.
3  Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2010, 2011 GNUnet e.V.
4 
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.
9 
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.
14 
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/>.
17 
18  SPDX-License-Identifier: AGPL3.0-or-later
19  */
20 
34 #ifndef GNUNET_HELLO_LIB_H
35 #define GNUNET_HELLO_LIB_H
36 
37 #ifdef __cplusplus
38 extern "C" {
39 #if 0 /* keep Emacsens' auto-indent happy */
40 }
41 #endif
42 #endif
43 
44 #include "gnunet_util_lib.h"
45 
49 #define GNUNET_HELLO_URI_PREFIX "gnunet://hello/"
50 
54 #define GNUNET_FRIEND_HELLO_URI_PREFIX "gnunet://friend-hello/"
55 
59 #define GNUNET_HELLO_URI_SEP '+'
60 
61 
73 
79 };
80 
81 
93 
98  const char *transport_name;
99 
103  const void *address;
104 
109 
121 };
122 
123 
134 struct GNUNET_HELLO_Address *
136  const char *transport_name,
137  const void *address,
138  size_t address_length,
140 
141 
148 struct GNUNET_HELLO_Address *
150 
151 
160 int
162  const struct GNUNET_HELLO_Address *a2);
163 
164 
171 size_t
173 
174 
182 int
185 
186 
192 #define GNUNET_HELLO_address_free(addr) GNUNET_free(addr)
193 
194 
196 
214  struct GNUNET_MessageHeader header;
215 
219  uint32_t friend_only GNUNET_PACKED;
220 
225 };
227 
228 
235 int
237 
238 
250 size_t
253  char *target,
254  size_t max);
255 
256 
268 typedef ssize_t (*GNUNET_HELLO_GenerateAddressListCallback) (void *cls,
269  size_t max,
270  void *buf);
271 
272 
287 struct GNUNET_HELLO_Message *
288 GNUNET_HELLO_create(const struct GNUNET_CRYPTO_EddsaPublicKey *public_key,
290  void *addrgen_cls,
291  int friend_only);
292 
293 
300 uint16_t
301 GNUNET_HELLO_size(const struct GNUNET_HELLO_Message *hello);
302 
303 
313 struct GNUNET_HELLO_Message *
315  const struct GNUNET_HELLO_Message *h2);
316 
317 
336  const struct GNUNET_HELLO_Message *h2,
337  struct GNUNET_TIME_Absolute now);
338 
339 
351  void *cls,
352  const struct GNUNET_HELLO_Address *address,
354 
355 
364 
365 
378 struct GNUNET_HELLO_Message *
380  int return_modified,
382  void *it_cls);
383 
384 
398 void
400  const struct GNUNET_HELLO_Message *new_hello,
401  const struct GNUNET_HELLO_Message *old_hello,
402  struct GNUNET_TIME_Absolute expiration_limit,
404  void *it_cls);
405 
406 
414 int
415 GNUNET_HELLO_get_id(const struct GNUNET_HELLO_Message *hello,
416  struct GNUNET_PeerIdentity *peer);
417 
418 
427 struct GNUNET_MessageHeader *
429 
430 
438 typedef struct GNUNET_TRANSPORT_PluginFunctions *(
440 
441 
449 char *
451  GNUNET_HELLO_TransportPluginsFind plugins_find);
452 
453 
463 int
464 GNUNET_HELLO_parse_uri(const char *uri,
466  struct GNUNET_HELLO_Message **hello,
467  GNUNET_HELLO_TransportPluginsFind plugins_find);
468 
469 
470 /* NG API */
471 #include "gnunet_nt_lib.h"
472 
473 
484 void
486  const char *address,
487  enum GNUNET_NetworkType nt,
488  struct GNUNET_TIME_Absolute mono_time,
489  const struct GNUNET_CRYPTO_EddsaPrivateKey *private_key,
490  void **result,
491  size_t *result_size);
492 
493 
504 char *
506  size_t raw_size,
507  const struct GNUNET_PeerIdentity *pid,
508  enum GNUNET_NetworkType *nt,
509  struct GNUNET_TIME_Absolute *mono_time);
510 
511 
519 char *
520 GNUNET_HELLO_address_to_prefix(const char *address);
521 
522 
523 #if 0 /* keep Emacsens' auto-indent happy */
524 {
525 #endif
526 #ifdef __cplusplus
527 }
528 #endif
529 
530 /* ifndef GNUNET_HELLO_LIB_H */
531 #endif
532  /* end of group */
534 
535 /* end of gnunet_hello_lib.h */
size_t address_length
Number of bytes in address.
int GNUNET_HELLO_get_id(const struct GNUNET_HELLO_Message *hello, struct GNUNET_PeerIdentity *peer)
Get the peer identity from a HELLO message.
Definition: hello.c:662
enum GNUNET_HELLO_AddressInfo local_info
Extended information about address.
A HELLO message is used to exchange information about transports with other peers.
struct GNUNET_MessageHeader * msg
Definition: 005.c:2
static struct GNUNET_CRYPTO_EcdsaPublicKey pubkey
Public key of the zone to look in.
static char * expiration
Credential TTL.
struct GNUNET_HELLO_Address * GNUNET_HELLO_address_allocate(const struct GNUNET_PeerIdentity *peer, const char *transport_name, const void *address, size_t address_length, enum GNUNET_HELLO_AddressInfo local_info)
Allocate an address struct.
Definition: address.c:73
const void * address
Binary representation of the address (plugin-specific).
static int raw
raw output
Definition: gnunet-gns.c:55
struct GNUNET_HELLO_Message * GNUNET_HELLO_merge(const struct GNUNET_HELLO_Message *h1, const struct GNUNET_HELLO_Message *h2)
Construct a HELLO message by merging the addresses in two existing HELLOs (which must be for the same...
Definition: hello.c:519
struct GNUNET_HELLO_Message * GNUNET_HELLO_create(const struct GNUNET_CRYPTO_EddsaPublicKey *public_key, GNUNET_HELLO_GenerateAddressListCallback addrgen, void *addrgen_cls, int friend_only)
Construct a HELLO message given the public key, expiration time and an iterator that spews the transp...
Definition: hello.c:202
char * GNUNET_HELLO_compose_uri(const struct GNUNET_HELLO_Message *hello, GNUNET_HELLO_TransportPluginsFind plugins_find)
Compose a hello URI string from a hello message.
Definition: hello.c:1020
Each plugin is required to return a pointer to a struct of this type as the return value from its ent...
struct GNUNET_TIME_Absolute GNUNET_HELLO_equals(const struct GNUNET_HELLO_Message *h1, const struct GNUNET_HELLO_Message *h2, struct GNUNET_TIME_Absolute now)
Test if two HELLO messages contain the same addresses.
Definition: hello.c:824
struct GNUNET_MessageHeader * GNUNET_HELLO_get_header(struct GNUNET_HELLO_Message *hello)
Get the header from a HELLO message, used so other code can correctly send HELLO messages.
Definition: hello.c:684
GNUNET_NetworkType
Types of networks (with separate quotas) we support.
Definition: gnunet_nt_lib.h:35
#define GNUNET_NETWORK_STRUCT_BEGIN
Define as empty, GNUNET_PACKED should suffice, but this won&#39;t work on W32.
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:94
struct GNUNET_TRANSPORT_PluginFunctions *(* GNUNET_HELLO_TransportPluginsFind)(const char *name)
Helper function to load/access transport plugins.
static struct GNUNET_FS_Uri * uri
Value of URI provided on command-line (when not publishing a file but just creating UBlocks to refer ...
int GNUNET_HELLO_address_check_option(const struct GNUNET_HELLO_Address *address, enum GNUNET_HELLO_AddressInfo option)
Check if an address has a local option set.
Definition: address.c:39
int GNUNET_HELLO_address_cmp(const struct GNUNET_HELLO_Address *a1, const struct GNUNET_HELLO_Address *a2)
Compare two addresses.
Definition: address.c:130
struct GNUNET_HELLO_Message * GNUNET_HELLO_iterate_addresses(const struct GNUNET_HELLO_Message *msg, int return_modified, GNUNET_HELLO_AddressIterator it, void *it_cls)
Iterate over all of the addresses in the HELLO.
Definition: hello.c:252
This is an inbound address and cannot be used to initiate an outbound connection to another peer...
int GNUNET_HELLO_parse_uri(const char *uri, struct GNUNET_CRYPTO_EddsaPublicKey *pubkey, struct GNUNET_HELLO_Message **hello, GNUNET_HELLO_TransportPluginsFind plugins_find)
Parse a hello URI string to a hello message.
Definition: hello.c:1205
void GNUNET_HELLO_sign_address(const char *address, enum GNUNET_NetworkType nt, struct GNUNET_TIME_Absolute mono_time, const struct GNUNET_CRYPTO_EddsaPrivateKey *private_key, void **result, size_t *result_size)
Build address record by signing raw information with private key.
Definition: hello-ng.c:65
static char * option
Name of the option.
Definition: gnunet-config.c:38
static char buf[2048]
const char * transport_name
Name of the transport plugin enabling the communication using this address.
static int result
Global testing status.
static struct GNUNET_NAT_AUTO_Test * nt
Handle to a NAT test operation.
size_t GNUNET_HELLO_add_address(const struct GNUNET_HELLO_Address *address, struct GNUNET_TIME_Absolute expiration, char *target, size_t max)
Copy the given address information into the given buffer using the format of HELLOs.
Definition: hello.c:107
char * GNUNET_HELLO_address_to_prefix(const char *address)
Given an address as a string, extract the prefix that identifies the communicator offering transmissi...
Definition: hello-ng.c:190
const char * name
int GNUNET_HELLO_is_friend_only(const struct GNUNET_HELLO_Message *h)
Return HELLO type.
Definition: hello.c:87
struct GNUNET_PeerIdentity peer
For which peer is this an address?
#define GNUNET_NETWORK_STRUCT_END
Define as empty, GNUNET_PACKED should suffice, but this won&#39;t work on W32;.
Private ECC key encoded for transmission.
The identity of the host (wraps the signing key of the peer).
No additional information.
int(* GNUNET_HELLO_AddressIterator)(void *cls, const struct GNUNET_HELLO_Address *address, struct GNUNET_TIME_Absolute expiration)
Iterator callback to go over all addresses.
#define GNUNET_PACKED
gcc-ism to get packed structs.
An address for communicating with a peer.
struct GNUNET_HELLO_Address * GNUNET_HELLO_address_copy(const struct GNUNET_HELLO_Address *address)
Copy an address struct.
Definition: address.c:109
uint16_t GNUNET_HELLO_size(const struct GNUNET_HELLO_Message *hello)
Return the size of the given HELLO message.
Definition: hello.c:643
size_t GNUNET_HELLO_address_get_size(const struct GNUNET_HELLO_Address *address)
Get the size of an address struct.
Definition: address.c:55
Header for all communications.
Time for absolute times used by GNUnet, in microseconds.
uint32_t friend_only
Use in F2F mode: Do not gossip this HELLO message.
static struct GNUNET_PeerIdentity pid
Identity of the peer we transmit to / connect to.
GNUNET_HELLO_AddressInfo
Additional local information about an address.
struct GNUNET_TIME_Absolute GNUNET_HELLO_get_last_expiration(const struct GNUNET_HELLO_Message *msg)
When does the last address in the given HELLO expire?
Definition: hello.c:882
char * GNUNET_HELLO_extract_address(const void *raw, size_t raw_size, const struct GNUNET_PeerIdentity *pid, enum GNUNET_NetworkType *nt, struct GNUNET_TIME_Absolute *mono_time)
Check signature and extract address record.
Definition: hello-ng.c:107
ssize_t(* GNUNET_HELLO_GenerateAddressListCallback)(void *cls, size_t max, void *buf)
Callback function used to fill a buffer of max bytes with a list of addresses in the format used by H...
void GNUNET_HELLO_iterate_new_addresses(const struct GNUNET_HELLO_Message *new_hello, const struct GNUNET_HELLO_Message *old_hello, struct GNUNET_TIME_Absolute expiration_limit, GNUNET_HELLO_AddressIterator it, void *it_cls)
Iterate over addresses in new_hello that are NOT already present in old_hello.
Definition: hello.c:617
Public ECC key (always for curve Ed25519) encoded in a format suitable for network transmission and E...