eliminate KX short cut
[oweals/gnunet.git] / src / hello / hello.c
index 4e43fafb5d2ef3a4235cd1047a0c32a978e59b09..690a0961a34ffaa344277748415c8fe9a2c3db80 100644 (file)
@@ -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
 #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 */