gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r10858 - gnunet/src/hostlist


From: gnunet
Subject: [GNUnet-SVN] r10858 - gnunet/src/hostlist
Date: Fri, 9 Apr 2010 14:52:54 +0200

Author: wachs
Date: 2010-04-09 14:52:54 +0200 (Fri, 09 Apr 2010)
New Revision: 10858

Modified:
   gnunet/src/hostlist/hostlist-server.c
Log:
added code to build the advertisement message

Modified: gnunet/src/hostlist/hostlist-server.c
===================================================================
--- gnunet/src/hostlist/hostlist-server.c       2010-04-09 12:00:16 UTC (rev 
10857)
+++ gnunet/src/hostlist/hostlist-server.c       2010-04-09 12:52:54 UTC (rev 
10858)
@@ -110,9 +110,10 @@
  * Function that assembles our hostlist adv message.
  */
 static int
-create_hostlist_adv_message (void)
+create_hostlist_adv_message (struct GNUNET_HOSTLIST_ADV_Message *adv_msg)
 {
   int length  = 0;
+  int size    = 0;
   unsigned long long port;
 
   char *uri;
@@ -134,8 +135,8 @@
 
   sprintf(port_s, "%llu", port);
   length = strlen(hostname)+strlen(protocol)+strlen(port_s)+2;
-
-  uri = GNUNET_malloc(length * sizeof(char));
+  size = (length+1) * sizeof (char);
+  uri = GNUNET_malloc(size);
   uri = strcpy(uri, protocol);
   uri = strcat(uri, hostname);
   uri = strcat(uri, ":");
@@ -144,7 +145,30 @@
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Address to obtain hostlist: %s\n", uri);
 
 
+  adv_msg = GNUNET_malloc ( sizeof(struct GNUNET_HOSTLIST_ADV_Message) + size);
+  if ( NULL == adv_msg)
+    {
+    GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR,
+        "Could not allocate memory for the message");
+    return GNUNET_NO;
+    }
+  GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
+      "size ADV_Message: %u\n",sizeof(struct GNUNET_HOSTLIST_ADV_Message));
+  GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
+      "size uri: %u\n", (length + 1) * sizeof (char));
 
+
+  if ( ( size + sizeof( struct GNUNET_HOSTLIST_ADV_Message )) > 
GNUNET_SERVER_MAX_MESSAGE_SIZE)
+    {
+      GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR,
+          "Advertisement message is bigger than GNUNET allows");
+      return GNUNET_NO;
+    }
+
+  adv_msg->header.type = htons (GNUNET_MESSAGE_TYPE_HOSTLIST_ADVERTISEMENT);
+  adv_msg->header.size = htons (sizeof (struct GNUNET_HOSTLIST_ADV_Message) + 
size);
+  memcpy(&adv_msg[1],uri,size);
+
   return GNUNET_OK;
 }
 
@@ -409,8 +433,8 @@
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "A new peer connected to the server, preparing to send hostlist 
advertisement\n");
   /* create a new advertisement message */
-  struct GNUNET_HOSTLIST_ADV_Message *adv_msg =
-  create_hostlist_adv_message();
+  struct GNUNET_HOSTLIST_ADV_Message *adv_msg;
+  create_hostlist_adv_message(adv_msg);
 
 }
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]