[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r17465 - gnunet/src/ats,
gnunet <=