X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fhello%2Fhello.c;h=690a0961a34ffaa344277748415c8fe9a2c3db80;hb=f40acfa927bb605c81c99ed250277d51bf951e25;hp=4e43fafb5d2ef3a4235cd1047a0c32a978e59b09;hpb=03b62462b4db11dbbb3e121cb6992c8d0fb9152a;p=oweals%2Fgnunet.git diff --git a/src/hello/hello.c b/src/hello/hello.c index 4e43fafb5..690a0961a 100644 --- a/src/hello/hello.c +++ b/src/hello/hello.c @@ -1,6 +1,6 @@ /* 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 @@ -30,42 +30,6 @@ #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. */ @@ -157,12 +121,12 @@ GNUNET_HELLO_add_address (const struct GNUNET_HELLO_Address *address, 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; } @@ -208,7 +172,7 @@ get_hello_address_size (const char *buf, 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); @@ -242,7 +206,7 @@ GNUNET_HELLO_create (const struct GNUNET_CRYPTO_EddsaPublicKey *public_key, 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; @@ -269,7 +233,7 @@ GNUNET_HELLO_create (const struct GNUNET_CRYPTO_EddsaPublicKey *public_key, 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; @@ -307,12 +271,15 @@ GNUNET_HELLO_iterate_addresses (const struct GNUNET_HELLO_Message *msg, 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); } @@ -321,6 +288,10 @@ GNUNET_HELLO_iterate_addresses (const struct GNUNET_HELLO_Message *msg, 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, @@ -332,8 +303,8 @@ GNUNET_HELLO_iterate_addresses (const struct GNUNET_HELLO_Message *msg, 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]; @@ -349,7 +320,7 @@ GNUNET_HELLO_iterate_addresses (const struct GNUNET_HELLO_Message *msg, (NULL != ret) ) { /* copy address over */ - memcpy (woff, + GNUNET_memcpy (woff, inptr, esize); woff += esize; @@ -1021,7 +992,7 @@ add_address_to_uri (void *cls, addr_dup = GNUNET_strdup (addr); if (NULL != (pos = strstr (addr_dup, "_server"))) - memcpy (pos, + GNUNET_memcpy (pos, client_str, strlen (client_str)); /* Replace all server addresses with client addresses */