[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r26727 - gnunet/src/ats
From: |
gnunet |
Subject: |
[GNUnet-SVN] r26727 - gnunet/src/ats |
Date: |
Wed, 3 Apr 2013 09:25:02 +0200 |
Author: wachs
Date: 2013-04-03 09:25:02 +0200 (Wed, 03 Apr 2013)
New Revision: 26727
Modified:
gnunet/src/ats/gnunet-service-ats_addresses.c
gnunet/src/ats/gnunet-service-ats_addresses_simplistic.c
Log:
changes
Modified: gnunet/src/ats/gnunet-service-ats_addresses.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses.c 2013-04-02 16:54:35 UTC
(rev 26726)
+++ gnunet/src/ats/gnunet-service-ats_addresses.c 2013-04-03 07:25:02 UTC
(rev 26727)
@@ -763,7 +763,7 @@
/* Do the update */
ea->session_id = session_id;
- if (GNUNET_YES == disassemble_ats_information(atsi, atsi_count, ea))
+ if (GNUNET_YES == disassemble_ats_information (atsi, atsi_count, ea))
{
GAS_performance_notify_all_clients (&aa->peer,
aa->plugin,
Modified: gnunet/src/ats/gnunet-service-ats_addresses_simplistic.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses_simplistic.c 2013-04-02
16:54:35 UTC (rev 26726)
+++ gnunet/src/ats/gnunet-service-ats_addresses_simplistic.c 2013-04-03
07:25:02 UTC (rev 26727)
@@ -765,7 +765,32 @@
return res;
}
+/**
+ * Extract an ATS performance info from an address
+ *
+ * @param address the address
+ * @param type the type to extract in HBO
+ * @return the value in HBO or UINT32_MAX in HBO if value does not exist
+ */
+static int
+get_performance_info (struct ATS_Address *address, uint32_t type)
+{
+ int c1;
+ GNUNET_assert (NULL != address);
+
+ if ((NULL == address->atsi) || (0 == address->atsi_count))
+ return UINT32_MAX;
+
+ for (c1 = 0; c1 < address->atsi_count; c1++)
+ {
+ if (ntohl(address->atsi[c1].type) == type)
+ return ntohl(address->atsi[c1].value);
+ }
+ return UINT32_MAX;
+}
+
+
/**
* Add a single address to the solve
*
@@ -779,16 +804,20 @@
struct GAS_SIMPLISTIC_Handle *s = solver;
struct Network *net = NULL;
struct AddressWrapper *aw = NULL;
+ uint32_t addr_net;
GNUNET_assert (NULL != s);
int c;
+
+ addr_net = get_performance_info (address, GNUNET_ATS_NETWORK_TYPE);
+ if (UINT32_MAX == addr_net)
+ addr_net = GNUNET_ATS_NET_UNSPECIFIED;
+
for (c = 0; c < s->networks; c++)
{
net = &s->network_entries[c];
-#if 0
- if (address->atsp_network_type == net->type)
+ if (addr_net == net->type)
break;
-#endif
}
if (NULL == net)
{
@@ -919,6 +948,7 @@
int i;
uint32_t value;
uint32_t type;
+ uint32_t addr_net;
int save_active = GNUNET_NO;
struct Network *new_net = NULL;
for (i = 0; i < atsi_count; i++)
@@ -956,13 +986,18 @@
break;
case GNUNET_ATS_NETWORK_TYPE:
-#if 0
- if (address->atsp_network_type != value)
+ addr_net = get_performance_info (address, GNUNET_ATS_NETWORK_TYPE);
+ if (UINT32_MAX == addr_net)
{
+ GNUNET_break (0);
+ addr_net = GNUNET_ATS_NET_UNSPECIFIED;
+ }
+ if (addr_net != value)
+ {
LOG (GNUNET_ERROR_TYPE_DEBUG, "Network type changed, moving %s address
from `%s' to `%s'\n",
(GNUNET_YES == address->active) ? "active" : "inactive",
- GNUNET_ATS_print_network_type(address->atsp_network_type),
+ GNUNET_ATS_print_network_type(addr_net),
GNUNET_ATS_print_network_type(value));
save_active = address->active;
@@ -970,15 +1005,8 @@
GAS_simplistic_address_delete (solver, addresses, address, GNUNET_NO);
/* set new network type */
- address->atsp_network_type = value;
new_net = find_network (solver, value);
address->solver_information = new_net;
- if (address->solver_information == NULL)
- {
- GNUNET_break (0);
- address->atsp_network_type = GNUNET_ATS_NET_UNSPECIFIED;
- return;
- }
/* Add to new network and update*/
GAS_simplistic_address_add (solver, addresses, address);
@@ -1012,7 +1040,7 @@
}
}
}
-#endif
+
break;
case GNUNET_ATS_ARRAY_TERMINATOR:
break;
@@ -1060,6 +1088,10 @@
struct ATS_Address *previous = *previous_p;
struct GNUNET_TIME_Absolute now;
struct Network *net = (struct Network *) current->solver_information;
+ uint32_t p_distance_cur;
+ uint32_t p_distance_prev;
+ uint32_t p_delay_cur;
+ uint32_t p_delay_prev;
now = GNUNET_TIME_absolute_get();
@@ -1108,20 +1140,27 @@
*previous_p = current;
return GNUNET_OK;
}
-#if 0
- if (previous->atsp_distance > current->atsp_distance)
+
+ p_distance_prev = get_performance_info (previous,
GNUNET_ATS_QUALITY_NET_DISTANCE);
+ p_distance_cur = get_performance_info (current,
GNUNET_ATS_QUALITY_NET_DISTANCE);
+ if ((p_distance_prev != UINT32_MAX) && (p_distance_cur != UINT32_MAX) &&
+ (p_distance_prev > p_distance_cur))
{
/* user shorter distance */
*previous_p = current;
return GNUNET_OK;
}
- if (previous->atsp_latency.rel_value > current->atsp_latency.rel_value)
+
+ p_delay_prev = get_performance_info (previous, GNUNET_ATS_QUALITY_NET_DELAY);
+ p_delay_cur = get_performance_info (current, GNUNET_ATS_QUALITY_NET_DELAY);
+ if ((p_delay_prev != UINT32_MAX) && (p_delay_cur != UINT32_MAX) &&
+ (p_delay_prev > p_delay_cur))
{
/* user lower latency */
*previous_p = current;
return GNUNET_OK;
}
-#endif
+
/* don't care */
return GNUNET_OK;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r26727 - gnunet/src/ats,
gnunet <=