gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r17465 - gnunet/src/ats
Date: Thu, 13 Oct 2011 22:14:23 +0200

Author: wachs
Date: 2011-10-13 22:14:22 +0200 (Thu, 13 Oct 2011)
New Revision: 17465

Modified:
   gnunet/src/ats/gnunet-service-ats.c
Log:


Modified: gnunet/src/ats/gnunet-service-ats.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats.c 2011-10-13 20:07:05 UTC (rev 17464)
+++ gnunet/src/ats/gnunet-service-ats.c 2011-10-13 20:14:22 UTC (rev 17465)
@@ -70,7 +70,7 @@
 
 static struct GNUNET_CONTAINER_MultiHashMap * addresses;
 
-int address_it (void *cls,
+int free_address_it (void *cls,
                const GNUNET_HashCode * key,
                void *value)
 {
@@ -79,6 +79,28 @@
   return GNUNET_OK;
 }
 
+struct CompareAddressContext
+{
+  struct ATS_Address * search;
+  struct ATS_Address * result;
+};
+
+int compare_address_it (void *cls,
+               const GNUNET_HashCode * key,
+               void *value)
+{
+  struct CompareAddressContext * cac = cls;
+  struct ATS_Address * aa = (struct ATS_Address *) value;
+  if (0 == strcmp(aa->plugin, cac->search->plugin))
+  {
+    if ((aa->addr_len == cac->search->addr_len) &&
+        (0 == memcmp (aa->addr, cac->search->addr, aa->addr_len)))
+      cac->result = aa;
+    return GNUNET_NO;
+  }
+  return GNUNET_YES;
+}
+
 /**
  * Task run during shutdown.
  *
@@ -97,7 +119,7 @@
     GNUNET_free (t);
   }
 
-  GNUNET_CONTAINER_multihashmap_iterate (addresses, address_it, NULL);
+  GNUNET_CONTAINER_multihashmap_iterate (addresses, free_address_it, NULL);
 
   GNUNET_CONTAINER_multihashmap_destroy (addresses);
 }
@@ -156,13 +178,25 @@
   char *pm;
 
   size_t size = ntohs (msg->header.size);
-  if (size <= sizeof (struct AddressUpdateMessage))
-      GNUNET_break (0);
+  if ((size <= sizeof (struct AddressUpdateMessage)) || (size >= 
GNUNET_SERVER_MAX_MESSAGE_SIZE))
+  {
+    GNUNET_break (0);
+    return;
+  }
 
   size_t ats_count = ntohs (msg->ats_count);
   size_t addr_len = ntohs (msg->address_length);
   size_t plugin_len = ntohs (msg->plugin_name_length) + 1 ;
 
+  if (
+       (plugin_len  >= GNUNET_SERVER_MAX_MESSAGE_SIZE) ||
+       (addr_len  >= GNUNET_SERVER_MAX_MESSAGE_SIZE) ||
+       (addr_len >= GNUNET_SERVER_MAX_MESSAGE_SIZE / sizeof (struct 
GNUNET_TRANSPORT_ATS_Information)) )
+  {
+    GNUNET_break (0);
+    return;
+  }
+
   struct ATS_Address * aa = GNUNET_malloc (sizeof (struct ATS_Address) +
                                            ats_count * sizeof (struct 
GNUNET_TRANSPORT_ATS_Information) +
                                            addr_len +
@@ -192,7 +226,11 @@
 {
   // struct AddressDestroyedMessage * msg = (struct AddressDestroyedMessage *) 
message;
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received `%s' message\n", 
"ADDRESS_DESTROYED");
-
+/*
+  struct GNUNET_PeerIdentity *peer = &msg->peer;
+  struct ATS_Address * aa = find_address_by_addr (peer);
+  GNUNET_CONTAINER_multihashmap_remove(addresses, peer, aa);
+  GNUNET_free (aa);*/
 }
 
 static void




reply via email to

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