Browse Source

Merge branch 'master' of ssh://git.gnunet.org/gnunet

t3sserakt 2 years ago
parent
commit
b97b260a04

+ 4 - 0
contrib/Makefile.am

@@ -53,6 +53,7 @@ EXTRA_DIST = \
  conf/gnunet/gnunet-user.conf \
  conf/nss/nssswitch.conf \
  conf/wireshark/wireshark.lua \
+ gnunet.m4 \
  $(PACKAGES_FILES) \
  $(INITD_FILES) \
  Makefile.inc \
@@ -77,3 +78,6 @@ test_gnunet_prefix_LDADD = \
   $(LTLIBICONV) \
   $(GN_LIBINTL) \
   $(LIBLTDL) -lunistring $(XLIB)
+
+aclocaldir = $(datadir)/aclocal
+aclocal_DATA = gnunet.m4

+ 72 - 0
contrib/gnunet.m4

@@ -0,0 +1,72 @@
+# Autoconf macro for working with GNUnet
+# This file is in the public domain.
+#
+# AM_PATH_GNUNET([MINIMUM-VERSION = 0.15.3, [ACTION-IF-FOUND, [ACTION-IF-NOT-FOUND]]])
+# Find the GNUnet installation, either automatically or through the
+# --with-gnunet-prefix flag
+#
+# This macro runs the pkg-config and, if needed, the gnunet-config tool
+# provided by GNUnet itself.
+#
+# The gnunet-config tool can be overridden by setting the GNUNET_CONFIG
+# variable before executing the configure script.
+#
+# The variables GNUNET_CFLAGS and GNUNET_LIBS will be set to appropriate
+# values and are made available to Automake.
+AC_DEFUN([AM_PATH_GNUNET],
+[AC_ARG_WITH([gnunet-prefix],
+             [AS_HELP_STRING([--with-gnunet-prefix=PATH],
+                             [PATH to the GNUnet installation])],
+             [gnunet_prefix="$withval"],
+             [gnunet_prefix=""])
+ AC_ARG_ENABLE([debug-log],
+               [AS_HELP_STRING([--disable-debug-log],
+                               [Disable all DEBUG-level logging])],
+               [],
+               [enable_debug_log=yes])
+ AC_ARG_VAR([GNUNET_CONFIG],[The gnunet-config tool])
+ min_gnunet_version=m4_if([$1], ,0.15.3,$1)
+ # Make sure the specified version is at least the version with
+ # the features required to use this macro
+ AS_VERSION_COMPARE([$min_gnunet_version],[0.15.3],
+                    [AC_MSG_WARN([The specified GNUnet version $min_gnunet_version is too old.])
+                     AC_MSG_WARN([The minimum version has been set to 0.15.3])
+                     min_gnunet_version="0.15.3"])
+ AS_IF([test "x${GNUNET_CONFIG+set}" != "xset"],
+       [PKG_CHECK_MODULES([GNUNET],[gnunetutil >= $min_gnunet_version],
+                          [gnunet_pkgconfig=yes],[gnunet_pkgconfig=no])
+        AS_IF([test "x$gnunet_pkgconfig" = "xno" && test "x$gnunet_prefix" != "x"],
+              [gnunet_PATH="$PATH"
+               AS_IF([test "x$prefix" != "xNONE"],
+                     [gnunet_PATH="$prefix/bin${PATH_SEPARATOR}$prefix/usr/bin"])
+               AC_PATH_PROG([GNUNET_CONFIG],[gnunet-config],[no],[$gnunet_PATH])
+               AS_UNSET([gnunet_PATH])],
+              [GNUNET_CONFIG="pkg-config gnunetutil"])])
+ AC_MSG_CHECKING([if GNUnet version is >= $min_gnunet_version])
+ gnunet_result=no
+ AS_IF([test "x$GNUNET_CONFIG" != "xno" && test -n "$GNUNET_CONFIG"],
+       [gnunet_version=`$GNUNET_CONFIG --version | tr ' ' '\n' | sed -n '2p'`
+        AS_VERSION_COMPARE([$gnunet_version],[$min_gnunet_version],
+                           [gnunet_result=no],
+                           [gnunet_result=yes],
+                           [gnunet_result=yes])
+        AS_UNSET([gnunet_version])])
+ AS_IF([test "x$gnunet_result" != "xyes"],
+       [AC_MSG_RESULT([no])
+        m4_if([$3], ,:,[$3])],
+       [AC_MSG_RESULT([yes])
+        m4_if([$2], ,:,[$2])
+        AC_CHECK_HEADERS([sys/socket.h netinet/in.h byteswap.h])
+        AS_IF([test "x${GNUNET_CFLAGS+set}" != "xset"],
+              [GNUNET_CFLAGS=`$GNUNET_CONFIG --cflags`
+              AC_SUBST([GNUNET_CFLAGS])])
+        AS_IF([test "x${GNUNET_LIBS+set}" != "xset"],
+              [GNUNET_LIBS=`$GNUNET_CONFIG --libs`
+               AC_SUBST([GNUNET_LIBS])])
+        AS_IF([test "x$enable_debug_log" = "xno"],
+              [AC_DEFINE([GNUNET_EXTRA_LOGGING],
+                         [0],
+                         [0 if debug messages should be culled])])])
+ AS_UNSET([gnunet_result])
+ AS_UNSET([min_gnunet_version])
+])

+ 8 - 8
contrib/services/systemd/tmpfiles-gnunet.conf

@@ -1,10 +1,10 @@
 # Typically placed into /usr/lib/tmpfiles.d/gnunet.conf
 d /var/lib/gnunet 0700 gnunet gnunet - -
-z /usr/lib/gnunet/gnunet-helper-dns 4750 root gnunetdns - -
-z /usr/lib/gnunet/gnunet-service-dns 2750 gnunet gnunetdns - -
-z /usr/lib/gnunet/libexec/gnunet-helper-vpn 4750 root root - -
-z /usr/lib/gnunet/libexec/gnunet-helper-transport-wlan 4750 root root - -
-z /usr/lib/gnunet/libexec/gnunet-helper-transport-bluetooth 4750 root root - -
-z /usr/lib/gnunet/libexec/gnunet-helper-exit 4750 root root - -
-z /usr/lib/gnunet/libexec/gnunet-helper-nat-server 4750 root root - -
-z /usr/lib/gnunet/libexec/gnunet-helper-nat-client 4750 root root - -
+z /usr/lib/gnunet/libexec/gnunet-helper-dns 4750 root gnunetdns - -
+z /usr/lib/gnunet/libexec/gnunet-service-dns 2750 gnunet gnunetdns - -
+z /usr/lib/gnunet/libexec/gnunet-helper-vpn 4755 root root - -
+z /usr/lib/gnunet/libexec/gnunet-helper-transport-wlan 4755 root root - -
+z /usr/lib/gnunet/libexec/gnunet-helper-transport-bluetooth 4755 root root - -
+z /usr/lib/gnunet/libexec/gnunet-helper-exit 4755 root root - -
+z /usr/lib/gnunet/libexec/gnunet-helper-nat-server 4755 root root - -
+z /usr/lib/gnunet/libexec/gnunet-helper-nat-client 4755 root root - -

+ 8 - 0
contrib/xdg-scheme-handler/README.md

@@ -0,0 +1,8 @@
+XDG Scheme Handler for GNUnet URIs
+==================================
+
+To register the `gnunet://` URI scheme, launch the following commands from this
+directory as a privileged user:
+
+    install -Dm644 gnunet-uri.desktop /usr/share/applications/gnunet-uri.desktop
+    update-mime-database /usr/share/applications/

+ 9 - 0
contrib/xdg-scheme-handler/gnunet-uri.desktop

@@ -0,0 +1,9 @@
+[Desktop Entry]
+Name=GNUnet URI
+Exec=gnunet-uri %u
+GenericName=URI handler for the GNUnet network
+Icon=gnunet
+Type=Application
+Terminal=false
+NoDisplay=true
+MimeType=x-scheme-handler/gnunet;

+ 18 - 7
doc/man/gnunet-config.1

@@ -26,33 +26,44 @@
 .Os
 .Sh NAME
 .Nm gnunet-config
-.Nd manipulate GNUnet configuration files
+.Nd manipulate GNUnet configuration files and provide information on how GNUnet was built
 .Sh SYNOPSIS
 .Nm
 .Op Fl b Ar BACKEND | Fl -supported-backend= Ns Ar BACKEND
+.Op Fl C | -cflags
 .Op Fl c Ar FILENAME | Fl -config= Ns Ar FILENAME
+.Op Fl F | -full
 .Op Fl f | -filename
 .Op Fl h | -help
+.Op Fl j | -libs
 .Op Fl L Ar LOGLEVEL | Fl -loglevel= Ns Ar LOGLEVEL
 .Op Fl o Ar OPTION | Fl -option= Ns Ar OPTION
+.Op Fl p | -prefix
+.Op Fl r | -rewrite
 .Op Fl S |-list-sections
 .Op Fl s Ar SECTION | Fl -section= Ns Ar SECTION
 .Op Fl V Ar VALUE | Fl -value Ar VALUE
 .Op Fl v | -version
-.Op Fl r | -rewrite
-.Op Fl F | -full
 .Sh DESCRIPTION
 .Nm
 can be used to read or modify GNUnet configuration files.
+It can also provide informations to properly build applications on top of
+GNUnet, like appropriate values for CFLAGS or the installation prefix.
 .Bl -tag -width indent
 .It Fl b Ar BACKEND | Fl -supported-backend= Ns Ar BACKEND
 Tests whether the specified BACKEND is supported by the current installation.  The backend must match the name of a plugin, e.g. "namestore_postgres" for the Postgres database backend of the "NAMESTORE" service. If the BACKEND is supported, gnunet-config will return a status code of 0 (success), otherwise 77 (unsupported).  When this option is specified, no other options may be specified. Specifying this option together with other options will cause gnunet-config to return a status code of 1 (error).
+.It Fl C | -cflags
+Print an appropriate value for CFLAGS to compile applications on top of GNUnet.
 .It Fl c Ar FILENAME | Fl -config= Ns Ar FILENAME
 Use the configuration file FILENAME.
+.It Fl F | -full
+Write the full configuration, not just the deltas to the defaults.
 .It Fl f | -filename
 Try to perform expansions as if the option values represent filenames (will also be applied even if the option is not really a filename).
 .It Fl h | -help
 Print short help on options.
+.It Fl j | -libs
+Print an appropriate value for LIBS to compile applications on top of GNUnet.
 .It Fl L Ar LOGLEVEL | Fl -loglevel= Ns Ar LOGLEVEL
 Use LOGLEVEL for logging.
 Valid values are DEBUG, INFO, WARNING and ERROR.
@@ -60,6 +71,10 @@ Valid values are DEBUG, INFO, WARNING and ERROR.
 Which configuration option should be accessed or edited.
 Required to set a value.
 If not given, all values of a given section will be printed in the format "OPTION = VALUE".
+.It Fl p | -prefix
+Print GNUnet's installation prefix (for example /usr/local.)
+.It Fl r | -rewrite
+Write the configuration to file, even if it did not change.
 .It Fl S |-list-sections
 List available configuration sections for use with --section.
 .It Fl s Ar SECTION | Fl -section= Ns Ar SECTION
@@ -70,10 +85,6 @@ Configuration value to store in the given section under the given option.
 Must only be given together with -s and -o options.
 .It Fl v | -version
 Print GNUnet version number.
-.It Fl r | -rewrite
-Write the configuration to file, even if it did not change.
-.It Fl F | -full
-Write the full configuration, not just the deltas to the defaults.
 .El
 .Sh SEE ALSO
 The full documentation for gnunet is maintained as a Texinfo manual.

+ 0 - 1
po/POTFILES.in

@@ -443,7 +443,6 @@ src/testing/testing_api_loop.c
 src/testing/testing_api_trait_cmd.c
 src/testing/testing_api_trait_process.c
 src/testing/testing_api_traits.c
-src/testing/testing_json_vnet.c
 src/topology/friends.c
 src/topology/gnunet-daemon-topology.c
 src/transport/gnunet-communicator-tcp.c

+ 12 - 0
src/dhtu/Makefile.am

@@ -11,6 +11,7 @@ if USE_COVERAGE
 endif
 
 plugin_LTLIBRARIES = \
+  libgnunet_plugin_dhtu_gnunet.la \
   libgnunet_plugin_dhtu_ip.la
 
 libgnunet_plugin_dhtu_ip_la_SOURCES = \
@@ -22,3 +23,14 @@ libgnunet_plugin_dhtu_ip_la_LIBADD = \
 libgnunet_plugin_dhtu_ip_la_LDFLAGS = \
  $(GN_PLUGIN_LDFLAGS)
 
+
+
+libgnunet_plugin_dhtu_gnunet_la_SOURCES = \
+  plugin_dhtu_gnunet.c
+libgnunet_plugin_dhtu_gnunet_la_LIBADD = \
+  $(top_builddir)/src/core/libgnunetcore.la \
+  $(top_builddir)/src/util/libgnunetutil.la \
+  $(XLIBS) \
+  $(LTLIBINTL)
+libgnunet_plugin_dhtu_gnunet_la_LDFLAGS = \
+ $(GN_PLUGIN_LDFLAGS)

+ 142 - 21
src/dhtu/plugin_dhtu_gnunet.c

@@ -21,11 +21,44 @@
 /**
  * @author Christian Grothoff
  *
- * @file plugin_dhtu_ip.c
+ * @file plugin_dhtu_gnunet.c
  * @brief plain IP based DHT network underlay
  */
 #include "platform.h"
-#incluce "gnunet_dhtu_plugin.h"
+#include "gnunet_dhtu_plugin.h"
+#include "gnunet_core_service.h"
+
+/**
+ * Handle for a private key used by this underlay.
+ */
+struct GNUNET_DHTU_PrivateKey
+{
+  /**
+   * GNUnet uses eddsa for peers.
+   */
+  struct GNUNET_CRYPTO_EddsaPrivateKey eddsa_priv;
+
+};
+
+
+/**
+ * Handle for a public key used by this underlay.
+ */
+struct PublicKey
+{
+
+  /**
+   * Header.
+   */
+  struct GNUNET_DHTU_PublicKey header;
+
+  /**
+   * GNUnet uses eddsa for peers.
+   */
+  struct GNUNET_CRYPTO_EddsaPublicKey eddsa_pub;
+
+};
+
 
 /**
  * Opaque handle that the underlay offers for our address to be used when
@@ -47,7 +80,7 @@ struct GNUNET_DHTU_Source
  */
 struct GNUNET_DHTU_Target
 {
-  
+
   /**
    * Application context for this target.
    */
@@ -93,24 +126,21 @@ struct GNUNET_DHTU_PreferenceHandle
 };
 
 
-/**
- * Opaque handle for a private key used by this underlay.
- */
-struct GNUNET_DHTU_PrivateKey
-{
-  /* we are IP, we do not do crypto */
-};
-
-
 /**
  * Closure for all plugin functions.
  */
 struct Plugin
 {
-  /** 
+  /**
    * Callbacks into the DHT.
    */
   struct GNUNET_DHTU_PluginEnvironment *env;
+
+  /**
+   * Handle to the CORE service.
+   */
+  struct GNUNET_CORE_Handle *core;
+  
 };
 
 
@@ -126,10 +156,17 @@ struct Plugin
 static ssize_t
 ip_sign (void *cls,
          const struct GNUNET_DHTU_PrivateKey *pk,
-         const struct GNUNET_DHTU_SignaturePurpose *purpose,
+         const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose,
          void **sig)
 {
-  return 0;
+  struct GNUNET_CRYPTO_EddsaSignature *es;
+
+  es = GNUNET_new (struct GNUNET_CRYPTO_EddsaSignature);
+  GNUNET_CRYPTO_eddsa_sign_ (&pk->eddsa_priv,
+                             purpose,
+                             es);
+  *sig = es;
+  return sizeof (*es);
 }
 
 
@@ -148,11 +185,31 @@ ip_sign (void *cls,
 static enum GNUNET_GenericReturnValue
 ip_verify (void *cls,
            const struct GNUNET_DHTU_PublicKey *pk,
-           const struct GNUNET_DHTU_SignaturePurpose *purpose,
+           const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose,
            const void *sig,
            size_t sig_size)
 {
-  return GNUNET_NO;
+  const struct GNUNET_CRYPTO_EddsaSignature *es = sig;
+  const struct PublicKey *pub;
+
+  GNUNET_assert (sizeof (struct PublicKey) ==
+                 ntohs (pk->size));
+  pub = (const struct PublicKey *) pk;
+  if (sizeof (*es) != sig_size)
+  {
+    GNUNET_break_op (0);
+    return GNUNET_SYSERR;
+  }
+  if (GNUNET_OK !=
+      GNUNET_CRYPTO_eddsa_verify_ (ntohl (purpose->purpose),
+                                   purpose,
+                                   es,
+                                   &pub->eddsa_pub))
+  {
+    GNUNET_break_op (0);
+    return GNUNET_SYSERR;
+  }
+  return GNUNET_OK;
 }
 
 
@@ -174,7 +231,7 @@ ip_try_connect (void *cls,
  * Request underlay to keep the connection to @a target alive if possible.
  * Hold may be called multiple times to express a strong preference to
  * keep a connection, say because a @a target is in multiple tables.
- * 
+ *
  * @param cls closure
  * @param target connection to keep alive
  */
@@ -196,7 +253,7 @@ ip_hold (void *cls,
 
 /**
  * Do no long request underlay to keep the connection alive.
- * 
+ *
  * @param cls closure
  * @param target connection to keep alive
  */
@@ -204,7 +261,7 @@ static void
 ip_drop (struct GNUNET_DHTU_PreferenceHandle *ph)
 {
   struct GNUNET_DHTU_Target *target = ph->target;
-  
+
   GNUNET_CONTAINER_DLL_remove (target->ph_head,
                                target->ph_tail,
                                ph);
@@ -225,7 +282,7 @@ ip_drop (struct GNUNET_DHTU_PreferenceHandle *ph)
  * @param msg_size number of bytes in @a msg
  * @param finished_cb function called once transmission is done
  *        (not called if @a target disconnects, then only the
- *         disconnect_cb is called). 
+ *         disconnect_cb is called).
  * @param finished_cb_cls closure for @a finished_cb
  */
 static void
@@ -240,6 +297,60 @@ ip_send (void *cls,
 }
 
 
+
+/**
+ * Method called whenever a given peer connects.
+ *
+ * @param cls closure
+ * @param peer peer identity this notification is about
+ * @return closure associated with @a peer. given to mq callbacks and
+ *         #GNUNET_CORE_DisconnectEventHandler
+ */
+static void *
+core_connect_cb (void *cls,
+                 const struct GNUNET_PeerIdentity *peer,
+                 struct GNUNET_MQ_Handle *mq)
+{
+  return NULL;
+}
+
+
+/**
+ * Method called whenever a peer disconnects.
+ *
+ * @param cls closure
+ * @param peer peer identity this notification is about
+ * @param peer_cls closure associated with peer. given in
+ *        #GNUNET_CORE_ConnectEventHandler
+ */
+static void
+core_disconnect_cb (void *cls,
+                    const struct GNUNET_PeerIdentity *peer,
+                    void *peer_cls)
+{
+}
+
+
+/**
+ * Function called after #GNUNET_CORE_connect has succeeded (or failed
+ * for good).  Note that the private key of the peer is intentionally
+ * not exposed here; if you need it, your process should try to read
+ * the private key file directly (which should work if you are
+ * authorized...).  Implementations of this function must not call
+ * #GNUNET_CORE_disconnect (other than by scheduling a new task to
+ * do this later).
+ *
+ * @param cls closure
+ * @param my_identity ID of this peer, NULL if we failed
+ */
+static void
+core_init_cb (void *cls,
+              const struct GNUNET_PeerIdentity *my_identity)
+{
+  struct Plugin *plugin = cls;
+}
+
+
 /**
  * Entry point for the plugin.
  *
@@ -252,6 +363,9 @@ libgnunet_plugin_dhtu_ip_init (void *cls)
   struct GNUNET_DHTU_PluginEnvironment *env = cls;
   struct GNUNET_DHTU_PluginFunctions *api;
   struct Plugin *plugin;
+  struct GNUNET_MQ_MessageHandler handlers[] = {
+    GNUNET_MQ_handler_end ()
+  };
 
   plugin = GNUNET_new (struct Plugin);
   plugin->env = env;
@@ -263,6 +377,12 @@ libgnunet_plugin_dhtu_ip_init (void *cls)
   api->hold = &ip_hold;
   api->drop = &ip_drop;
   api->send = &ip_send;
+  plugin->core = GNUNET_CORE_connect (env->cfg,
+                                      plugin,
+                                      &core_init_cb,
+                                      &core_connect_cb,
+                                      &core_disconnect_cb,
+                                      handlers);
   return api;
 }
 
@@ -279,6 +399,7 @@ libgnunet_plugin_dhtu_gnunet_done (void *cls)
   struct GNUNET_DHTU_PluginFunctions *api = cls;
   struct Plugin *plugin = api->cls;
 
+  GNUNET_CORE_disconnect (plugin->core);
   GNUNET_free (plugin);
   GNUNET_free (api);
   return NULL;

+ 2 - 2
src/dhtu/plugin_dhtu_ip.c

@@ -240,7 +240,7 @@ struct Plugin
 static ssize_t
 ip_sign (void *cls,
          const struct GNUNET_DHTU_PrivateKey *pk,
-         const struct GNUNET_DHTU_SignaturePurpose *purpose,
+         const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose,
          void **sig)
 {
   return 0;
@@ -262,7 +262,7 @@ ip_sign (void *cls,
 static enum GNUNET_GenericReturnValue
 ip_verify (void *cls,
            const struct GNUNET_DHTU_PublicKey *pk,
-           const struct GNUNET_DHTU_SignaturePurpose *purpose,
+           const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose,
            const void *sig,
            size_t sig_size)
 {

+ 4 - 4
src/include/gnunet_common.h

@@ -151,10 +151,10 @@ enum GNUNET_GenericReturnValue
  */
 
 #if __BYTE_ORDER == __LITTLE_ENDIAN
-#if defined(__linux__)
-#define BYTE_SWAP_16(x) __bswap_16 (x)
-#define BYTE_SWAP_32(x) __bswap_32 (x)
-#define BYTE_SWAP_64(x) __bswap_64 (x)
+#ifdef HAVE_BYTESWAP_H
+#define BYTE_SWAP_16(x) bswap_16 (x)
+#define BYTE_SWAP_32(x) bswap_32 (x)
+#define BYTE_SWAP_64(x) bswap_64 (x)
 #else
 #define BYTE_SWAP_16(x) ((((x) & 0x00ff) << 8) | (((x) & 0xff00) >> 8))
 

+ 15 - 39
src/include/gnunet_dhtu_plugin.h

@@ -75,42 +75,18 @@ struct GNUNET_DHTU_PublicKey
 
   /* followed by size-2 bytes of the actual public key */
 };
-  
+
 
 /**
  * Hash used by the DHT for keys and peers.
  */
 struct GNUNET_DHTU_Hash
 {
-  
-  /**
-   * For now, use a 512 bit hash. (To be discussed).
-   */ 
-  struct GNUNET_HashCode hc;
-};
-
 
-/**
- * @brief header of what an DHTU signature signs
- *        this must be followed by "size - 8" bytes of
- *        the actual signed data
- */
-struct GNUNET_DHTU_SignaturePurpose
-{
   /**
-   * How many bytes does this signature sign?
-   * (including this purpose header); in network
-   * byte order (!).
-   */
-  uint32_t size GNUNET_PACKED;
-
-  /**
-   * What does this signature vouch for?  This
-   * must contain a GNUNET_SIGNATURE_PURPOSE_XXX
-   * constant (from gnunet_signatures.h).  In
-   * network byte order!
+   * For now, use a 512 bit hash. (To be discussed).
    */
-  uint32_t purpose GNUNET_PACKED;
+  struct GNUNET_HashCode hc;
 };
 
 
@@ -131,7 +107,7 @@ struct GNUNET_DHTU_PluginEnvironment
    */
   void *cls;
 
-  /** 
+  /**
    * Function to call with new addresses of this peer.
    *
    * @param cls the closure
@@ -151,7 +127,7 @@ struct GNUNET_DHTU_PluginEnvironment
                     struct GNUNET_DHTU_Source *source,
                     void **ctx);
 
-  /** 
+  /**
    * Function to call with expired addresses of this peer.
    *
    * @param[in] ctx storage space used by the DHT in association with this address
@@ -160,7 +136,7 @@ struct GNUNET_DHTU_PluginEnvironment
   (*address_del_cb)(void *ctx);
 
   /**
-   * We have a new estimate on the size of the underlay. 
+   * We have a new estimate on the size of the underlay.
    *
    * @param cls closure
    * @param timestamp time when the estimate was received from the server (or created by the server)
@@ -172,7 +148,7 @@ struct GNUNET_DHTU_PluginEnvironment
                      struct GNUNET_TIME_Absolute timestamp,
                      double logestimate,
                      double std_dev);
-  
+
   /**
    * Function to call when we connect to a peer and can henceforth transmit to
    * that peer.
@@ -208,7 +184,7 @@ struct GNUNET_DHTU_PluginEnvironment
    * @param cls the closure
    * @param origin where the message originated from
    * @param[in,out] tctx ctx of target address where we received the message from
-   * @param[in,out] sctx ctx of our own source address at which we received the message 
+   * @param[in,out] sctx ctx of our own source address at which we received the message
    * @param message the message we received @param message_size number of
    * bytes in @a message
    */
@@ -244,7 +220,7 @@ struct GNUNET_DHTU_PluginFunctions
   ssize_t
   (*sign)(void *cls,
           const struct GNUNET_DHTU_PrivateKey *pk,
-          const struct GNUNET_DHTU_SignaturePurpose *purpose,
+          const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose,
           void **sig);
 
   /**
@@ -262,7 +238,7 @@ struct GNUNET_DHTU_PluginFunctions
   enum GNUNET_GenericReturnValue
   (*verify)(void *cls,
             const struct GNUNET_DHTU_PublicKey *pk,
-            const struct GNUNET_DHTU_SignaturePurpose *purpose,
+            const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose,
             const void *sig,
             size_t sig_size);
 
@@ -281,7 +257,7 @@ struct GNUNET_DHTU_PluginFunctions
    * Request underlay to keep the connection to @a target alive if possible.
    * Hold may be called multiple times to express a strong preference to
    * keep a connection, say because a @a target is in multiple tables.
-   * 
+   *
    * @param cls closure
    * @param target connection to keep alive
    */
@@ -291,13 +267,13 @@ struct GNUNET_DHTU_PluginFunctions
 
   /**
    * Do no long request underlay to keep the connection alive.
-   * 
+   *
    * @param cls closure
    * @param target connection to keep alive
    */
   void
   (*drop)(struct GNUNET_DHTU_PreferenceHandle *ph);
-  
+
   /**
    * Send message to some other participant over the network.  Note that
    * sending is not guaranteeing that the other peer actually received the
@@ -310,7 +286,7 @@ struct GNUNET_DHTU_PluginFunctions
    * @param msg_size number of bytes in @a msg
    * @param finished_cb function called once transmission is done
    *        (not called if @a target disconnects, then only the
-   *         disconnect_cb is called). 
+   *         disconnect_cb is called).
    * @param finished_cb_cls closure for @a finished_cb
    */
   void
@@ -320,7 +296,7 @@ struct GNUNET_DHTU_PluginFunctions
            size_t msg_size,
            GNUNET_SCHEDULER_TaskCallback finished_cb,
            void *finished_cb_cls);
- 
+
 };
 
 

+ 4 - 3
src/include/gnunet_hello_lib.h

@@ -268,9 +268,10 @@ GNUNET_HELLO_add_address (const struct GNUNET_HELLO_Address *address,
  * @return number of bytes written or 0, #GNUNET_SYSERR to signal the
  *         end of the iteration.
  */
-typedef ssize_t (*GNUNET_HELLO_GenerateAddressListCallback) (void *cls,
-                                                             size_t max,
-                                                             void *buf);
+typedef ssize_t
+(*GNUNET_HELLO_GenerateAddressListCallback) (void *cls,
+                                             size_t max,
+                                             void *buf);
 
 
 /**

+ 13 - 8
src/include/gnunet_mq_lib.h

@@ -331,9 +331,10 @@ typedef int (*GNUNET_MQ_MessageValidationCallback) (
  * @param msg the message to send
  * @param impl_state state of the implementation
  */
-typedef void (*GNUNET_MQ_SendImpl) (struct GNUNET_MQ_Handle *mq,
-                                    const struct GNUNET_MessageHeader *msg,
-                                    void *impl_state);
+typedef void
+(*GNUNET_MQ_SendImpl) (struct GNUNET_MQ_Handle *mq,
+                       const struct GNUNET_MessageHeader *msg,
+                       void *impl_state);
 
 
 /**
@@ -345,8 +346,9 @@ typedef void (*GNUNET_MQ_SendImpl) (struct GNUNET_MQ_Handle *mq,
  * @param mq the message queue to destroy
  * @param impl_state state of the implementation
  */
-typedef void (*GNUNET_MQ_DestroyImpl) (struct GNUNET_MQ_Handle *mq,
-                                       void *impl_state);
+typedef void
+(*GNUNET_MQ_DestroyImpl) (struct GNUNET_MQ_Handle *mq,
+                          void *impl_state);
 
 
 /**
@@ -355,8 +357,9 @@ typedef void (*GNUNET_MQ_DestroyImpl) (struct GNUNET_MQ_Handle *mq,
  * @param mq message queue
  * @param impl_state state specific to the implementation
  */
-typedef void (*GNUNET_MQ_CancelImpl) (struct GNUNET_MQ_Handle *mq,
-                                      void *impl_state);
+typedef void
+(*GNUNET_MQ_CancelImpl) (struct GNUNET_MQ_Handle *mq,
+                         void *impl_state);
 
 
 /**
@@ -368,7 +371,9 @@ typedef void (*GNUNET_MQ_CancelImpl) (struct GNUNET_MQ_Handle *mq,
  * @param cls closure
  * @param error error code
  */
-typedef void (*GNUNET_MQ_ErrorHandler) (void *cls, enum GNUNET_MQ_Error error);
+typedef void
+(*GNUNET_MQ_ErrorHandler) (void *cls,
+                           enum GNUNET_MQ_Error error);
 
 
 /**

+ 14 - 7
src/include/gnunet_transport_service.h

@@ -115,7 +115,8 @@ struct GNUNET_TRANSPORT_AddressToStringContext;
  *        if #GNUNET_NO: address was invalid (or not supported)
  *        if #GNUNET_SYSERR: communication error (IPC error)
  */
-typedef void (*GNUNET_TRANSPORT_AddressToStringCallback) (void *cls,
+typedef void
+(*GNUNET_TRANSPORT_AddressToStringCallback) (void *cls,
                                                           const char *address,
                                                           int res);
 
@@ -326,7 +327,8 @@ struct GNUNET_TRANSPORT_PeerMonitoringContext;
  * @param state current state this peer is in
  * @param state_timeout timeout for the current state of the peer
  */
-typedef void (*GNUNET_TRANSPORT_PeerIterateCallback) (
+typedef void
+(*GNUNET_TRANSPORT_PeerIterateCallback) (
   void *cls,
   const struct GNUNET_PeerIdentity *peer,
   const struct GNUNET_HELLO_Address *address,
@@ -394,7 +396,8 @@ struct GNUNET_TRANSPORT_Blacklist;
  * @param pid peer to approve or disapproave
  * @return #GNUNET_OK if the connection is allowed, #GNUNET_SYSERR if not
  */
-typedef int (*GNUNET_TRANSPORT_BlacklistCallback) (
+typedef int
+(*GNUNET_TRANSPORT_BlacklistCallback) (
   void *cls,
   const struct GNUNET_PeerIdentity *pid);
 
@@ -541,7 +544,8 @@ struct GNUNET_TRANSPORT_SessionInfo
  *        NULL with @a session being non-NULL if the monitor
  *        was being cancelled while sessions were active
  */
-typedef void (*GNUNET_TRANSPORT_SessionMonitorCallback) (
+typedef void
+(*GNUNET_TRANSPORT_SessionMonitorCallback) (
   void *cls,
   struct GNUNET_TRANSPORT_PluginSession *session,
   void **session_ctx,
@@ -593,7 +597,8 @@ struct GNUNET_TRANSPORT_CoreHandle;
  * @param mq message queue to use to transmit to @a peer
  * @return closure to use in MQ handlers
  */
-typedef void *(*GNUNET_TRANSPORT_NotifyConnect) (
+typedef void *
+(*GNUNET_TRANSPORT_NotifyConnect) (
   void *cls,
   const struct GNUNET_PeerIdentity *peer,
   struct GNUNET_MQ_Handle *mq);
@@ -610,7 +615,8 @@ typedef void *(*GNUNET_TRANSPORT_NotifyConnect) (
  * @param handlers_cls closure of the handlers, was returned from the
  *                    connect notification callback
  */
-typedef void (*GNUNET_TRANSPORT_NotifyDisconnect) (
+typedef void
+(*GNUNET_TRANSPORT_NotifyDisconnect) (
   void *cls,
   const struct GNUNET_PeerIdentity *peer,
   void *handler_cls);
@@ -632,7 +638,8 @@ typedef void (*GNUNET_TRANSPORT_NotifyDisconnect) (
  * @param handlers_cls closure of the handlers, was returned from the
  *                    connect notification callback
  */
-typedef void (*GNUNET_TRANSPORT_NotifyExcessBandwidth) (
+typedef void
+(*GNUNET_TRANSPORT_NotifyExcessBandwidth) (
   void *cls,
   const struct GNUNET_PeerIdentity *neighbour,
   void *handlers_cls);

+ 1 - 1
src/transport/test_transport_port_forward.c

@@ -21,7 +21,7 @@
 /**
  * @file transport/test_transport_port_forward.c
  * @brief Test case executing a script which sends a test UDP message from a nated peer
- *        to a gloabl known peer. There is a tcp port forwarding in place towards the
+ *        to a global known peer. There is a tcp port forwarding in place towards the
  *        natted peer to test the backchannel functionality of the TNG service.
  * @author t3sserakt
  */

+ 59 - 0
src/util/gnunet-config.c

@@ -36,6 +36,25 @@ static char *backend_check;
 
 
 /**
+ * If printing the value of CFLAGS has been requested.
+ */
+static int cflags;
+
+
+/**
+ * If printing the value of LIBS has been requested.
+ */
+static int libs;
+
+
+/**
+ * If printing the value of PREFIX has been requested.
+ */
+static int prefix;
+
+
+/**
+ * Print each option in a given section.
  * Main task to run to perform operations typical for
  * gnunet-config as per the configuration settings
  * given in @a cls.
@@ -54,6 +73,28 @@ run (void *cls,
 {
   struct GNUNET_CONFIGURATION_ConfigSettings *cs = cls;
 
+  if (1 == cflags || 1 == libs || 1 == prefix)
+  {
+    char *prefixdir = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_PREFIX);
+    char *libdir = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_LIBDIR);
+
+    if (1 == cflags)
+    {
+      fprintf (stdout, "-I%sinclude\n", prefixdir);
+    }
+    if (1 == libs)
+    {
+      fprintf (stdout, "-L%s -lgnunetutil\n", libdir);
+    }
+    if (1 == prefix)
+    {
+      fprintf (stdout, "%s\n", prefixdir);
+    }
+    cs->global_ret = 0;
+    GNUNET_free (prefixdir);
+    GNUNET_free (libdir);
+    return;
+  }
   if (NULL != backend_check)
   {
     char *name;
@@ -97,6 +138,24 @@ main (int argc,
         gettext_noop (
           "test if the current installation supports the specified BACKEND"),
         &backend_check)),
+    GNUNET_GETOPT_option_flag (
+      'C',
+      "cflags",
+      gettext_noop (
+        "Provide an appropriate value for CFLAGS to applications building on top of GNUnet"),
+      &cflags),
+    GNUNET_GETOPT_option_flag (
+      'j',
+      "libs",
+      gettext_noop (
+        "Provide an appropriate value for LIBS to applications building on top of GNUnet"),
+      &libs),
+    GNUNET_GETOPT_option_flag (
+      'p',
+      "prefix",
+      gettext_noop (
+        "Provide the path under which GNUnet was installed"),
+      &prefix),
     GNUNET_CONFIGURATION_CONFIG_OPTIONS (&cs),
     GNUNET_GETOPT_OPTION_END
   };