/*
This file is part of GNUnet.
- Copyright (C) 2009, 2015 Christian Grothoff (and other contributing authors)
+ Copyright (C) 2009, 2015 GNUnet e.V.
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
#include "gnunet_util_lib.h"
#include "gnunet_transport_plugin.h"
-GNUNET_NETWORK_STRUCT_BEGIN
-
-/**
- * A HELLO message is used to exchange information about
- * transports with other peers. This struct is always
- * followed by the actual network addresses which have
- * the format:
- *
- * 1) transport-name (0-terminated)
- * 2) address-length (uint16_t, network byte order; possibly
- * unaligned!)
- * 3) address expiration (`struct GNUNET_TIME_AbsoluteNBO`); possibly
- * unaligned!)
- * 4) address (address-length bytes; possibly unaligned!)
- */
-struct GNUNET_HELLO_Message
-{
- /**
- * Type will be #GNUNET_MESSAGE_TYPE_HELLO.
- */
- struct GNUNET_MessageHeader header;
-
- /**
- * Use in F2F mode: Do not gossip this HELLO message
- */
- uint32_t friend_only GNUNET_PACKED;
-
- /**
- * The public key of the peer.
- */
- struct GNUNET_CRYPTO_EddsaPublicKey publicKey;
-
-};
-GNUNET_NETWORK_STRUCT_END
-
-
/**
* Context used for building our own URI.
*/
return 0;
exp = GNUNET_TIME_absolute_hton (expiration);
alen = htons ((uint16_t) address->address_length);
- memcpy (target, address->transport_name, slen);
- memcpy (&target[slen], &alen, sizeof (uint16_t));
+ GNUNET_memcpy (target, address->transport_name, slen);
+ GNUNET_memcpy (&target[slen], &alen, sizeof (uint16_t));
slen += sizeof (uint16_t);
- memcpy (&target[slen], &exp, sizeof (struct GNUNET_TIME_AbsoluteNBO));
+ GNUNET_memcpy (&target[slen], &exp, sizeof (struct GNUNET_TIME_AbsoluteNBO));
slen += sizeof (struct GNUNET_TIME_AbsoluteNBO);
- memcpy (&target[slen], address->address, address->address_length);
+ GNUNET_memcpy (&target[slen], address->address, address->address_length);
slen += address->address_length;
return slen;
}
GNUNET_break_op (0);
return 0;
}
- memcpy (&alen, pos, sizeof (uint16_t));
+ GNUNET_memcpy (&alen, pos, sizeof (uint16_t));
alen = ntohs (alen);
*ralen = alen;
slen += alen + sizeof (uint16_t) + sizeof (struct GNUNET_TIME_AbsoluteNBO);
void *addrgen_cls,
int friend_only)
{
- char buffer[GNUNET_SERVER_MAX_MESSAGE_SIZE - 1 - 256 -
+ char buffer[GNUNET_MAX_MESSAGE_SIZE - 1 - 256 -
sizeof (struct GNUNET_HELLO_Message)];
size_t max;
size_t used;
hello->header.size = htons (sizeof (struct GNUNET_HELLO_Message) + used);
hello->friend_only = htonl (friend_only);
hello->publicKey = *public_key;
- memcpy (&hello[1],
+ GNUNET_memcpy (&hello[1],
buffer,
used);
return hello;
msize = GNUNET_HELLO_size (msg);
if ((msize < sizeof (struct GNUNET_HELLO_Message)) ||
(ntohs (msg->header.type) != GNUNET_MESSAGE_TYPE_HELLO))
+ {
+ GNUNET_break_op (0);
return NULL;
+ }
ret = NULL;
if (return_modified)
{
ret = GNUNET_malloc (msize);
- memcpy (ret,
+ GNUNET_memcpy (ret,
msg,
msize);
}
wpos = 0;
woff = (NULL != ret) ? (char *) &ret[1] : NULL;
address.peer.public_key = msg->publicKey;
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "HELLO has %u bytes of address data\n",
+ (unsigned int) insize);
+
while (insize > 0)
{
esize = get_hello_address_size (inptr,
GNUNET_free_non_null (ret);
return NULL;
}
- /* need memcpy() due to possibility of misalignment */
- memcpy (&expire,
+ /* need GNUNET_memcpy() due to possibility of misalignment */
+ GNUNET_memcpy (&expire,
&inptr[esize - alen - sizeof (struct GNUNET_TIME_AbsoluteNBO)],
sizeof (struct GNUNET_TIME_AbsoluteNBO));
address.address = &inptr[esize - alen];
(NULL != ret) )
{
/* copy address over */
- memcpy (woff,
+ GNUNET_memcpy (woff,
inptr,
esize);
woff += esize;
time_t seconds;
papi = ctx->plugins_find (address->transport_name);
- if (papi == NULL)
+ if (NULL == papi)
{
/* Not an error - we might just not have the right plugin. */
return GNUNET_OK;
address->transport_name);
return GNUNET_OK;
}
- addr = papi->address_to_string (papi->cls, address->address, address->address_length);
-
- if ( (addr == NULL) || (strlen(addr) == 0) )
+ addr = papi->address_to_string (papi->cls,
+ address->address,
+ address->address_length);
+ if ( (NULL == addr) ||
+ (0 == strlen(addr)) )
return GNUNET_OK;
addr_dup = GNUNET_strdup (addr);
if (NULL != (pos = strstr (addr_dup, "_server")))
- memcpy (pos, client_str, strlen(client_str)); /* Replace all server addresses with client addresses */
+ GNUNET_memcpy (pos,
+ client_str,
+ strlen (client_str)); /* Replace all server addresses with client addresses */
seconds = expiration.abs_value_us / 1000LL / 1000LL;
t = gmtime (&seconds);
GNUNET_HELLO_TransportPluginsFind plugins_find)
{
struct GNUNET_HELLO_ComposeUriContext ctx;
- ctx.plugins_find = plugins_find;
-
- char *pkey = GNUNET_CRYPTO_eddsa_public_key_to_string (&(hello->publicKey));
+ char *pkey;
- GNUNET_asprintf (&(ctx.uri),
+ ctx.plugins_find = plugins_find;
+ pkey = GNUNET_CRYPTO_eddsa_public_key_to_string (&hello->publicKey);
+ GNUNET_asprintf (&ctx.uri,
"%s%s",
- (GNUNET_YES == GNUNET_HELLO_is_friend_only (hello)) ? GNUNET_FRIEND_HELLO_URI_PREFIX : GNUNET_HELLO_URI_PREFIX,
+ (GNUNET_YES == GNUNET_HELLO_is_friend_only (hello))
+ ? GNUNET_FRIEND_HELLO_URI_PREFIX
+ : GNUNET_HELLO_URI_PREFIX,
pkey);
GNUNET_free (pkey);
-
- GNUNET_HELLO_iterate_addresses (hello, GNUNET_NO, &add_address_to_uri, &ctx);
+ GNUNET_HELLO_iterate_addresses (hello,
+ GNUNET_NO,
+ &add_address_to_uri,
+ &ctx);
return ctx.uri;
}
return GNUNET_SYSERR;
}
tname++;
- address = strchr (tname, (int) GNUNET_HELLO_URI_SEP);
+ address = strchr (tname,
+ (int) GNUNET_HELLO_URI_SEP);
if (NULL == address)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
haddr.address_length = addr_len;
haddr.address = addr;
haddr.transport_name = plugin_name;
- ret = GNUNET_HELLO_add_address (&haddr, expire, buffer, max);
+ ret = GNUNET_HELLO_add_address (&haddr,
+ expire,
+ buffer,
+ max);
ctx->counter_added ++;
GNUNET_free (addr);
GNUNET_free (plugin_name);