gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r10670 - in gnunet: . src src/peerinfo src/peerinfo-tool


From: gnunet
Subject: [GNUnet-SVN] r10670 - in gnunet: . src src/peerinfo src/peerinfo-tool
Date: Fri, 19 Mar 2010 15:24:14 +0100

Author: grothoff
Date: 2010-03-19 15:24:14 +0100 (Fri, 19 Mar 2010)
New Revision: 10670

Added:
   gnunet/src/peerinfo-tool/
   gnunet/src/peerinfo-tool/Makefile.am
   gnunet/src/peerinfo-tool/gnunet-peerinfo.c
Removed:
   gnunet/src/peerinfo/gnunet-peerinfo.c
Modified:
   gnunet/HACKING
   gnunet/TODO
   gnunet/configure.ac
   gnunet/src/Makefile.am
   gnunet/src/peerinfo/Makefile.am
Log:
moving gnunet-peerinfo.c to allow it to use transport_api

Modified: gnunet/HACKING
===================================================================
--- gnunet/HACKING      2010-03-19 14:08:27 UTC (rev 10669)
+++ gnunet/HACKING      2010-03-19 14:24:14 UTC (rev 10670)
@@ -6,7 +6,7 @@
 - _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

Modified: gnunet/TODO
===================================================================
--- gnunet/TODO 2010-03-19 14:08:27 UTC (rev 10669)
+++ gnunet/TODO 2010-03-19 14:24:14 UTC (rev 10670)
@@ -15,30 +15,20 @@
 
 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 @@
   - 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?)
+
+
+

Modified: gnunet/configure.ac
===================================================================
--- gnunet/configure.ac 2010-03-19 14:08:27 UTC (rev 10669)
+++ gnunet/configure.ac 2010-03-19 14:24:14 UTC (rev 10670)
@@ -655,6 +655,7 @@
 src/nat/libnatpmp/Makefile
 src/nat/miniupnp/Makefile
 src/peerinfo/Makefile
+src/peerinfo-tool/Makefile
 src/statistics/Makefile
 src/template/Makefile
 src/testing/Makefile

Modified: gnunet/src/Makefile.am
===================================================================
--- gnunet/src/Makefile.am      2010-03-19 14:08:27 UTC (rev 10669)
+++ gnunet/src/Makefile.am      2010-03-19 14:24:14 UTC (rev 10670)
@@ -22,6 +22,7 @@
   datastore \
   template \
   transport \
+  peerinfo-tool \
   core \
   testing \
   $(HOSTLIST_DIR) \

Modified: gnunet/src/peerinfo/Makefile.am
===================================================================
--- gnunet/src/peerinfo/Makefile.am     2010-03-19 14:08:27 UTC (rev 10669)
+++ gnunet/src/peerinfo/Makefile.am     2010-03-19 14:24:14 UTC (rev 10670)
@@ -23,15 +23,8 @@
 
 
 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 @@
 
 EXTRA_DIST = \
   test_peerinfo_api_data.conf 
-
-#check_SCRIPTS = \
-#  test_gnunet_peerinfo.sh

Deleted: gnunet/src/peerinfo/gnunet-peerinfo.c
===================================================================
--- gnunet/src/peerinfo/gnunet-peerinfo.c       2010-03-19 14:08:27 UTC (rev 
10669)
+++ gnunet/src/peerinfo/gnunet-peerinfo.c       2010-03-19 14:24:14 UTC (rev 
10670)
@@ -1,222 +0,0 @@
-/*
-     This file is part of GNUnet.
-     (C) 2001, 2002, 2003, 2004, 2006, 2009 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
-     by the Free Software Foundation; either version 2, or (at your
-     option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     General Public License for more details.
-
-     You should have received a copy of the GNU General Public License
-     along with GNUnet; see the file COPYING.  If not, write to the
-     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-     Boston, MA 02111-1307, USA.
-*/
-
-/**
- * @file peerinfo/gnunet-peerinfo.c
- * @brief Print information about other known peers.
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "gnunet_crypto_lib.h"
-#include "gnunet_configuration_lib.h"
-#include "gnunet_getopt_lib.h"
-#include "gnunet_peerinfo_service.h"
-#include "gnunet_transport_service.h"
-#include "gnunet_program_lib.h"
-
-static int no_resolve;
-
-static int be_quiet;
-
-static int get_self;
-
-static struct GNUNET_SCHEDULER_Handle *sched;
-
-static const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-#if FIXME
-/**
- * Function to call with a human-readable format of an address
- *
- * @param cls closure
- * @param address NULL on error, otherwise 0-terminated printable UTF-8 string
- */
-static void
-print_resolved_address (void *cls,
-                       const char *address)
-{
-  /* FIXME: need to buffer output from all requests and print it at
-     once, otherwise we mix results... */
-  if (address == NULL)
-    {
-      fprintf (stderr, "\n");
-      return;
-    }
-  fprintf (stderr, " %s\n", address);
-}
-#endif
-
-/**
- * Iterator callback to go over all addresses.
- *
- * @param cls closure
- * @param tname name of the transport
- * @param expiration expiration time
- * @param addr the address
- * @param addrlen length of the address
- * @return GNUNET_OK to keep the address and continue
- */
-static int
-print_address (void *cls,
-              const char *tname,
-              struct GNUNET_TIME_Absolute expiration,
-              const void *addr, size_t addrlen)
-{
-#if FIXME
-  GNUNET_TRANSPORT_address_lookup (sched,
-                                  cfg,
-                                  addr,
-                                  addrlen,
-                                  no_resolve,
-                                  tname,
-                                  GNUNET_TIME_UNIT_SECONDS,
-                                  &print_resolved_address,
-                                  NULL);
-#endif
-  return GNUNET_OK;
-}
-
-
-/**
- * Print information about the peer.
- * Currently prints the GNUNET_PeerIdentity, trust and the IP.
- * Could of course do more (e.g. resolve via DNS).
- */
-static void
-print_peer_info (void *cls,
-                 const struct GNUNET_PeerIdentity *peer,
-                 const struct GNUNET_HELLO_Message *hello, uint32_t trust)
-{
-  struct GNUNET_CRYPTO_HashAsciiEncoded enc;
-
-  if (peer == NULL)    
-    return;    
-  GNUNET_CRYPTO_hash_to_enc (&peer->hashPubKey, &enc);
-  if (be_quiet)
-    {
-      printf ("%s\n", (const char *) &enc);
-      return;
-    }
-  printf (_("Peer `%s' with trust %8u\n"), (const char *) &enc, trust);
-  GNUNET_HELLO_iterate_addresses (hello, GNUNET_NO, &print_address, NULL);
-}
-
-/**
- * Main function that will be run by the scheduler.
- *
- * @param cls closure
- * @param s the scheduler to use
- * @param args remaining command-line arguments
- * @param cfgfile name of the configuration file used (for saving, can be 
NULL!)
- * @param c configuration
- */
-static void
-run (void *cls,
-     struct GNUNET_SCHEDULER_Handle *s,
-     char *const *args,
-     const char *cfgfile, 
-     const struct GNUNET_CONFIGURATION_Handle *c)
-{
-  struct GNUNET_CRYPTO_RsaPrivateKey *priv;
-  struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded pub;
-  struct GNUNET_PeerIdentity pid;
-  struct GNUNET_CRYPTO_HashAsciiEncoded enc;
-  char *fn;
-
-  sched = s;
-  cfg = c;
-  if (get_self != GNUNET_YES)
-    {
-      (void) GNUNET_PEERINFO_iterate (cfg,
-                                     sched,
-                                     NULL,
-                                     0,
-                                     GNUNET_TIME_relative_multiply
-                                     (GNUNET_TIME_UNIT_SECONDS, 2),
-                                     &print_peer_info, NULL);
-    }
-  else
-    {
-      if (GNUNET_OK !=
-          GNUNET_CONFIGURATION_get_value_filename (cfg,
-                                                   "GNUNETD",
-                                                   "HOSTKEY", &fn))
-       {
-          fprintf (stderr, 
-                  _("Could not find option `%s:%s' in configuration.\n"), 
-                  "GNUNETD",
-                  "HOSTKEYFILE");
-         return;
-       }
-      priv = GNUNET_CRYPTO_rsa_key_create_from_file (fn);
-      if (priv == NULL)
-        {
-          fprintf (stderr, _("Loading hostkey from `%s' failed.\n"), fn);
-          GNUNET_free (fn);
-          return;
-        }
-      GNUNET_free (fn);
-      GNUNET_CRYPTO_rsa_key_get_public (priv, &pub);
-      GNUNET_CRYPTO_rsa_key_free (priv);
-      GNUNET_CRYPTO_hash (&pub, sizeof (pub), &pid.hashPubKey);
-      GNUNET_CRYPTO_hash_to_enc (&pid.hashPubKey, &enc);
-      if (be_quiet)
-        printf ("%s\n", (char *) &enc);
-      else
-        printf (_("I am peer `%s'.\n"), (const char *) &enc);
-    }
-}
-
-
-/**
- * gnunet-peerinfo command line options
- */
-static struct GNUNET_GETOPT_CommandLineOption options[] = {
-  {'n', "numeric", NULL,
-   gettext_noop ("don't resolve host names"),
-   0, &GNUNET_GETOPT_set_one, &no_resolve},
-  {'q', "quiet", NULL,
-   gettext_noop ("output only the identity strings"),
-   0, &GNUNET_GETOPT_set_one, &be_quiet},
-  {'s', "self", NULL,
-   gettext_noop ("output our own identity only"),
-   0, &GNUNET_GETOPT_set_one, &get_self},
-  GNUNET_GETOPT_OPTION_END
-};
-
-/**
- * The main function to obtain peer information.
- *
- * @param argc number of arguments from the command line
- * @param argv command line arguments
- * @return 0 ok, 1 on error
- */
-int
-main (int argc, char *const *argv)
-{
-  return (GNUNET_OK ==
-          GNUNET_PROGRAM_run (argc,
-                              argv,
-                              "gnunet-peerinfo",
-                              gettext_noop ("Print information about peers."),
-                              options, &run, NULL)) ? 0 : 1;
-}
-
-/* end of gnunet-peerinfo.c */

Copied: gnunet/src/peerinfo-tool/Makefile.am (from rev 10659, 
gnunet/src/peerinfo/Makefile.am)
===================================================================
--- gnunet/src/peerinfo-tool/Makefile.am                                (rev 0)
+++ gnunet/src/peerinfo-tool/Makefile.am        2010-03-19 14:24:14 UTC (rev 
10670)
@@ -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

Copied: gnunet/src/peerinfo-tool/gnunet-peerinfo.c (from rev 10659, 
gnunet/src/peerinfo/gnunet-peerinfo.c)
===================================================================
--- gnunet/src/peerinfo-tool/gnunet-peerinfo.c                          (rev 0)
+++ gnunet/src/peerinfo-tool/gnunet-peerinfo.c  2010-03-19 14:24:14 UTC (rev 
10670)
@@ -0,0 +1,223 @@
+/*
+     This file is part of GNUnet.
+     (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
+     by the Free Software Foundation; either version 2, or (at your
+     option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with GNUnet; see the file COPYING.  If not, write to the
+     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
+
+/**
+ * @file peerinfo-tool/gnunet-peerinfo.c
+ * @brief Print information about other known peers.
+ * @author Christian Grothoff
+ */
+#include "platform.h"
+#include "gnunet_crypto_lib.h"
+#include "gnunet_configuration_lib.h"
+#include "gnunet_getopt_lib.h"
+#include "gnunet_peerinfo_service.h"
+#include "gnunet_transport_service.h"
+#include "gnunet_program_lib.h"
+
+static int no_resolve;
+
+static int be_quiet;
+
+static int get_self;
+
+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
+ *
+ * @param cls closure
+ * @param address NULL on error, otherwise 0-terminated printable UTF-8 string
+ */
+static void
+print_resolved_address (void *cls,
+                       const char *address)
+{
+  /* FIXME: need to buffer output from all requests and print it at
+     once, otherwise we mix results... */
+  if (address == NULL)
+    {
+      return;
+    }
+  fprintf (stderr, " %s\n", address);
+}
+#endif
+
+/**
+ * Iterator callback to go over all addresses.
+ *
+ * @param cls closure
+ * @param tname name of the transport
+ * @param expiration expiration time
+ * @param addr the address
+ * @param addrlen length of the address
+ * @return GNUNET_OK to keep the address and continue
+ */
+static int
+print_address (void *cls,
+              const char *tname,
+              struct GNUNET_TIME_Absolute expiration,
+              const void *addr, size_t addrlen)
+{
+#if FIXME
+  GNUNET_TRANSPORT_address_lookup (sched,
+                                  cfg,
+                                  addr,
+                                  addrlen,
+                                  no_resolve,
+                                  tname,
+                                  GNUNET_TIME_UNIT_SECONDS,
+                                  &print_resolved_address,
+                                  NULL);
+#endif
+  return GNUNET_OK;
+}
+
+
+/**
+ * Print information about the peer.
+ * Currently prints the GNUNET_PeerIdentity, trust and the IP.
+ * Could of course do more (e.g. resolve via DNS).
+ */
+static void
+print_peer_info (void *cls,
+                 const struct GNUNET_PeerIdentity *peer,
+                 const struct GNUNET_HELLO_Message *hello, uint32_t trust)
+{
+  struct GNUNET_CRYPTO_HashAsciiEncoded enc;
+
+  if (peer == NULL)    
+    return;    
+  GNUNET_CRYPTO_hash_to_enc (&peer->hashPubKey, &enc);
+  if (be_quiet)
+    {
+      printf ("%s\n", (const char *) &enc);
+      return;
+    }
+  printf (_("Peer `%s' with trust %8u\n"), (const char *) &enc, trust);
+  GNUNET_HELLO_iterate_addresses (hello, GNUNET_NO, &print_address, NULL);
+}
+
+/**
+ * Main function that will be run by the scheduler.
+ *
+ * @param cls closure
+ * @param s the scheduler to use
+ * @param args remaining command-line arguments
+ * @param cfgfile name of the configuration file used (for saving, can be 
NULL!)
+ * @param c configuration
+ */
+static void
+run (void *cls,
+     struct GNUNET_SCHEDULER_Handle *s,
+     char *const *args,
+     const char *cfgfile, 
+     const struct GNUNET_CONFIGURATION_Handle *c)
+{
+  struct GNUNET_CRYPTO_RsaPrivateKey *priv;
+  struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded pub;
+  struct GNUNET_PeerIdentity pid;
+  struct GNUNET_CRYPTO_HashAsciiEncoded enc;
+  char *fn;
+
+  sched = s;
+  cfg = c;
+  if (get_self != GNUNET_YES)
+    {
+      (void) GNUNET_PEERINFO_iterate (cfg,
+                                     sched,
+                                     NULL,
+                                     0,
+                                     GNUNET_TIME_relative_multiply
+                                     (GNUNET_TIME_UNIT_SECONDS, 2),
+                                     &print_peer_info, NULL);
+    }
+  else
+    {
+      if (GNUNET_OK !=
+          GNUNET_CONFIGURATION_get_value_filename (cfg,
+                                                   "GNUNETD",
+                                                   "HOSTKEY", &fn))
+       {
+          fprintf (stderr, 
+                  _("Could not find option `%s:%s' in configuration.\n"), 
+                  "GNUNETD",
+                  "HOSTKEYFILE");
+         return;
+       }
+      priv = GNUNET_CRYPTO_rsa_key_create_from_file (fn);
+      if (priv == NULL)
+        {
+          fprintf (stderr, _("Loading hostkey from `%s' failed.\n"), fn);
+          GNUNET_free (fn);
+          return;
+        }
+      GNUNET_free (fn);
+      GNUNET_CRYPTO_rsa_key_get_public (priv, &pub);
+      GNUNET_CRYPTO_rsa_key_free (priv);
+      GNUNET_CRYPTO_hash (&pub, sizeof (pub), &pid.hashPubKey);
+      GNUNET_CRYPTO_hash_to_enc (&pid.hashPubKey, &enc);
+      if (be_quiet)
+        printf ("%s\n", (char *) &enc);
+      else
+        printf (_("I am peer `%s'.\n"), (const char *) &enc);
+    }
+}
+
+
+/**
+ * gnunet-peerinfo command line options
+ */
+static struct GNUNET_GETOPT_CommandLineOption options[] = {
+  {'n', "numeric", NULL,
+   gettext_noop ("don't resolve host names"),
+   0, &GNUNET_GETOPT_set_one, &no_resolve},
+  {'q', "quiet", NULL,
+   gettext_noop ("output only the identity strings"),
+   0, &GNUNET_GETOPT_set_one, &be_quiet},
+  {'s', "self", NULL,
+   gettext_noop ("output our own identity only"),
+   0, &GNUNET_GETOPT_set_one, &get_self},
+  GNUNET_GETOPT_OPTION_END
+};
+
+/**
+ * The main function to obtain peer information.
+ *
+ * @param argc number of arguments from the command line
+ * @param argv command line arguments
+ * @return 0 ok, 1 on error
+ */
+int
+main (int argc, char *const *argv)
+{
+  return (GNUNET_OK ==
+          GNUNET_PROGRAM_run (argc,
+                              argv,
+                              "gnunet-peerinfo",
+                              gettext_noop ("Print information about peers."),
+                              options, &run, NULL)) ? 0 : 1;
+}
+
+/* end of gnunet-peerinfo.c */





reply via email to

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