GNUnet  0.19.5
gnunet-hello.c File Reference

change HELLO files to never expire More...

#include "platform.h"
#include "gnunet_protocols.h"
#include "gnunet_hello_lib.h"
Include dependency graph for gnunet-hello.c:

Go to the source code of this file.

Data Structures

struct  AddContext
 Closure for add_to_buf(). More...


static int add_to_buf (void *cls, const struct GNUNET_HELLO_Address *address, struct GNUNET_TIME_Absolute expiration)
 Add the given address with infinite expiration to the buffer. More...
static ssize_t add_from_hello (void *cls, size_t max, void *buf)
 Add addresses from the address list to the HELLO. More...
int main (int argc, char *argv[])


static int address_count

Detailed Description

change HELLO files to never expire

Christian Grothoff

Definition in file gnunet-hello.c.

Function Documentation

◆ add_to_buf()

static int add_to_buf ( void *  cls,
const struct GNUNET_HELLO_Address address,
struct GNUNET_TIME_Absolute  expiration 

Add the given address with infinite expiration to the buffer.

addressaddress to add
expirationold expiration
GNUNET_OK keep iterating

Definition at line 62 of file gnunet-hello.c.

65 {
66  struct AddContext *ac = cls;
67  size_t ret;
71  ac->buf,
72  ac->max);
73  ac->buf += ret;
74  ac->max -= ret;
75  ac->ret += ret;
76  address_count++;
77  return GNUNET_OK;
78 }
static int ret
Return value of the commandline.
Definition: gnunet-abd.c:81
static char * address
GNS address for this phone.
static int address_count
Definition: gnunet-hello.c:50
static struct GNUNET_MQ_Envelope * ac
Handle to current GNUNET_PEERINFO_add_peer() 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:109
Constant used to specify "forever".
Closure for add_to_buf().
Definition: gnunet-hello.c:33

References ac, address, address_count, GNUNET_HELLO_add_address(), GNUNET_OK, GNUNET_TIME_UNIT_FOREVER_ABS, and ret.

Referenced by add_from_hello().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ add_from_hello()

static ssize_t add_from_hello ( void *  cls,
size_t  max,
void *  buf 

Add addresses from the address list to the HELLO.

clsthe HELLO with the addresses to add
maxmaximum space available
bufwhere to add the addresses
number of bytes added, 0 to terminate

Definition at line 90 of file gnunet-hello.c.

91 {
92  struct GNUNET_HELLO_Message **orig = cls;
93  struct AddContext ac;
95  if (NULL == *orig)
96  return GNUNET_SYSERR; /* already done */
97  ac.buf = buf;
98  ac.max = max;
99  ac.ret = 0;
100  GNUNET_assert (
101  NULL ==
103  *orig = NULL;
104  return ac.ret;
105 }
static int add_to_buf(void *cls, const struct GNUNET_HELLO_Address *address, struct GNUNET_TIME_Absolute expiration)
Add the given address with infinite expiration to the buffer.
Definition: gnunet-hello.c:62
static char buf[2048]
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:254
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
#define max(x, y)
A HELLO message is used to exchange information about transports with other peers.

References ac, add_to_buf(), buf, GNUNET_assert, GNUNET_HELLO_iterate_addresses(), GNUNET_NO, GNUNET_SYSERR, and max.

Referenced by main().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ main()

int main ( int  argc,
char *  argv[] 

Definition at line 109 of file gnunet-hello.c.

110 {
111  struct GNUNET_DISK_FileHandle *fh;
112  struct GNUNET_HELLO_Message *orig;
114  struct GNUNET_PeerIdentity pid;
115  uint64_t fsize;
117  address_count = 0;
119  GNUNET_log_setup ("gnunet-hello", "INFO", NULL);
120  if (argc != 2)
121  {
122  fprintf (stderr, "%s", _ ("Call with name of HELLO file to modify.\n"));
123  return 1;
124  }
125  if (GNUNET_OK !=
126  GNUNET_DISK_file_size (argv[1], &fsize, GNUNET_YES, GNUNET_YES))
127  {
128  fprintf (stderr,
129  _ ("Error accessing file `%s': %s\n"),
130  argv[1],
131  strerror (errno));
132  return 1;
133  }
134  if (fsize > 65536)
135  {
136  fprintf (stderr, _ ("File `%s' is too big to be a HELLO\n"), argv[1]);
137  return 1;
138  }
139  if (fsize < sizeof(struct GNUNET_MessageHeader))
140  {
141  fprintf (stderr, _ ("File `%s' is too small to be a HELLO\n"), argv[1]);
142  return 1;
143  }
144  fh = GNUNET_DISK_file_open (argv[1],
147  if (NULL == fh)
148  {
149  fprintf (stderr,
150  _ ("Error opening file `%s': %s\n"),
151  argv[1],
152  strerror (errno));
153  return 1;
154  }
155  {
156  char buf[fsize] GNUNET_ALIGN;
158  GNUNET_assert (fsize == GNUNET_DISK_file_read (fh, buf, fsize));
160  orig = (struct GNUNET_HELLO_Message *) buf;
161  if ((fsize < GNUNET_HELLO_size (orig)) ||
162  (GNUNET_OK != GNUNET_HELLO_get_id (orig, &pid)))
163  {
164  fprintf (stderr,
165  _ ("Did not find well-formed HELLO in file `%s'\n"),
166  argv[1]);
167  return 1;
168  }
169  {
170  char *pids;
173  fprintf (stdout, "Processing HELLO for peer `%s'\n", pids);
174  GNUNET_free (pids);
175  }
178  &orig,
180  GNUNET_assert (NULL != result);
181  fh =
182  GNUNET_DISK_file_open (argv[1],
186  if (NULL == fh)
187  {
188  fprintf (stderr,
189  _ ("Error opening file `%s': %s\n"),
190  argv[1],
191  strerror (errno));
193  return 1;
194  }
195  fsize = GNUNET_HELLO_size (result);
196  if (fsize != GNUNET_DISK_file_write (fh, result, fsize))
197  {
198  fprintf (stderr,
199  _ ("Error writing HELLO to file `%s': %s\n"),
200  argv[1],
201  strerror (errno));
202  (void) GNUNET_DISK_file_close (fh);
203  return 1;
204  }
206  }
207  fprintf (stderr,
208  _ ("Modified %u addresses, wrote %u bytes\n"),
210  (unsigned int) fsize);
211  return 0;
212 }
static ssize_t add_from_hello(void *cls, size_t max, void *buf)
Add addresses from the address list to the HELLO.
Definition: gnunet-hello.c:90
static int result
Global testing status.
static struct GNUNET_DISK_FileHandle * fh
File handle to STDIN, for reading restart/quit commands.
static struct GNUNET_PeerIdentity pid
Identity of the peer we transmit to / connect to.
struct GNUNET_DISK_FileHandle * GNUNET_DISK_file_open(const char *fn, enum GNUNET_DISK_OpenFlags flags, enum GNUNET_DISK_AccessPermissions perm)
Open a file.
Definition: disk.c:1237
ssize_t GNUNET_DISK_file_write(const struct GNUNET_DISK_FileHandle *h, const void *buffer, size_t n)
Write a buffer to a file.
Definition: disk.c:686
enum GNUNET_GenericReturnValue GNUNET_DISK_file_size(const char *filename, uint64_t *size, int include_symbolic_links, int single_file_mode)
Get the size of the file (or directory) of the given file (in bytes).
Definition: disk.c:221
enum GNUNET_GenericReturnValue GNUNET_DISK_file_close(struct GNUNET_DISK_FileHandle *h)
Close an open file.
Definition: disk.c:1308
ssize_t GNUNET_DISK_file_read(const struct GNUNET_DISK_FileHandle *h, void *result, size_t len)
Read the contents of a binary file into a buffer.
Definition: disk.c:622
Open the file for reading.
Open the file for writing.
Truncate file if it exists.
Owner can read.
Owner can write.
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:649
uint16_t GNUNET_HELLO_size(const struct GNUNET_HELLO_Message *hello)
Return the size of the given HELLO message.
Definition: hello.c:630
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:204
int GNUNET_HELLO_is_friend_only(const struct GNUNET_HELLO_Message *h)
Return HELLO type.
Definition: hello.c:89
char * GNUNET_CRYPTO_eddsa_public_key_to_string(const struct GNUNET_CRYPTO_EddsaPublicKey *pub)
Convert a public key to a string.
Definition: crypto_ecc.c:251
gcc-ism to force alignment; we use this to align char-arrays that may then be cast to 'struct's.
int GNUNET_log_setup(const char *comp, const char *loglevel, const char *logfile)
Setup logging.
#define GNUNET_free(ptr)
Wrapper around free.
#define _(String)
GNU gettext support macro.
Definition: platform.h:178
Handle used to access files (and pipes).
Header for all communications.
The identity of the host (wraps the signing key of the peer).
struct GNUNET_CRYPTO_EddsaPublicKey public_key

References _, add_from_hello(), address_count, buf, fh, GNUNET_ALIGN, GNUNET_assert, GNUNET_CRYPTO_eddsa_public_key_to_string(), GNUNET_DISK_file_close(), GNUNET_DISK_file_open(), GNUNET_DISK_file_read(), GNUNET_DISK_file_size(), GNUNET_DISK_file_write(), GNUNET_DISK_OPEN_READ, GNUNET_DISK_OPEN_TRUNCATE, GNUNET_DISK_OPEN_WRITE, GNUNET_DISK_PERM_USER_READ, GNUNET_DISK_PERM_USER_WRITE, GNUNET_free, GNUNET_HELLO_create(), GNUNET_HELLO_get_id(), GNUNET_HELLO_is_friend_only(), GNUNET_HELLO_size(), GNUNET_log_setup(), GNUNET_OK, GNUNET_YES, pid, GNUNET_PeerIdentity::public_key, and result.

Here is the call graph for this function:

Variable Documentation

◆ address_count

int address_count

Definition at line 50 of file gnunet-hello.c.

Referenced by add_to_buf(), and main().