From 7b7ec4fefd44742d9368638df9670771b8eaf259 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Fri, 19 Mar 2010 14:24:14 +0000 Subject: [PATCH] moving gnunet-peerinfo.c to allow it to use transport_api --- HACKING | 2 +- TODO | 50 +++++++++++++------ configure.ac | 1 + src/Makefile.am | 1 + src/peerinfo-tool/Makefile.am | 24 +++++++++ .../gnunet-peerinfo.c | 7 +-- src/peerinfo/Makefile.am | 10 ---- 7 files changed, 65 insertions(+), 30 deletions(-) create mode 100644 src/peerinfo-tool/Makefile.am rename src/{peerinfo => peerinfo-tool}/gnunet-peerinfo.c (97%) diff --git a/HACKING b/HACKING index 5d8badcbb..6b5dfb001 100644 --- a/HACKING +++ b/HACKING @@ -6,7 +6,7 @@ include files: - _plugin: plugin definition - _protocol: structs used in network protocol - exceptions: - * GNUNET_config.h --- generated // FIXME: decapitalize + * gnunet_config.h --- generated * platform.h --- first included * plibc.h --- external library * gnunet_common.h --- fundamental routines diff --git a/TODO b/TODO index a0a86789c..6fb70aebd 100644 --- a/TODO +++ b/TODO @@ -15,30 +15,20 @@ away), in order in which they will likely be done: 0.9.0pre0: * TRANSPORT: - - TCP not used bi-directionally (especially important also for PONG!) - Need a way for plugin to tell to service that it can *reliably* transmit - PONGs. Need *good* way to ensure only one (plugin) session is active at - any given point in time; need systematic way to periodically probe latency/ - transport cost changes - - disconnect notifications from TCP not always as nice as we might want - them to be (but how can we do this cleanly given that UDP is connectionless?) - implement transport API to pretty-print transport address + resolve cyclic dependency (gnunet-peerinfo -> transport_api -> peerinfo!) + gnunet-transport-service crashes when asked to resolve address (!) + asynchronous transport lookup and non-CPS iterator in peerinfo require some work to ensure printing in the proper order... - - instantly filter addresses from *other* peers that - are *equal* to our own address + port (i.e., localhost:2086). We - no longer filter those for outgoing (helps with loopback testing - and keeps the code clean), but we should filter strictly *impossible* - incoming addresses! This is for efficiency, not correctness. - - [./transport/gnunet-service-transport.c:173]: (style) struct or union member 'TransportPlugin::rebuild' is never used - - [./transport/plugin_transport_tcp.c:391]: (style) struct or union member 'Plugin::address_update_task' is never used * CORE: - SET_KEY is triggered every 2.5 minutes (after session is up); should just do PING (not SET_KEY + PING) - "Forcing disconnect of XXX due to inactivity" -- can happen every few MS!? (disconnect does not really succeed, or what?) + Also, core does not seem to actually decrement the number of active + sessions even if no connections exist for a while! (likely related...) + - transport reports bw quota violations on big-endian systems (core or + transport issue?) * HELLO: - need function to test "equivalency" of HELLOs; use in topology! * FS: @@ -253,10 +243,38 @@ away), in order in which they will likely be done: - Remove KBlocks in gnunet-unindex (see discussion with Kenneth Almquist on gnunet-devs in 9/2009) - Allow checking of presence of search results and/or content via command-line tools (add options to gnunet-search / gnunet-download to limit search to local peer) -* STATISTICS: - - should use BIO instead of mmap * PEERINFO: - expire 'ancient' HELLOs (those without valid addresses AND that we have not 'used' (for their public keys) in a while; need a way to track actual 'use') - make sue we also trigger notifications whenever HELLOs expire + + + +Optimizations: +* TCP: + - should use hash map to look up sessions +* PEERINFO: + - api creates many, many short-lived TCP connections; either some + clients should use the API differently or we need to change the + API to enable re-use of connections to the service +* STATISTICS: + - should use BIO instead of mmap +* TRANSPORT: + - need to periodically probe latency/transport cost changes & possibly switch transport + - instantly filter addresses from *other* peers that + are *equal* to our own address + port (i.e., localhost:2086). We + no longer filter those for outgoing (helps with loopback testing + and keeps the code clean), but we should filter strictly *impossible* + incoming addresses! This is for efficiency, not correctness. + - should use hash map to look up Neighbours + +Minor features: +* TCP: + - repeatedly resolve hostname and look up interfaces to determine our own IP + - [./transport/plugin_transport_tcp.c:391]: (style) struct or union member 'Plugin::address_update_task' is never used (related to issue above) +* TRANSPORT: + - [./transport/gnunet-service-transport.c:173]: (style) struct or union member 'TransportPlugin::rebuild' is never used (related to TCP not refreshing external addresses?) + + + diff --git a/configure.ac b/configure.ac index 41157ca29..4251e329c 100644 --- a/configure.ac +++ b/configure.ac @@ -655,6 +655,7 @@ src/nat/Makefile src/nat/libnatpmp/Makefile src/nat/miniupnp/Makefile src/peerinfo/Makefile +src/peerinfo-tool/Makefile src/statistics/Makefile src/template/Makefile src/testing/Makefile diff --git a/src/Makefile.am b/src/Makefile.am index 4d63bc756..a01288078 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -22,6 +22,7 @@ SUBDIRS = \ datastore \ template \ transport \ + peerinfo-tool \ core \ testing \ $(HOSTLIST_DIR) \ diff --git a/src/peerinfo-tool/Makefile.am b/src/peerinfo-tool/Makefile.am new file mode 100644 index 000000000..b9e6d7d07 --- /dev/null +++ b/src/peerinfo-tool/Makefile.am @@ -0,0 +1,24 @@ +INCLUDES = -I$(top_srcdir)/src/include + +if MINGW + WINFLAGS = -Wl,--no-undefined -Wl,--export-all-symbols -lole32 -lshell32 -luuid -liconv -lstdc++ -lcomdlg32 -lgdi32 +endif + +if USE_COVERAGE + AM_CFLAGS = --coverage -O0 + XLIB = -lgcov +endif + +bin_PROGRAMS = \ + gnunet-peerinfo + +gnunet_peerinfo_SOURCES = \ + gnunet-peerinfo.c +gnunet_peerinfo_LDADD = \ + $(top_builddir)/src/peerinfo/libgnunetpeerinfo.la \ + $(top_builddir)/src/transport/libgnunettransport.la \ + $(top_builddir)/src/util/libgnunetutil.la + + +#check_SCRIPTS = \ +# test_gnunet_peerinfo.sh diff --git a/src/peerinfo/gnunet-peerinfo.c b/src/peerinfo-tool/gnunet-peerinfo.c similarity index 97% rename from src/peerinfo/gnunet-peerinfo.c rename to src/peerinfo-tool/gnunet-peerinfo.c index d4a36a059..c056b390e 100644 --- a/src/peerinfo/gnunet-peerinfo.c +++ b/src/peerinfo-tool/gnunet-peerinfo.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2001, 2002, 2003, 2004, 2006, 2009 Christian Grothoff (and other contributing authors) + (C) 2001, 2002, 2003, 2004, 2006, 2009, 2010 Christian Grothoff (and other contributing authors) GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -19,7 +19,7 @@ */ /** - * @file peerinfo/gnunet-peerinfo.c + * @file peerinfo-tool/gnunet-peerinfo.c * @brief Print information about other known peers. * @author Christian Grothoff */ @@ -41,6 +41,8 @@ static struct GNUNET_SCHEDULER_Handle *sched; static const struct GNUNET_CONFIGURATION_Handle *cfg; +#define FIXME 0 + #if FIXME /** * Function to call with a human-readable format of an address @@ -56,7 +58,6 @@ print_resolved_address (void *cls, once, otherwise we mix results... */ if (address == NULL) { - fprintf (stderr, "\n"); return; } fprintf (stderr, " %s\n", address); diff --git a/src/peerinfo/Makefile.am b/src/peerinfo/Makefile.am index ea7ef1316..42396e3e7 100644 --- a/src/peerinfo/Makefile.am +++ b/src/peerinfo/Makefile.am @@ -23,15 +23,8 @@ libgnunetpeerinfo_la_LDFLAGS = \ bin_PROGRAMS = \ - gnunet-peerinfo \ gnunet-service-peerinfo -gnunet_peerinfo_SOURCES = \ - gnunet-peerinfo.c -gnunet_peerinfo_LDADD = \ - $(top_builddir)/src/peerinfo/libgnunetpeerinfo.la \ - $(top_builddir)/src/util/libgnunetutil.la - gnunet_service_peerinfo_SOURCES = \ gnunet-service-peerinfo.c gnunet_service_peerinfo_LDADD = \ @@ -54,6 +47,3 @@ test_peerinfo_api_LDADD = \ EXTRA_DIST = \ test_peerinfo_api_data.conf - -#check_SCRIPTS = \ -# test_gnunet_peerinfo.sh -- 2.25.1