[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r24539 - gnunet/src/ats
From: |
gnunet |
Subject: |
[GNUnet-SVN] r24539 - gnunet/src/ats |
Date: |
Thu, 25 Oct 2012 15:56:15 +0200 |
Author: wachs
Date: 2012-10-25 15:56:15 +0200 (Thu, 25 Oct 2012)
New Revision: 24539
Modified:
gnunet/src/ats/Makefile.am
gnunet/src/ats/gnunet-ats.c
Log:
gnunet-ats /w address printing support
Modified: gnunet/src/ats/Makefile.am
===================================================================
--- gnunet/src/ats/Makefile.am 2012-10-25 13:54:41 UTC (rev 24538)
+++ gnunet/src/ats/Makefile.am 2012-10-25 13:56:15 UTC (rev 24539)
@@ -60,6 +60,8 @@
gnunet_ats_LDADD = \
$(top_builddir)/src/util/libgnunetutil.la \
$(top_builddir)/src/ats/libgnunetats.la \
+ $(top_builddir)/src/transport/libgnunettransport.la \
+ $(top_builddir)/src/hello/libgnunethello.la \
$(GN_LIBINTL)
gnunet_ats_DEPENDENCIES = \
libgnunetats.la
Modified: gnunet/src/ats/gnunet-ats.c
===================================================================
--- gnunet/src/ats/gnunet-ats.c 2012-10-25 13:54:41 UTC (rev 24538)
+++ gnunet/src/ats/gnunet-ats.c 2012-10-25 13:56:15 UTC (rev 24539)
@@ -26,17 +26,57 @@
#include "platform.h"
#include "gnunet_util_lib.h"
#include "gnunet_ats_service.h"
+#include "gnunet_transport_service.h"
+#define TIMEOUT GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 5)
+
/**
* Final status code.
*/
static int ret;
static int results;
+static int resolve_addresses_numeric;
static struct GNUNET_ATS_PerformanceHandle *ph;
+static struct GNUNET_CONFIGURATION_Handle *cfg;
+
GNUNET_SCHEDULER_TaskIdentifier end_task;
+struct PendingResolutions
+{
+ struct PendingResolutions *next;
+ struct PendingResolutions *prev;
+
+ struct GNUNET_HELLO_Address *address;
+ struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out;
+ struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in;
+
+ struct GNUNET_TRANSPORT_AddressToStringContext * tats_ctx;
+};
+
+struct PendingResolutions *head;
+struct PendingResolutions *tail;
+
+void transport_addr_to_str_cb (void *cls, const char *address)
+{
+ struct PendingResolutions * pr = cls;
+ if (NULL != address)
+ {
+ fprintf (stderr, _("Peer `%s' plugin `%s', address `%s', bandwidth out:
%u Bytes/s, bandwidth in %u Bytes/s\n"),
+ GNUNET_i2s (&pr->address->peer), pr->address->transport_name, address,
+ ntohl (pr->bandwidth_out.value__), ntohl (pr->bandwidth_in.value__));
+ }
+ else if (NULL != pr)
+ {
+ /* We're done */
+ GNUNET_CONTAINER_DLL_remove (head, tail, pr);
+ GNUNET_free (pr->address);
+ GNUNET_free (pr);
+ }
+
+}
+
void ats_perf_cb (void *cls,
const struct
GNUNET_HELLO_Address *
@@ -51,22 +91,47 @@
GNUNET_ATS_Information *
ats, uint32_t ats_count)
{
- fprintf (stderr, "Peer `%s' plugin `%s', bandwidth out: %u Bytes/s,
bandwidth in %u Bytes/s\n",
- GNUNET_i2s (&address->peer), address->transport_name,
- ntohl (bandwidth_out.value__), ntohl (bandwidth_in.value__));
+ struct PendingResolutions * pr;
+
+ pr = GNUNET_malloc (sizeof (struct PendingResolutions));
+ pr->address = GNUNET_HELLO_address_copy (address);
+ pr->bandwidth_in = bandwidth_in;
+ pr->bandwidth_out = bandwidth_out;
+ pr->tats_ctx = GNUNET_TRANSPORT_address_to_string(cfg, address,
+ resolve_addresses_numeric, GNUNET_TIME_UNIT_FOREVER_REL,
transport_addr_to_str_cb, pr);
+ GNUNET_CONTAINER_DLL_insert (head, tail, pr);
results++;
}
void end (void *cls,
const struct GNUNET_SCHEDULER_TaskContext *tc)
{
+ struct PendingResolutions * pr;
+ struct PendingResolutions * next;
+ unsigned int pending;
+
GNUNET_ATS_performance_done (ph);
ph = NULL;
- fprintf (stderr, "ATS returned results for %u addresses\n", results);
+
+ pending = 0;
+ next = head;
+ while (NULL != (pr = next))
+ {
+ next = pr->next;
+ GNUNET_CONTAINER_DLL_remove (head, tail, pr);
+ GNUNET_TRANSPORT_address_to_string_cancel (pr->tats_ctx);
+ GNUNET_free (pr->address);
+ GNUNET_free (pr);
+ pending ++;
+ }
+ if (0 < pending)
+ fprintf (stderr, _("%u address resolutions had a timeout\n"), pending);
+
+ fprintf (stderr, _("ATS returned results for %u addresses\n"), results);
ret = 0;
}
-void testservice_task (void *cls,
+void testservice_ats (void *cls,
const struct GNUNET_SCHEDULER_TaskContext *tc)
{
struct GNUNET_CONFIGURATION_Handle *cfg = cls;
@@ -77,11 +142,12 @@
return;
}
+ results = 0;
ph = GNUNET_ATS_performance_init (cfg, ats_perf_cb, NULL);
if (NULL == ph)
- fprintf (stderr, "Cannot connect to ATS service, exiting...\n");
+ fprintf (stderr, _("Cannot connect to ATS service, exiting...\n"));
- end_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &end,
NULL);
+ end_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end, NULL);
ret = 1;
}
@@ -95,11 +161,12 @@
*/
static void
run (void *cls, char *const *args, const char *cfgfile,
- const struct GNUNET_CONFIGURATION_Handle *cfg)
+ const struct GNUNET_CONFIGURATION_Handle *my_cfg)
{
+ cfg = (struct GNUNET_CONFIGURATION_Handle *) my_cfg;
GNUNET_CLIENT_service_test ("ats", cfg,
GNUNET_TIME_UNIT_MINUTES,
- &testservice_task,
+ &testservice_ats,
(void *) cfg);
}
@@ -115,7 +182,12 @@
main (int argc, char *const *argv)
{
int res;
+ resolve_addresses_numeric = GNUNET_NO;
+
static const struct GNUNET_GETOPT_CommandLineOption options[] = {
+ {'n', "numeric", NULL,
+ gettext_noop ("do not resolve hostnames"),
+ 0, &GNUNET_GETOPT_set_one, &resolve_addresses_numeric},
GNUNET_GETOPT_OPTION_END
};
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r24539 - gnunet/src/ats,
gnunet <=