GNUnet  0.10.x
Data Structures | Functions | Variables
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 infinit 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 infinit expiration to the buffer.

Parameters
clsclosure
addressaddress to add
expirationold expiration
Returns
GNUNET_OK keep iterating

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

References ac, address_count, AddContext::buf, GNUNET_HELLO_add_address(), GNUNET_OK, GNUNET_TIME_UNIT_FOREVER_ABS, AddContext::max, and AddContext::ret.

Referenced by add_from_hello().

64 {
65  struct AddContext *ac = cls;
66  size_t ret;
67 
68  ret = GNUNET_HELLO_add_address(address,
70  ac->buf,
71  ac->max);
72  ac->buf += ret;
73  ac->max -= ret;
74  ac->ret += ret;
75  address_count++;
76  return GNUNET_OK;
77 }
char * buf
Where to add.
Definition: gnunet-hello.c:36
size_t max
Maximum number of bytes left.
Definition: gnunet-hello.c:41
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
static int ret
Final status code.
Definition: gnunet-arm.c:89
#define GNUNET_TIME_UNIT_FOREVER_ABS
Constant used to specify "forever".
static int address_count
Definition: gnunet-hello.c:49
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
static struct GNUNET_MQ_Envelope * ac
Handle to current GNUNET_PEERINFO_add_peer() operation.
Closure for add_to_buf().
Definition: gnunet-hello.c:32
size_t ret
Number of bytes added so far.
Definition: gnunet-hello.c:46
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 89 of file gnunet-hello.c.

References add_to_buf(), AddContext::buf, GNUNET_assert, GNUNET_HELLO_iterate_addresses(), GNUNET_NO, GNUNET_SYSERR, AddContext::max, and AddContext::ret.

Referenced by main().

90 {
91  struct GNUNET_HELLO_Message **orig = cls;
92  struct AddContext ac;
93 
94  if (NULL == *orig)
95  return GNUNET_SYSERR; /* already done */
96  ac.buf = buf;
97  ac.max = max;
98  ac.ret = 0;
100  NULL ==
102  *orig = NULL;
103  return ac.ret;
104 }
A HELLO message is used to exchange information about transports with other peers.
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
size_t max
Maximum number of bytes left.
Definition: gnunet-hello.c:41
#define GNUNET_NO
Definition: gnunet_common.h:78
static int add_to_buf(void *cls, const struct GNUNET_HELLO_Address *address, struct GNUNET_TIME_Absolute expiration)
Add the given address with infinit expiration to the buffer.
Definition: gnunet-hello.c:61
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
static char buf[2048]
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
static struct GNUNET_MQ_Envelope * ac
Handle to current GNUNET_PEERINFO_add_peer() operation.
Closure for add_to_buf().
Definition: gnunet-hello.c:32
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 108 of file gnunet-hello.c.

References _, add_from_hello(), address_count, AddContext::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, GNUNET_PeerIdentity::public_key, and result.

109 {
110  struct GNUNET_DISK_FileHandle *fh;
111  struct GNUNET_HELLO_Message *orig;
113  struct GNUNET_PeerIdentity pid;
114  uint64_t fsize;
115 
116  address_count = 0;
117 
118  GNUNET_log_setup("gnunet-hello", "INFO", NULL);
119  if (argc != 2)
120  {
121  fprintf(stderr, "%s", _("Call with name of HELLO file to modify.\n"));
122  return 1;
123  }
124  if (GNUNET_OK !=
125  GNUNET_DISK_file_size(argv[1], &fsize, GNUNET_YES, GNUNET_YES))
126  {
127  fprintf(stderr,
128  _("Error accessing file `%s': %s\n"),
129  argv[1],
130  strerror(errno));
131  return 1;
132  }
133  if (fsize > 65536)
134  {
135  fprintf(stderr, _("File `%s' is too big to be a HELLO\n"), argv[1]);
136  return 1;
137  }
138  if (fsize < sizeof(struct GNUNET_MessageHeader))
139  {
140  fprintf(stderr, _("File `%s' is too small to be a HELLO\n"), argv[1]);
141  return 1;
142  }
143  fh = GNUNET_DISK_file_open(argv[1],
146  if (NULL == fh)
147  {
148  fprintf(stderr,
149  _("Error opening file `%s': %s\n"),
150  argv[1],
151  strerror(errno));
152  return 1;
153  }
154  {
155  char buf[fsize] GNUNET_ALIGN;
156 
157  GNUNET_assert(fsize == GNUNET_DISK_file_read(fh, buf, fsize));
159  orig = (struct GNUNET_HELLO_Message *)buf;
160  if ((fsize < GNUNET_HELLO_size(orig)) ||
161  (GNUNET_OK != GNUNET_HELLO_get_id(orig, &pid)))
162  {
163  fprintf(stderr,
164  _("Did not find well-formed HELLO in file `%s'\n"),
165  argv[1]);
166  return 1;
167  }
168  {
169  char *pids;
170 
172  fprintf(stdout, "Processing HELLO for peer `%s'\n", pids);
173  GNUNET_free(pids);
174  }
177  &orig,
179  GNUNET_assert(NULL != result);
180  fh =
181  GNUNET_DISK_file_open(argv[1],
185  if (NULL == fh)
186  {
187  fprintf(stderr,
188  _("Error opening file `%s': %s\n"),
189  argv[1],
190  strerror(errno));
191  GNUNET_free(result);
192  return 1;
193  }
194  fsize = GNUNET_HELLO_size(result);
195  if (fsize != GNUNET_DISK_file_write(fh, result, fsize))
196  {
197  fprintf(stderr,
198  _("Error writing HELLO to file `%s': %s\n"),
199  argv[1],
200  strerror(errno));
201  (void)GNUNET_DISK_file_close(fh);
202  return 1;
203  }
205  }
206  fprintf(stderr,
207  _("Modified %u addresses, wrote %u bytes\n"),
209  (unsigned int)fsize);
210  return 0;
211 }
Open the file for reading.
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
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:89
A HELLO message is used to exchange information about transports with other peers.
int GNUNET_DISK_file_close(struct GNUNET_DISK_FileHandle *h)
Close an open file.
Definition: disk.c:1339
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
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:729
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
Truncate file if it exists.
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:367
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:817
static char buf[2048]
static int result
Global testing status.
static int fh
Handle to the unique file.
static int address_count
Definition: gnunet-hello.c:49
Open the file for writing.
int GNUNET_HELLO_is_friend_only(const struct GNUNET_HELLO_Message *h)
Return HELLO type.
Definition: hello.c:87
int 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:254
The identity of the host (wraps the signing key of the peer).
#define GNUNET_ALIGN
gcc-ism to force alignment; we use this to align char-arrays that may then be cast to &#39;struct&#39;s...
uint16_t GNUNET_HELLO_size(const struct GNUNET_HELLO_Message *hello)
Return the size of the given HELLO message.
Definition: hello.c:643
Header for all communications.
#define GNUNET_YES
Definition: gnunet_common.h:77
int GNUNET_log_setup(const char *comp, const char *loglevel, const char *logfile)
Setup logging.
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:1262
Handle used to access files (and pipes).
#define GNUNET_free(ptr)
Wrapper around free.
struct GNUNET_CRYPTO_EddsaPublicKey public_key
Here is the call graph for this function:

Variable Documentation

◆ address_count

int address_count
static

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

Referenced by add_to_buf(), main(), and ril_network_is_not_full().