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...
 

Functions

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[])
 

Variables

static int address_count
 

Detailed Description

change HELLO files to never expire

Author
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 
)
static

Add the given address with infinite expiration to the buffer.

Parameters
clsclosure
addressaddress to add
expirationold expiration
Returns
GNUNET_OK keep iterating

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

65 {
66  struct AddContext *ac = cls;
67  size_t ret;
68 
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
@ GNUNET_OK
#define GNUNET_TIME_UNIT_FOREVER_ABS
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 
)
static

Add addresses from the address list to the HELLO.

Parameters
clsthe HELLO with the addresses to add
maxmaximum space available
bufwhere to add the addresses
Returns
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;
94 
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
@ GNUNET_NO
@ GNUNET_SYSERR
#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;
116 
117  address_count = 0;
118 
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;
157 
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;
171 
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
@ GNUNET_DISK_OPEN_READ
Open the file for reading.
@ GNUNET_DISK_OPEN_WRITE
Open the file for writing.
@ GNUNET_DISK_OPEN_TRUNCATE
Truncate file if it exists.
@ GNUNET_DISK_PERM_USER_READ
Owner can read.
@ GNUNET_DISK_PERM_USER_WRITE
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
#define GNUNET_ALIGN
gcc-ism to force alignment; we use this to align char-arrays that may then be cast to 'struct's.
@ GNUNET_YES
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
static

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

Referenced by add_to_buf(), and main().