gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r17499 - gnunet/src/ats


From: gnunet
Subject: [GNUnet-SVN] r17499 - gnunet/src/ats
Date: Fri, 14 Oct 2011 17:33:58 +0200

Author: wachs
Date: 2011-10-14 17:33:58 +0200 (Fri, 14 Oct 2011)
New Revision: 17499

Modified:
   gnunet/src/ats/gnunet-service-ats_addresses.c
   gnunet/src/ats/gnunet-service-ats_scheduling.c
Log:
issue: zero-length plugin and addr
fixing: 
message size parsing
address comparison



Modified: gnunet/src/ats/gnunet-service-ats_addresses.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses.c       2011-10-14 14:15:12 UTC 
(rev 17498)
+++ gnunet/src/ats/gnunet-service-ats_addresses.c       2011-10-14 15:33:58 UTC 
(rev 17499)
@@ -82,16 +82,22 @@
       (aa->session_id != cac->search->session_id))
     return GNUNET_YES;
 
+  if (aa->addr_len != cac->search->addr_len)
+  {
+    return GNUNET_YES;
+  }
+
   if (0 == strcmp(aa->plugin, cac->search->plugin))
   {
-    if (aa->addr_len != cac->search->addr_len)
-      return GNUNET_YES;
-    if (aa->addr_len == 0)
-      return GNUNET_YES;
-    if (0 == memcmp (aa->addr, cac->search->addr, aa->addr_len))
-      cac->result = aa;
+    return GNUNET_YES;
+  }
+
+  if (0 == memcmp (aa->addr, cac->search->addr, aa->addr_len))
+  {
+    cac->result = aa;
     return GNUNET_NO;
   }
+
   return GNUNET_YES;
 }
 
@@ -212,16 +218,17 @@
   aa->session_client = session_client;
   aa->session_id = session_id;
 
-  res = find_address (peer, aa);
-  GNUNET_assert (res != 0);
-
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-    "Deleting address for peer `%s'\n",
-    GNUNET_i2s (peer));
+    "Deleting address for peer `%s': `%s'\n",
+    GNUNET_i2s (peer), plugin_name);
 
-  GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove(addresses, 
&peer->hashPubKey, res));
-  destroy_address (aa);
-  destroy_address (res);
+  res = find_address (peer, aa);
+  if (res != NULL)
+  {
+    GNUNET_assert (GNUNET_YES == 
GNUNET_CONTAINER_multihashmap_remove(addresses, &peer->hashPubKey, res));
+    destroy_address (aa);
+    destroy_address (res);
+  }
 }
 
 
@@ -231,7 +238,15 @@
   struct ATS_Address * aa = NULL;
   aa = GNUNET_CONTAINER_multihashmap_get (addresses, &peer->hashPubKey);
   if (aa != NULL)
+  {
+    aa->bw_in.value__ = htonl (100000);
+    aa->bw_out.value__ = htonl (100000);
     GAS_scheduling_transmit_address_suggestion (peer, aa->plugin, aa->addr, 
aa->addr_len, aa->session_client, aa->session_id, aa->ats, aa->ats_count, 
aa->bw_out, aa->bw_in);
+  }
+  else
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+      "Cannot provide address for peer `%s'\n",
+      GNUNET_i2s (peer));
 }
 
 

Modified: gnunet/src/ats/gnunet-service-ats_scheduling.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_scheduling.c      2011-10-14 14:15:12 UTC 
(rev 17498)
+++ gnunet/src/ats/gnunet-service-ats_scheduling.c      2011-10-14 15:33:58 UTC 
(rev 17499)
@@ -258,7 +258,10 @@
   plugin_name_length = ntohs (m->plugin_name_length);  
   atsi = (const struct GNUNET_TRANSPORT_ATS_Information*) &m[1];
   address = (const char*) &atsi[ats_count];
-  plugin_name = &address[address_length];
+  if (plugin_name_length != 0)
+    plugin_name = &address[address_length];
+  else
+    plugin_name = "";
   if ( (address_length +
        plugin_name_length +
        ats_count * sizeof (struct GNUNET_TRANSPORT_ATS_Information) +
@@ -302,10 +305,10 @@
   uint16_t size;
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Received `%s' message\n", 
-             "ADDRESS_DESTROYED");
+             "Received `%s' message of size %u %u\n",
+             "ADDRESS_DESTROYED", ntohs (message->size), sizeof (struct 
AddressDestroyedMessage));
   size = ntohs (message->size);
-  if (size <= sizeof (struct AddressDestroyedMessage))
+  if (size < sizeof (struct AddressDestroyedMessage))
   {
     GNUNET_break (0);
     GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
@@ -316,16 +319,28 @@
   address_length = ntohs (m->address_length);
   plugin_name_length = ntohs (m->plugin_name_length);  
   address = (const char*) &m[1];
-  plugin_name = &address[address_length];
+  if (plugin_name_length != 0)
+    plugin_name = &address[address_length];
+  else
+    plugin_name = "";
+
   if ( (address_length +
        plugin_name_length +
-       sizeof (struct AddressDestroyedMessage) != ntohs (message->size))  ||
-       (plugin_name[plugin_name_length - 1] != '\0') )
+       sizeof (struct AddressDestroyedMessage) != ntohs (message->size)))
   {
     GNUNET_break (0);
     GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
     return;
   }
+
+  if (plugin_name_length != 0)
+    if (plugin_name[plugin_name_length - 1] != '\0')
+    {
+      GNUNET_break (0);
+      GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
+      return;
+    }
+
   GAS_address_destroyed (&m->peer,
                         plugin_name,
                         address,




reply via email to

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