gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [gnunet] branch master updated (936310786 -> d8a11aace)


From: gnunet
Subject: [GNUnet-SVN] [gnunet] branch master updated (936310786 -> d8a11aace)
Date: Wed, 13 Feb 2019 00:53:26 +0100

This is an automated email from the git hooks/post-receive script.

grothoff pushed a change to branch master
in repository gnunet.

    from 936310786 fixing 'make dist' issues
     new 789340811 fixing 'make dist' issues
     new 9f3172d55 fixing 'make dist' issues
     new d8a11aace add more missing EXTRA_DISTs and remove dv (to be integrated 
with transport in TNG)

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 configure.ac                              |    1 -
 pkgconfig/Makefile.am                     |    1 -
 pkgconfig/gnunetdv.pc.in                  |   12 -
 src/ats/Makefile.am                       |    2 +
 src/dv/.gitignore                         |    2 -
 src/dv/Makefile.am                        |  100 --
 src/dv/dv.conf.in                         |   15 -
 src/dv/dv.h                               |  172 ---
 src/dv/dv_api.c                           |  467 -------
 src/dv/gnunet-dv.c                        |  185 ---
 src/dv/gnunet-service-dv.c                | 2146 -----------------------------
 src/dv/plugin_transport_dv.c              |  910 ------------
 src/dv/template_dv.conf                   |   33 -
 src/dv/test_transport_blacklist.c         |   69 -
 src/dv/test_transport_blacklist_data.conf |    5 -
 src/dv/test_transport_dv.c                |  131 --
 src/dv/test_transport_dv_data.conf        |   19 -
 src/gns/test_gns_nick_shorten.conf        |   24 -
 src/include/Makefile.am                   |    1 +
 src/peerstore/Makefile.am                 |    4 +-
 src/testing/Makefile.am                   |    3 +-
 src/transport/Makefile.am                 |    3 +-
 22 files changed, 10 insertions(+), 4295 deletions(-)
 delete mode 100644 pkgconfig/gnunetdv.pc.in
 delete mode 100644 src/dv/.gitignore
 delete mode 100644 src/dv/Makefile.am
 delete mode 100644 src/dv/dv.conf.in
 delete mode 100644 src/dv/dv.h
 delete mode 100644 src/dv/dv_api.c
 delete mode 100644 src/dv/gnunet-dv.c
 delete mode 100644 src/dv/gnunet-service-dv.c
 delete mode 100644 src/dv/plugin_transport_dv.c
 delete mode 100644 src/dv/template_dv.conf
 delete mode 100644 src/dv/test_transport_blacklist.c
 delete mode 100644 src/dv/test_transport_blacklist_data.conf
 delete mode 100644 src/dv/test_transport_dv.c
 delete mode 100644 src/dv/test_transport_dv_data.conf
 delete mode 100644 src/gns/test_gns_nick_shorten.conf

diff --git a/configure.ac b/configure.ac
index 14360284a..f53d65006 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1833,7 +1833,6 @@ pkgconfig/gnunetdatacache.pc
 pkgconfig/gnunetdatastore.pc
 pkgconfig/gnunetdht.pc
 pkgconfig/gnunetdns.pc
-pkgconfig/gnunetdv.pc
 pkgconfig/gnunetenv.pc
 pkgconfig/gnunetfragmentation.pc
 pkgconfig/gnunetfs.pc
diff --git a/pkgconfig/Makefile.am b/pkgconfig/Makefile.am
index 755d680df..9ff682bd8 100644
--- a/pkgconfig/Makefile.am
+++ b/pkgconfig/Makefile.am
@@ -10,7 +10,6 @@ pcfiles = \
        gnunetdatastore.pc \
        gnunetdht.pc \
        gnunetdns.pc \
-       gnunetdv.pc \
        gnunetenv.pc \
        gnunetfragmentation.pc \
        gnunetfs.pc \
diff --git a/pkgconfig/gnunetdv.pc.in b/pkgconfig/gnunetdv.pc.in
deleted file mode 100644
index bd5bd4278..000000000
--- a/pkgconfig/gnunetdv.pc.in
+++ /dev/null
@@ -1,12 +0,0 @@
address@hidden@
address@hidden@
address@hidden@
address@hidden@
-
-Name: GNUnet dv
-Description: Library to access GNUnet DV service
-URL: http://gnunet.org
-Version: @VERSION@
-Requires:
-Libs: -L${libdir} -lgnunetdv
-Cflags: -I${includedir}
diff --git a/src/ats/Makefile.am b/src/ats/Makefile.am
index 2a62d71bd..1200aac09 100644
--- a/src/ats/Makefile.am
+++ b/src/ats/Makefile.am
@@ -214,6 +214,8 @@ EXTRA_DIST = \
   ats.h ats2.h \
   plugin_ats2_common.c \
   test_delay \
+  test_ats2_lib.conf \
+  test_ats_api.conf \
   test_ats_api_mlp.conf \
   test_ats_api_ril.conf \
   test_ats_api_proportional.conf
diff --git a/src/dv/.gitignore b/src/dv/.gitignore
deleted file mode 100644
index b3068b1c4..000000000
--- a/src/dv/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-gnunet-service-dv
-gnunet-dv
diff --git a/src/dv/Makefile.am b/src/dv/Makefile.am
deleted file mode 100644
index c44321151..000000000
--- a/src/dv/Makefile.am
+++ /dev/null
@@ -1,100 +0,0 @@
-# This Makefile.am is in the public domain
-AM_CPPFLAGS = -I$(top_srcdir)/src/include
-
-if MINGW
- WINFLAGS = -Wl,--no-undefined -Wl,--export-all-symbols 
-endif
-
-if USE_COVERAGE
-  AM_CFLAGS = --coverage -O0
-  XLIB = -lgcov
-endif
-
-plugindir = $(libdir)/gnunet
-
-libexecdir= $(pkglibdir)/libexec/
-
-pkgcfgdir= $(pkgdatadir)/config.d/
-
-pkgcfg_DATA = \
-  dv.conf
-
-lib_LTLIBRARIES = libgnunetdv.la
-
-plugin_LTLIBRARIES = libgnunet_plugin_transport_dv.la
-
-libgnunetdv_la_SOURCES = \
-  dv_api.c dv.h 
-libgnunetdv_la_LIBADD = \
-  $(top_builddir)/src/util/libgnunetutil.la \
-  $(GN_LIBINTL) $(XLIB)
-libgnunetdv_la_LDFLAGS = \
-  $(GN_LIB_LDFLAGS)  $(WINFLAGS) \
-  -version-info 0:0:0
-
-
-noinst_PROGRAMS = \
- gnunet-dv
-
-libexec_PROGRAMS = \
- gnunet-service-dv
-
-gnunet_service_dv_SOURCES = \
- gnunet-service-dv.c dv.h
-gnunet_service_dv_LDADD = \
-  $(top_builddir)/src/ats/libgnunetats.la \
-  $(top_builddir)/src/set/libgnunetset.la \
-  $(top_builddir)/src/statistics/libgnunetstatistics.la \
-  $(top_builddir)/src/core/libgnunetcore.la \
-  $(top_builddir)/src/util/libgnunetutil.la \
-  $(GN_LIBINTL)
-
-gnunet_dv_SOURCES = \
- gnunet-dv.c dv.h
-gnunet_dv_LDADD = \
-  libgnunetdv.la \
-  $(top_builddir)/src/util/libgnunetutil.la \
-  $(GN_LIBINTL)
-
-libgnunet_plugin_transport_dv_la_SOURCES = \
-  plugin_transport_dv.c
-libgnunet_plugin_transport_dv_la_LIBADD = \
-  libgnunetdv.la \
-  $(top_builddir)/src/ats/libgnunetats.la \
-  $(top_builddir)/src/hello/libgnunethello.la \
-  $(top_builddir)/src/util/libgnunetutil.la 
-libgnunet_plugin_transport_dv_la_LDFLAGS = \
- $(GN_PLUGIN_LDFLAGS)
-
-if HAVE_TESTING
-check_PROGRAMS = \
- test_transport_blacklist \
- test_transport_dv
-endif
-
-if ENABLE_TEST_RUN
- AM_TESTS_ENVIRONMENT=export 
GNUNET_PREFIX=$${GNUNET_PREFIX:address@hidden@};export 
PATH=$${GNUNET_PREFIX:address@hidden@}/bin:$$PATH;unset XDG_DATA_HOME;unset 
XDG_CONFIG_HOME;
- TESTS = $(check_PROGRAMS) 
-endif
-
-test_transport_dv_SOURCES = \
- test_transport_dv.c
-test_transport_dv_LDADD = \
- $(top_builddir)/src/testbed/libgnunettestbed.la \
- $(top_builddir)/src/core/libgnunetcore.la \
- $(top_builddir)/src/transport/libgnunettransport.la \
- $(top_builddir)/src/util/libgnunetutil.la 
-
-test_transport_blacklist_SOURCES = \
- test_transport_blacklist.c
-test_transport_blacklist_LDADD = \
- $(top_builddir)/src/testbed/libgnunettestbed.la \
- $(top_builddir)/src/core/libgnunetcore.la \
- $(top_builddir)/src/transport/libgnunettransport.la \
- $(top_builddir)/src/util/libgnunetutil.la 
-
-EXTRA_DIST = \
-  test_transport_dv_data.conf \
-  test_transport_blacklist_data.conf \
-  template_dv.conf
-
diff --git a/src/dv/dv.conf.in b/src/dv/dv.conf.in
deleted file mode 100644
index 145c58be6..000000000
--- a/src/dv/dv.conf.in
+++ /dev/null
@@ -1,15 +0,0 @@
-[dv]
-START_ON_DEMAND = @START_ON_DEMAND@
-ACCEPT_FROM6 = ::1;
-ACCEPT_FROM = 127.0.0.1;
-BINARY = gnunet-service-dv
-HOSTNAME = localhost
address@hidden@ PORT = 2571
-UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-service-dv.sock
-UNIX_MATCH_UID = YES
-UNIX_MATCH_GID = YES
-# ACCEPT_FROM =
-# ACCEPT_FROM6 =
-# REJECT_FROM =
-# REJECT_FROM6 =
-# BINDTO =
diff --git a/src/dv/dv.h b/src/dv/dv.h
deleted file mode 100644
index b85d9c33f..000000000
--- a/src/dv/dv.h
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2013 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     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
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @author Christian Grothoff
- * @file dv/dv.h
- * @brief IPC messages between DV service and DV plugin
- */
-#ifndef DV_H
-#define DV_H
-
-#include "gnunet_common.h"
-
-GNUNET_NETWORK_STRUCT_BEGIN
-
-/**
- * DV service tells plugin about a DV-connection being
- * now available.
- */
-struct GNUNET_DV_ConnectMessage
-{
-  /**
-   * Type: #GNUNET_MESSAGE_TYPE_DV_CONNECT
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * The distance to the peer that we are now connected to
-   */
-  uint32_t distance GNUNET_PACKED;
-
-  /**
-   * The other peer (at the given distance).
-   */
-  struct GNUNET_PeerIdentity peer;
-
-  /**
-   * The network the peer is in
-   */
-  uint32_t network GNUNET_PACKED;
-
-};
-
-
-/**
- * DV service tells plugin about a DV-connection being
- * no longer available.
- *
- * Sender address is copied to the end of this struct,
- * followed by the actual message received.
- */
-struct GNUNET_DV_DisconnectMessage
-{
-  /**
-   * Type: #GNUNET_MESSAGE_TYPE_DV_DISCONNECT
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Always zero.
-   */
-  uint32_t reserved GNUNET_PACKED;
-
-  /**
-   * The peer that is no longer available.
-   */
-  struct GNUNET_PeerIdentity peer;
-
-};
-
-
-/**
- * DV Message, contains a message that was received via DV for this
- * peer.  Send from the DV service to the DV plugin.
- *
- * Sender address is copied to the end of this struct,
- * followed by the actual message received.
- */
-struct GNUNET_DV_ReceivedMessage
-{
-  /**
-   * Type: #GNUNET_MESSAGE_TYPE_DV_RECV
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * The distance to the peer that we received the message from
-   */
-  uint32_t distance GNUNET_PACKED;
-
-  /**
-   * The (actual) sender of the message
-   */
-  struct GNUNET_PeerIdentity sender;
-
-  /* payload follows */
-};
-
-
-/**
- * Message from plugin to DV service, requesting a
- * message to be routed.
- */
-struct GNUNET_DV_SendMessage
-{
-  /**
-   * Type: #GNUNET_MESSAGE_TYPE_DV_SEND
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Reserved for alignment. 0.
-   */
-  uint32_t reserved GNUNET_PACKED;
-
-  /**
-   * The (actual) target of the message
-   */
-  struct GNUNET_PeerIdentity target;
-
-};
-
-
-/**
- * Message from service to DV plugin, saying that our
- * distance to another peer changed.
- */
-struct GNUNET_DV_DistanceUpdateMessage
-{
-  /**
-   * Type: #GNUNET_MESSAGE_TYPE_DV_DISTANCE_CHANGED.
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * What is the new distance?
-   */
-  uint32_t distance GNUNET_PACKED;
-
-  /**
-   * The peer for which the distance changed.
-   */
-  struct GNUNET_PeerIdentity peer;
-
-  /**
-   * The network the peer is in
-   */
-  uint32_t network GNUNET_PACKED;
-
-};
-
-
-GNUNET_NETWORK_STRUCT_END
-
-#endif
diff --git a/src/dv/dv_api.c b/src/dv/dv_api.c
deleted file mode 100644
index dd46ce9f5..000000000
--- a/src/dv/dv_api.c
+++ /dev/null
@@ -1,467 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2009--2013, 2016 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     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
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @file dv/dv_api.c
- * @brief library to access the DV service
- * @author Christian Grothoff
- * @author Nathan Evans
- */
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_dv_service.h"
-#include "gnunet_protocols.h"
-#include "dv.h"
-#include "gnunet_transport_plugin.h"
-
-#define LOG(kind,...) GNUNET_log_from (kind, "dv-api",__VA_ARGS__)
-
-
-/**
- * Information we track for each peer.
- */
-struct ConnectedPeer
-{
-
-  /**
-   * Identity of the peer.
-   */
-  struct GNUNET_PeerIdentity pid;
-
-};
-
-
-/**
- * Handle to the DV service.
- */
-struct GNUNET_DV_ServiceHandle
-{
-
-  /**
-   * Connection to DV service.
-   */
-  struct GNUNET_MQ_Handle *mq;
-
-  /**
-   * Our configuration.
-   */
-  const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-  /**
-   * Closure for the callbacks.
-   */
-  void *cls;
-
-  /**
-   * Function to call on connect events.
-   */
-  GNUNET_DV_ConnectCallback connect_cb;
-
-  /**
-   * Function to call on distance change events.
-   */
-  GNUNET_DV_DistanceChangedCallback distance_cb;
-
-  /**
-   * Function to call on disconnect events.
-   */
-  GNUNET_DV_DisconnectCallback disconnect_cb;
-
-  /**
-   * Function to call on receiving messages events.
-   */
-  GNUNET_DV_MessageReceivedCallback message_cb;
-
-  /**
-   * Information tracked per connected peer.  Maps peer
-   * identities to `struct ConnectedPeer` entries.
-   */
-  struct GNUNET_CONTAINER_MultiPeerMap *peers;
-
-};
-
-
-/**
- * Disconnect and then reconnect to the DV service.
- *
- * @param sh service handle
- */
-static void
-reconnect (struct GNUNET_DV_ServiceHandle *sh);
-
-
-/**
- * We got disconnected from the service and thus all of the
- * connections need to be torn down.
- *
- * @param cls the `struct GNUNET_DV_ServiceHandle`
- * @param key a peer identity
- * @param value a `struct ConnectedPeer` to clean up
- * @return #GNUNET_OK (continue to iterate)
- */
-static int
-cleanup_send_cb (void *cls,
-                const struct GNUNET_PeerIdentity *key,
-                void *value)
-{
-  struct GNUNET_DV_ServiceHandle *sh = cls;
-  struct ConnectedPeer *peer = value;
-
-  GNUNET_assert (GNUNET_YES ==
-                GNUNET_CONTAINER_multipeermap_remove (sh->peers,
-                                                      key,
-                                                      peer));
-  sh->disconnect_cb (sh->cls,
-                     key);
-  GNUNET_free (peer);
-  return GNUNET_OK;
-}
-
-
-/**
- * Handles a message sent from the DV service to us.
- * Parse it out and give it to the plugin.
- *
- * @param cls the handle to the DV API
- * @param cm the message that was received
- */
-static void
-handle_connect (void *cls,
-                const struct GNUNET_DV_ConnectMessage *cm)
-{
-  struct GNUNET_DV_ServiceHandle *sh = cls;
-  struct ConnectedPeer *peer;
-
-  peer = GNUNET_CONTAINER_multipeermap_get (sh->peers,
-                                            &cm->peer);
-  if (NULL != peer)
-  {
-    GNUNET_break (0);
-    reconnect (sh);
-    return;
-  }
-  peer = GNUNET_new (struct ConnectedPeer);
-  peer->pid = cm->peer;
-  GNUNET_assert (GNUNET_OK ==
-                 GNUNET_CONTAINER_multipeermap_put (sh->peers,
-                                                    &peer->pid,
-                                                    peer,
-                                                    
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
-  sh->connect_cb (sh->cls,
-                  &cm->peer,
-                  ntohl (cm->distance),
-                  (enum GNUNET_NetworkType) ntohl (cm->network));
-}
-
-
-/**
- * Handles a message sent from the DV service to us.
- * Parse it out and give it to the plugin.
- *
- * @param cls the handle to the DV API
- * @param dm the message that was received
- */
-static void
-handle_disconnect (void *cls,
-                   const struct GNUNET_DV_DisconnectMessage *dm)
-{
-  struct GNUNET_DV_ServiceHandle *sh = cls;
-  struct ConnectedPeer *peer;
-
-  peer = GNUNET_CONTAINER_multipeermap_get (sh->peers,
-                                            &dm->peer);
-  if (NULL == peer)
-  {
-    GNUNET_break (0);
-    reconnect (sh);
-    return;
-  }
-  cleanup_send_cb (sh,
-                   &dm->peer,
-                   peer);
-}
-
-
-/**
- * Handles a message sent from the DV service to us.
- * Parse it out and give it to the plugin.
- *
- * @param cls the handle to the DV API
- * @param msg the message that was received
- */
-static void
-handle_distance_update (void *cls,
-                        const struct GNUNET_DV_DistanceUpdateMessage *dum)
-{
-  struct GNUNET_DV_ServiceHandle *sh = cls;
-  struct ConnectedPeer *peer;
-
-  peer = GNUNET_CONTAINER_multipeermap_get (sh->peers,
-                                            &dum->peer);
-  if (NULL == peer)
-  {
-    GNUNET_break (0);
-    reconnect (sh);
-    return;
-  }
-  sh->distance_cb (sh->cls,
-                   &dum->peer,
-                   ntohl (dum->distance),
-                   (enum GNUNET_NetworkType) ntohl (dum->network));
-}
-
-
-/**
- * Handles a message sent from the DV service to us.
- * Parse it out and give it to the plugin.
- *
- * @param cls the handle to the DV API
- * @param rm the message that was received
- */
-static int
-check_received (void *cls,
-                const struct GNUNET_DV_ReceivedMessage *rm)
-{
-  struct GNUNET_DV_ServiceHandle *sh = cls;
-  const struct GNUNET_MessageHeader *payload;
-
-  if (NULL ==
-      GNUNET_CONTAINER_multipeermap_get (sh->peers,
-                                         &rm->sender))
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  if (ntohs (rm->header.size) - sizeof (struct GNUNET_DV_ReceivedMessage) <
-      sizeof (*payload))
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  payload = (const struct GNUNET_MessageHeader *) &rm[1];
-  if (ntohs (rm->header.size) !=
-      sizeof (struct GNUNET_DV_ReceivedMessage) + ntohs (payload->size))
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  return GNUNET_OK;
-}
-
-
-/**
- * Handles a message sent from the DV service to us.
- * Parse it out and give it to the plugin.
- *
- * @param cls the handle to the DV API
- * @param rm the message that was received
- */
-static void
-handle_received (void *cls,
-                 const struct GNUNET_DV_ReceivedMessage *rm)
-{
-  struct GNUNET_DV_ServiceHandle *sh = cls;
-  const struct GNUNET_MessageHeader *payload;
-
-  payload = (const struct GNUNET_MessageHeader *) &rm[1];
-  sh->message_cb (sh->cls,
-                  &rm->sender,
-                  ntohl (rm->distance),
-                  payload);
-}
-
-
-/**
- * Generic error handler, called with the appropriate error code and
- * the same closure specified at the creation of the message queue.
- * Not every message queue implementation supports an error handler.
- *
- * @param cls closure with the `struct GNUNET_DV_ServiceHandle *`
- * @param error error code
- */
-static void
-mq_error_handler (void *cls,
-                  enum GNUNET_MQ_Error error)
-{
-  struct GNUNET_DV_ServiceHandle *sh = cls;
-
-  reconnect (sh);
-}
-
-
-/**
- * Disconnect and then reconnect to the DV service.
- *
- * @param sh service handle
- */
-static void
-reconnect (struct GNUNET_DV_ServiceHandle *sh)
-{
-  struct GNUNET_MQ_MessageHandler handlers[] = {
-    GNUNET_MQ_hd_fixed_size (connect,
-                             GNUNET_MESSAGE_TYPE_DV_CONNECT,
-                             struct GNUNET_DV_ConnectMessage,
-                             sh),
-    GNUNET_MQ_hd_fixed_size (disconnect,
-                             GNUNET_MESSAGE_TYPE_DV_DISCONNECT,
-                             struct GNUNET_DV_DisconnectMessage,
-                             sh),
-    GNUNET_MQ_hd_fixed_size (distance_update,
-                             GNUNET_MESSAGE_TYPE_DV_DISTANCE_CHANGED,
-                             struct GNUNET_DV_DistanceUpdateMessage,
-                             sh),
-    GNUNET_MQ_hd_var_size (received,
-                           GNUNET_MESSAGE_TYPE_DV_RECV,
-                           struct GNUNET_DV_ReceivedMessage,
-                           sh),
-    GNUNET_MQ_handler_end ()
-  };
-  struct GNUNET_MessageHeader *sm;
-  struct GNUNET_MQ_Envelope *env;
-
-  if (NULL != sh->mq)
-  {
-    GNUNET_MQ_destroy (sh->mq);
-    sh->mq = NULL;
-  }
-  GNUNET_CONTAINER_multipeermap_iterate (sh->peers,
-                                        &cleanup_send_cb,
-                                        sh);
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Connecting to DV service\n");
-  sh->mq = GNUNET_CLIENT_connect (sh->cfg,
-                                  "dv",
-                                  handlers,
-                                  &mq_error_handler,
-                                  sh);
-  if (NULL == sh->mq)
-  {
-    GNUNET_break (0);
-    return;
-  }
-  env = GNUNET_MQ_msg (sm,
-                       GNUNET_MESSAGE_TYPE_DV_START);
-  GNUNET_MQ_send (sh->mq,
-                  env);
-}
-
-
-/**
- * Connect to the DV service.
- *
- * @param cfg configuration
- * @param cls closure for callbacks
- * @param connect_cb function to call on connects
- * @param distance_cb function to call if distances change
- * @param disconnect_cb function to call on disconnects
- * @param message_cb function to call if we receive messages
- * @return handle to access the service
- */
-struct GNUNET_DV_ServiceHandle *
-GNUNET_DV_service_connect (const struct GNUNET_CONFIGURATION_Handle *cfg,
-                          void *cls,
-                          GNUNET_DV_ConnectCallback connect_cb,
-                          GNUNET_DV_DistanceChangedCallback distance_cb,
-                          GNUNET_DV_DisconnectCallback disconnect_cb,
-                          GNUNET_DV_MessageReceivedCallback message_cb)
-{
-  struct GNUNET_DV_ServiceHandle *sh;
-
-  sh = GNUNET_new (struct GNUNET_DV_ServiceHandle);
-  sh->cfg = cfg;
-  sh->cls = cls;
-  sh->connect_cb = connect_cb;
-  sh->distance_cb = distance_cb;
-  sh->disconnect_cb = disconnect_cb;
-  sh->message_cb = message_cb;
-  sh->peers = GNUNET_CONTAINER_multipeermap_create (128,
-                                                    GNUNET_YES);
-  reconnect (sh);
-  return sh;
-}
-
-
-/**
- * Disconnect from DV service.
- *
- * @param sh service handle
- */
-void
-GNUNET_DV_service_disconnect (struct GNUNET_DV_ServiceHandle *sh)
-{
-  if (NULL == sh)
-    return;
-  if (NULL != sh->mq)
-  {
-    GNUNET_MQ_destroy (sh->mq);
-    sh->mq = NULL;
-  }
-  GNUNET_CONTAINER_multipeermap_iterate (sh->peers,
-                                        &cleanup_send_cb,
-                                        sh);
-  GNUNET_CONTAINER_multipeermap_destroy (sh->peers);
-  GNUNET_free (sh);
-}
-
-
-/**
- * Send a message via DV service.
- *
- * @param sh service handle
- * @param target intended recpient
- * @param msg message payload
- */
-void
-GNUNET_DV_send (struct GNUNET_DV_ServiceHandle *sh,
-               const struct GNUNET_PeerIdentity *target,
-               const struct GNUNET_MessageHeader *msg)
-{
-  struct GNUNET_DV_SendMessage *sm;
-  struct ConnectedPeer *peer;
-  struct GNUNET_MQ_Envelope *env;
-
-  if (ntohs (msg->size) + sizeof (*sm) >= GNUNET_MAX_MESSAGE_SIZE)
-  {
-    GNUNET_break (0);
-    return;
-  }
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Asked to send %u bytes of type %u to %s\n",
-       (unsigned int) ntohs (msg->size),
-       (unsigned int) ntohs (msg->type),
-       GNUNET_i2s (target));
-  peer = GNUNET_CONTAINER_multipeermap_get (sh->peers,
-                                            target);
-  if (NULL == peer)
-  {
-    GNUNET_break (0);
-    return;
-  }
-  GNUNET_assert (NULL != sh->mq);
-  env = GNUNET_MQ_msg_nested_mh (sm,
-                                 GNUNET_MESSAGE_TYPE_DV_SEND,
-                                 msg);
-  sm->target = *target;
-  GNUNET_MQ_send (sh->mq,
-                  env);
-}
-
-
-/* end of dv_api.c */
diff --git a/src/dv/gnunet-dv.c b/src/dv/gnunet-dv.c
deleted file mode 100644
index 90d8144e5..000000000
--- a/src/dv/gnunet-dv.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2013 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     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
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-/**
- * @file dv/gnunet-dv.c
- * @brief DV monitoring command line tool
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_dv_service.h"
-
-/**
- * Handle to DV service.
- */
-static struct GNUNET_DV_ServiceHandle *sh;
-
-/**
- * Was verbose specified?
- */
-static unsigned int verbose;
-
-
-/**
- * Function called if DV starts to be able to talk to a peer.
- *
- * @param cls closure
- * @param peer newly connected peer
- * @param distance distance to the peer
- * @param network the network the next hop is located in
- */
-static void
-connect_cb (void *cls,
-           const struct GNUNET_PeerIdentity *peer,
-           uint32_t distance,
-            enum GNUNET_NetworkType network)
-{
-  fprintf (stderr, "Connect: %s at %u\n",
-          GNUNET_i2s (peer),
-          (unsigned int) distance);
-}
-
-
-/**
- * Function called if DV distance to a peer is changed.
- *
- * @param cls closure
- * @param peer connected peer
- * @param distance new distance to the peer
- * @param network network used on first hop to peer
- */
-static void
-change_cb (void *cls,
-          const struct GNUNET_PeerIdentity *peer,
-          uint32_t distance,
-           enum GNUNET_NetworkType network)
-{
-  fprintf (stderr, "Change: %s at %u\n",
-          GNUNET_i2s (peer),
-          (unsigned int) distance);
-}
-
-
-/**
- * Function called if DV is no longer able to talk to a peer.
- *
- * @param cls closure
- * @param peer peer that disconnected
- */
-static void
-disconnect_cb (void *cls,
-              const struct GNUNET_PeerIdentity *peer)
-{
-  fprintf (stderr, "Disconnect: %s\n",
-          GNUNET_i2s (peer));
-}
-
-
-/**
- * Function called if DV receives a message for this peer.
- *
- * @param cls closure
- * @param sender sender of the message
- * @param distance how far did the message travel
- * @param msg actual message payload
- */
-static void
-message_cb (void *cls,
-           const struct GNUNET_PeerIdentity *sender,
-           uint32_t distance,
-           const struct GNUNET_MessageHeader *msg)
-{
-  if (verbose)
-    fprintf (stderr, "Message: %s at %u sends %u bytes of type %u\n",
-            GNUNET_i2s (sender),
-            (unsigned int) distance,
-            (unsigned int) ntohs (msg->size),
-            (unsigned int) ntohs (msg->type));
-}
-
-
-/**
- * Task run on shutdown.
- *
- * @param cls NULL
- */
-static void
-shutdown_task (void *cls)
-{
-  GNUNET_DV_service_disconnect (sh);
-  sh = NULL;
-}
-
-
-/**
- * Main function that will be run by the scheduler.
- *
- * @param cls closure
- * @param args remaining command-line arguments
- * @param cfgfile name of the configuration file used (for saving, can be 
NULL!)
- * @param cfg configuration
- */
-static void
-run (void *cls, char *const *args, const char *cfgfile,
-     const struct GNUNET_CONFIGURATION_Handle *cfg)
-{
-  sh = GNUNET_DV_service_connect (cfg, NULL,
-                                 &connect_cb,
-                                 &change_cb,
-                                 &disconnect_cb,
-                                 &message_cb);
-  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
-}
-
-
-/**
- * The main function.
- *
- * @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)
-{
-  int res;
-
-  struct GNUNET_GETOPT_CommandLineOption options[] = {
-
-    GNUNET_GETOPT_option_verbose (&verbose),
-
-    GNUNET_GETOPT_OPTION_END
-  };
-
-  if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
-    return 2;
-
-  res = GNUNET_PROGRAM_run (argc, argv, "gnunet-dv",
-                           gettext_noop ("Print information about DV state"),
-                           options, &run,
-                           NULL);
-  GNUNET_free ((void *) argv);
-
-  if (GNUNET_OK != res)
-    return 1;
-  return 0;
-}
-
-/* end of gnunet-dv.c */
diff --git a/src/dv/gnunet-service-dv.c b/src/dv/gnunet-service-dv.c
deleted file mode 100644
index dd2ff9c12..000000000
--- a/src/dv/gnunet-service-dv.c
+++ /dev/null
@@ -1,2146 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2013, 2016 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     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
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @file dv/gnunet-service-dv.c
- * @brief the distance vector service, primarily handles gossip of nearby
- * peers and sending/receiving DV messages from core and decapsulating
- * them
- *
- * @author Christian Grothoff
- * @author Nathan Evans
- */
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_protocols.h"
-#include "gnunet_core_service.h"
-#include "gnunet_hello_lib.h"
-#include "gnunet_peerinfo_service.h"
-#include "gnunet_statistics_service.h"
-#include "gnunet_set_service.h"
-#include "gnunet_ats_service.h"
-#include "dv.h"
-#include <gcrypt.h>
-
-
-/**
- * How often do we establish the consensu?
- */
-#define GNUNET_DV_CONSENSUS_FREQUENCY 
GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_MINUTES, 5)
-
-/**
- * Maximum number of messages we queue per peer.
- */
-#define MAX_QUEUE_SIZE 16
-
-/**
- * Maximum number of messages we queue towards the clients/plugin.
- */
-#define MAX_QUEUE_SIZE_PLUGIN 1024
-
-/**
- * The default fisheye depth, from how many hops away will
- * we keep peers?
- */
-#define DEFAULT_FISHEYE_DEPTH 3
-
-/**
- * How many hops is a direct neighbor away?
- */
-#define DIRECT_NEIGHBOR_COST 1
-
-
-GNUNET_NETWORK_STRUCT_BEGIN
-
-/**
- * Information about a peer DV can route to.  These entries are what
- * we use as the binary format to establish consensus to create our
- * routing table and as the address format in the HELLOs.
- */
-struct Target
-{
-
-  /**
-   * Identity of the peer we can reach.
-   */
-  struct GNUNET_PeerIdentity peer;
-
-  /**
-   * How many hops (1-3) is this peer away? in network byte order
-   */
-  uint32_t distance GNUNET_PACKED;
-
-};
-
-
-/**
- * Message exchanged between DV services (via core), requesting a
- * message to be routed.
- */
-struct RouteMessage
-{
-  /**
-   * Type: #GNUNET_MESSAGE_TYPE_DV_ROUTE
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Expected (remaining) distance.  Must be always smaller than
-   * #DEFAULT_FISHEYE_DEPTH, should be zero at the target.  Must
-   * be decremented by one at each hop.  Peers must not forward
-   * these messages further once the counter has reached zero.
-   */
-  uint32_t distance GNUNET_PACKED;
-
-  /**
-   * The (actual) target of the message (this peer, if distance is zero).
-   */
-  struct GNUNET_PeerIdentity target;
-
-  /**
-   * The (actual) sender of the message.
-   */
-  struct GNUNET_PeerIdentity sender;
-
-};
-
-GNUNET_NETWORK_STRUCT_END
-
-
-/**
- * Information about a direct neighbor (core-level, excluding
- * DV-links, only DV-enabled peers).
- */
-struct DirectNeighbor
-{
-
-  /**
-   * Identity of the peer.
-   */
-  struct GNUNET_PeerIdentity peer;
-
-  /**
-   * Session ID we use whenever we create a set union with
-   * this neighbor; constructed from the XOR of our peer
-   * IDs and then salted with "DV-SALT" to avoid conflicts
-   * with other applications.
-   */
-  struct GNUNET_HashCode real_session_id;
-
-  /**
-   * Transmit handle to core service.
-   */
-  struct GNUNET_MQ_Handle *mq;
-
-  /**
-   * Routing table of the neighbor, NULL if not yet established.
-   * Keys are peer identities, values are 'struct Target' entries.
-   * Note that the distances in the targets are from the point-of-view
-   * of the peer, not from us!
-   */
-  struct GNUNET_CONTAINER_MultiPeerMap *neighbor_table;
-
-  /**
-   * Updated routing table of the neighbor, under construction,
-   * NULL if we are not currently building it.
-   * Keys are peer identities, values are 'struct Target' entries.
-   * Note that the distances in the targets are from the point-of-view
-   * of the other peer, not from us!
-   */
-  struct GNUNET_CONTAINER_MultiPeerMap *neighbor_table_consensus;
-
-  /**
-   * Our current (exposed) routing table as a set.
-   */
-  struct GNUNET_SET_Handle *my_set;
-
-  /**
-   * Handle for our current active set union operation.
-   */
-  struct GNUNET_SET_OperationHandle *set_op;
-
-  /**
-   * Handle used if we are listening for this peer, waiting for the
-   * other peer to initiate construction of the set union.  NULL if
-   * we ar the initiating peer.
-   */
-  struct GNUNET_SET_ListenHandle *listen_handle;
-
-  /**
-   * ID of the task we use to (periodically) update our consensus
-   * with this peer.  Used if we are the initiating peer.
-   */
-  struct GNUNET_SCHEDULER_Task *initiate_task;
-
-  /**
-   * At what offset are we, with respect to inserting our own routes
-   * into the consensus?
-   */
-  unsigned int consensus_insertion_offset;
-
-  /**
-   * At what distance are we, with respect to inserting our own routes
-   * into the consensus?
-   */
-  unsigned int consensus_insertion_distance;
-
-  /**
-   * Elements in consensus
-   */
-  unsigned int consensus_elements;
-
-  /**
-   * Direct one hop route
-   */
-  struct Route *direct_route;
-
-  /**
-   * Flag set within 'check_target_removed' to trigger full global route 
refresh.
-   */
-  int target_removed;
-
-  /**
-   * Our distance to this peer, 0 for unknown.
-   */
-  uint32_t distance;
-
-  /**
-   * The network this peer is in
-   */
-  enum GNUNET_NetworkType network;
-
-  /**
-   * Is this neighbor connected at the core level?
-   */
-  int connected;
-
-};
-
-
-/**
- * A route includes information about the next hop,
- * the target, and the ultimate distance to the
- * target.
- */
-struct Route
-{
-
-  /**
-   * Which peer do we need to forward the message to?
-   */
-  struct DirectNeighbor *next_hop;
-
-  /**
-   * What would be the target, and how far is it away?
-   */
-  struct Target target;
-
-  /**
-   * Offset of this target in the respective consensus set.
-   */
-  unsigned int set_offset;
-
-};
-
-
-/**
- * Set of targets we bring to a consensus; all targets in a set have a
- * distance equal to the sets distance (which is implied by the array
- * index of the set).
- */
-struct ConsensusSet
-{
-
-  /**
-   * Array of targets in the set, may include NULL entries if a
-   * neighbor has disconnected; the targets are allocated with the
-   * respective container (all_routes), not here.
-   */
-  struct Route **targets;
-
-  /**
-   * Size of the @e targets array.
-   */
-  unsigned int array_length;
-
-};
-
-
-/**
- * Peermap of all of our neighbors; processing these usually requires
- * first checking to see if the peer is core-connected and if the
- * distance is 1, in which case they are direct neighbors.
- */
-static struct GNUNET_CONTAINER_MultiPeerMap *direct_neighbors;
-
-/**
- * Hashmap with all routes that we currently support; contains
- * routing information for all peers from distance 2
- * up to distance #DEFAULT_FISHEYE_DEPTH.
- */
-static struct GNUNET_CONTAINER_MultiPeerMap *all_routes;
-
-/**
- * Array of consensus sets we expose to the outside world.  Sets
- * are structured by the distance to the target.
- */
-static struct ConsensusSet consensi[DEFAULT_FISHEYE_DEPTH];
-
-/**
- * Handle to the core service api.
- */
-static struct GNUNET_CORE_Handle *core_api;
-
-/**
- * The identity of our peer.
- */
-static struct GNUNET_PeerIdentity my_identity;
-
-/**
- * The configuration for this service.
- */
-static const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-/**
- * The client, the DV plugin connected to us (or an event monitor).
- * Hopefully this client will never change, although if the plugin
- * dies and returns for some reason it may happen.
- */
-static struct GNUNET_NotificationContext *nc;
-
-/**
- * Handle for the statistics service.
- */
-static struct GNUNET_STATISTICS_Handle *stats;
-
-/**
- * Handle to ATS service.
- */
-static struct GNUNET_ATS_PerformanceHandle *ats;
-
-/**
- * Task scheduled to refresh routes based on direct neighbours.
- */
-static struct GNUNET_SCHEDULER_Task *rr_task;
-
-/**
- * #GNUNET_YES if we are shutting down.
- */
-static int in_shutdown;
-
-/**
- * Start creating a new DV set union by initiating the connection.
- *
- * @param cls the 'struct DirectNeighbor' of the peer we're building
- *        a routing consensus with
- */
-static void
-initiate_set_union (void *cls);
-
-
-/**
- * Start creating a new DV set union construction, our neighbour has
- * asked for it (callback for listening peer).
- *
- * @param cls the 'struct DirectNeighbor' of the peer we're building
- *        a routing consensus with
- * @param other_peer the other peer
- * @param context_msg message with application specific information from
- *        the other peer
- * @param request request from the other peer, use GNUNET_SET_accept
- *        to accept it, otherwise the request will be refused
- *        Note that we don't use a return value here, as it is also
- *        necessary to specify the set we want to do the operation with,
- *        whith sometimes can be derived from the context message.
- *        Also necessary to specify the timeout.
- */
-static void
-listen_set_union (void *cls,
-                 const struct GNUNET_PeerIdentity *other_peer,
-                 const struct GNUNET_MessageHeader *context_msg,
-                 struct GNUNET_SET_Request *request);
-
-
-/**
- * Forward a message from another peer to the plugin.
- *
- * @param message the message to send to the plugin
- * @param origin the original sender of the message
- * @param distance distance to the original sender of the message
- */
-static void
-send_data_to_plugin (const struct GNUNET_MessageHeader *message,
-                    const struct GNUNET_PeerIdentity *origin,
-                    uint32_t distance)
-{
-  struct GNUNET_DV_ReceivedMessage *received_msg;
-  size_t size;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Delivering message from peer `%s' at distance %u\n",
-              GNUNET_i2s (origin),
-              (unsigned int) distance);
-  size = sizeof (struct GNUNET_DV_ReceivedMessage) +
-    ntohs (message->size);
-  if (size >= GNUNET_MAX_MESSAGE_SIZE)
-  {
-    GNUNET_break (0); /* too big */
-    return;
-  }
-  received_msg = GNUNET_malloc (size);
-  received_msg->header.size = htons (size);
-  received_msg->header.type = htons (GNUNET_MESSAGE_TYPE_DV_RECV);
-  received_msg->distance = htonl (distance);
-  received_msg->sender = *origin;
-  GNUNET_memcpy (&received_msg[1], message, ntohs (message->size));
-  GNUNET_notification_context_broadcast (nc,
-                                         &received_msg->header,
-                                         GNUNET_YES);
-  GNUNET_free (received_msg);
-}
-
-
-/**
- * Forward a control message to the plugin.
- *
- * @param message the message to send to the plugin
- */
-static void
-send_control_to_plugin (const struct GNUNET_MessageHeader *message)
-{
-  GNUNET_notification_context_broadcast (nc,
-                                         message,
-                                         GNUNET_NO);
-}
-
-
-/**
- * Send a DISTANCE_CHANGED message to the plugin.
- *
- * @param peer peer with a changed distance
- * @param distance new distance to the peer
- * @param network network used by the neighbor
- */
-static void
-send_distance_change_to_plugin (const struct GNUNET_PeerIdentity *peer,
-                               uint32_t distance,
-                                enum GNUNET_NetworkType network)
-{
-  struct GNUNET_DV_DistanceUpdateMessage du_msg;
-
-  GNUNET_break (GNUNET_NT_UNSPECIFIED != network);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Delivering DISTANCE_CHANGED for message about peer `%s'\n",
-              GNUNET_i2s (peer));
-  du_msg.header.size = htons (sizeof (du_msg));
-  du_msg.header.type = htons (GNUNET_MESSAGE_TYPE_DV_DISTANCE_CHANGED);
-  du_msg.distance = htonl (distance);
-  du_msg.peer = *peer;
-  du_msg.network = htonl ((uint32_t) network);
-  send_control_to_plugin (&du_msg.header);
-}
-
-
-/**
- * Give a CONNECT message to the plugin.
- *
- * @param target peer that connected
- * @param distance distance to the target
- * @param network the network the next hop is located in
- */
-static void
-send_connect_to_plugin (const struct GNUNET_PeerIdentity *target,
-                       uint32_t distance,
-                        enum GNUNET_NetworkType network)
-{
-  struct GNUNET_DV_ConnectMessage cm;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Delivering CONNECT about peer %s with distance %u\n",
-              GNUNET_i2s (target), distance);
-  cm.header.size = htons (sizeof (cm));
-  cm.header.type = htons (GNUNET_MESSAGE_TYPE_DV_CONNECT);
-  cm.distance = htonl (distance);
-  cm.network = htonl ((uint32_t) network);
-  cm.peer = *target;
-  send_control_to_plugin (&cm.header);
-}
-
-
-/**
- * Give a DISCONNECT message to the plugin.
- *
- * @param target peer that disconnected
- */
-static void
-send_disconnect_to_plugin (const struct GNUNET_PeerIdentity *target)
-{
-  struct GNUNET_DV_DisconnectMessage dm;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Delivering DISCONNECT about peer `%s'\n",
-              GNUNET_i2s (target));
-  dm.header.size = htons (sizeof (dm));
-  dm.header.type = htons (GNUNET_MESSAGE_TYPE_DV_DISCONNECT);
-  dm.reserved = htonl (0);
-  dm.peer = *target;
-  send_control_to_plugin (&dm.header);
-}
-
-
-/**
- * Forward the given payload to the given target.
- *
- * @param target where to send the message
- * @param distance distance to the @a sender
- * @param sender original sender of the message
- * @param actual_target ultimate recipient for the message
- * @param payload payload of the message
- */
-static void
-forward_payload (struct DirectNeighbor *target,
-                uint32_t distance,
-                const struct GNUNET_PeerIdentity *sender,
-                const struct GNUNET_PeerIdentity *actual_target,
-                const struct GNUNET_MessageHeader *payload)
-{
-  struct GNUNET_MQ_Envelope *env;
-  struct RouteMessage *rm;
-
-  if ( (GNUNET_MQ_get_length (target->mq) >= MAX_QUEUE_SIZE) &&
-       (0 != memcmp (sender,
-                    &my_identity,
-                    sizeof (struct GNUNET_PeerIdentity))) )
-  {
-    /* not _our_ client and queue is full, drop */
-    GNUNET_STATISTICS_update (stats,
-                              "# messages dropped",
-                              1,
-                             GNUNET_NO);
-    return;
-  }
-  if (sizeof (struct RouteMessage) + ntohs (payload->size)
-      >= GNUNET_MAX_MESSAGE_SIZE)
-  {
-    GNUNET_break (0);
-    return;
-  }
-  env = GNUNET_MQ_msg_nested_mh (rm,
-                                GNUNET_MESSAGE_TYPE_DV_ROUTE,
-                                payload);
-  rm->distance = htonl (distance);
-  rm->target = *actual_target;
-  rm->sender = *sender;
-  GNUNET_MQ_send (target->mq,
-                 env);
-}
-
-
-/**
- * Find a free slot for storing a 'route' in the 'consensi'
- * set at the given distance.
- *
- * @param distance distance to use for the set slot
- */
-static unsigned int
-get_consensus_slot (uint32_t distance)
-{
-  struct ConsensusSet *cs;
-  unsigned int i;
-
-  GNUNET_assert (distance < DEFAULT_FISHEYE_DEPTH);
-  cs = &consensi[distance];
-  i = 0;
-  while ( (i < cs->array_length) &&
-         (NULL != cs->targets[i]) ) i++;
-  if (i == cs->array_length)
-  {
-    GNUNET_array_grow (cs->targets,
-                      cs->array_length,
-                      cs->array_length * 2 + 2);
-  }
-  return i;
-}
-
-
-/**
- * Allocate a slot in the consensus set for a route.
- *
- * @param route route to initialize
- * @param distance which consensus set to use
- */
-static void
-allocate_route (struct Route *route,
-               uint32_t distance)
-{
-  unsigned int i;
-
-  if (distance >= DEFAULT_FISHEYE_DEPTH)
-  {
-    route->target.distance = htonl (distance);
-    route->set_offset = UINT_MAX; /* invalid slot */
-    return;
-  }
-  i = get_consensus_slot (distance);
-  route->set_offset = i;
-  consensi[distance].targets[i] = route;
-  route->target.distance = htonl (distance);
-}
-
-
-/**
- * Release a slot in the consensus set for a route.
- *
- * @param route route to release the slot from
- */
-static void
-release_route (struct Route *route)
-{
-  if (UINT_MAX == route->set_offset)
-    return;
-  GNUNET_assert (ntohl (route->target.distance) < DEFAULT_FISHEYE_DEPTH);
-  consensi[ntohl (route->target.distance)].targets[route->set_offset] = NULL;
-  route->set_offset = UINT_MAX; /* indicate invalid slot */
-}
-
-
-/**
- * Move a route from one consensus set to another.
- *
- * @param route route to move
- * @param new_distance new distance for the route (destination set)
- */
-static void
-move_route (struct Route *route,
-           uint32_t new_distance)
-{
-  release_route (route);
-  allocate_route (route, new_distance);
-}
-
-
-/**
- * Initialize this neighbors 'my_set' and when done give
- * it to the pending set operation for execution.
- *
- * Add a single element to the set per call:
- *
- * If we reached the last element of a consensus element: increase distance
- *
- *
- * @param cls the neighbor for which we are building the set
- */
-static void
-build_set (void *cls)
-{
-  struct DirectNeighbor *neighbor = cls;
-  struct GNUNET_SET_Element element;
-  struct Target *target;
-  struct Route *route;
-
-  target = NULL;
-  /* skip over NULL entries */
-  while ( (DEFAULT_FISHEYE_DEPTH > neighbor->consensus_insertion_distance) &&
-         (consensi[neighbor->consensus_insertion_distance].array_length > 
neighbor->consensus_insertion_offset) &&
-         (NULL == 
consensi[neighbor->consensus_insertion_distance].targets[neighbor->consensus_insertion_offset])
 )
-    neighbor->consensus_insertion_offset++;
-  while ( (DEFAULT_FISHEYE_DEPTH > neighbor->consensus_insertion_distance) &&
-         (consensi[neighbor->consensus_insertion_distance].array_length == 
neighbor->consensus_insertion_offset) )
-  {
-    /* If we reached the last element of a consensus array element: increase 
distance and start with next array */
-    neighbor->consensus_insertion_offset = 0;
-    neighbor->consensus_insertion_distance++;
-    /* skip over NULL entries */
-    while ( (DEFAULT_FISHEYE_DEPTH > neighbor->consensus_insertion_distance) &&
-           (consensi[neighbor->consensus_insertion_distance].array_length  > 
neighbor->consensus_insertion_offset) &&
-           (NULL == 
consensi[neighbor->consensus_insertion_distance].targets[neighbor->consensus_insertion_offset])
 )
-      neighbor->consensus_insertion_offset++;
-  }
-  if (DEFAULT_FISHEYE_DEPTH == neighbor->consensus_insertion_distance)
-  {
-    /* we have added all elements to the set, run the operation */
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-               "Finished building my SET for peer `%s' with %u elements, 
committing\n",
-               GNUNET_i2s (&neighbor->peer),
-               neighbor->consensus_elements);
-    GNUNET_SET_commit (neighbor->set_op,
-                      neighbor->my_set);
-    GNUNET_SET_destroy (neighbor->my_set);
-    neighbor->my_set = NULL;
-    return;
-  }
-
-  route = 
consensi[neighbor->consensus_insertion_distance].targets[neighbor->consensus_insertion_offset];
-  GNUNET_assert (NULL != route);
-  target = &route->target;
-  GNUNET_assert (ntohl (target->distance) < DEFAULT_FISHEYE_DEPTH);
-  element.size = sizeof (struct Target);
-  element.element_type = htons (0);
-  element.data = target;
-
-  /* Find next non-NULL entry */
-  neighbor->consensus_insertion_offset++;
-  if ( (0 != memcmp (&target->peer,
-                    &my_identity,
-                    sizeof (my_identity))) &&
-       (0 != memcmp (&target->peer,
-                    &neighbor->peer,
-                    sizeof (struct GNUNET_PeerIdentity))) )
-  {
-    /* Add target if it is not the neighbor or this peer */
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "Adding peer `%s' with distance %u to SET\n",
-                GNUNET_i2s (&target->peer),
-                ntohl (target->distance) + 1);
-    GNUNET_SET_add_element (neighbor->my_set,
-                            &element,
-                            &build_set, neighbor);
-    neighbor->consensus_elements++;
-  }
-  else
-    build_set (neighbor);
-}
-
-
-/**
- * A peer is now connected to us at distance 1.  Initiate DV exchange.
- *
- * @param neighbor entry for the neighbor at distance 1
- */
-static void
-handle_direct_connect (struct DirectNeighbor *neighbor)
-{
-  struct Route *route;
-  struct GNUNET_HashCode h1;
-  struct GNUNET_HashCode h2;
-  struct GNUNET_HashCode session_id;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Direct connection to %s established, routing table exchange 
begins.\n",
-             GNUNET_i2s (&neighbor->peer));
-  GNUNET_STATISTICS_update (stats,
-                           "# peers connected (1-hop)",
-                           1, GNUNET_NO);
-  route = GNUNET_CONTAINER_multipeermap_get (all_routes,
-                                            &neighbor->peer);
-  if (NULL != route)
-  {
-    GNUNET_assert (GNUNET_YES ==
-                  GNUNET_CONTAINER_multipeermap_remove (all_routes,
-                                                         &neighbor->peer,
-                                                         route));
-    send_disconnect_to_plugin (&neighbor->peer);
-    release_route (route);
-    GNUNET_free (route);
-  }
-
-  neighbor->direct_route = GNUNET_new (struct Route);
-  neighbor->direct_route->next_hop = neighbor;
-  neighbor->direct_route->target.peer = neighbor->peer;
-  allocate_route (neighbor->direct_route, DIRECT_NEIGHBOR_COST);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Adding direct route to %s\n",
-              GNUNET_i2s (&neighbor->direct_route->target.peer));
-
-
-  /* construct session ID seed as XOR of both peer's identities */
-  GNUNET_CRYPTO_hash (&my_identity,
-                     sizeof (my_identity),
-                     &h1);
-  GNUNET_CRYPTO_hash (&neighbor->peer,
-                     sizeof (struct GNUNET_PeerIdentity),
-                     &h2);
-  GNUNET_CRYPTO_hash_xor (&h1,
-                         &h2,
-                         &session_id);
-  /* make sure session ID is unique across applications by salting it with 
'DV' */
-  GNUNET_CRYPTO_hkdf (&neighbor->real_session_id, sizeof (struct 
GNUNET_HashCode),
-                     GCRY_MD_SHA512, GCRY_MD_SHA256,
-                     "DV-SALT", 2,
-                     &session_id, sizeof (session_id),
-                     NULL, 0);
-  if (0 < memcmp (&neighbor->peer,
-                 &my_identity,
-                 sizeof (struct GNUNET_PeerIdentity)))
-  {
-    if (NULL != neighbor->listen_handle)
-    {
-      GNUNET_break (0);
-    }
-    else
-      neighbor->initiate_task = GNUNET_SCHEDULER_add_now (&initiate_set_union,
-                                                          neighbor);
-  }
-  else
-  {
-    if (NULL != neighbor->listen_handle)
-    {
-      GNUNET_break (0);
-    }
-    else
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "Starting SET listen operation with peer `%s'\n",
-                  GNUNET_i2s (&neighbor->peer));
-      neighbor->listen_handle = GNUNET_SET_listen (cfg,
-                                                   GNUNET_SET_OPERATION_UNION,
-                                                   &neighbor->real_session_id,
-                                                   &listen_set_union,
-                                                   neighbor);
-    }
-  }
-}
-
-
-/**
- * Method called whenever a peer connects.
- *
- * @param cls closure
- * @param peer peer identity this notification is about
- * @param mq message queue for sending data to @a peer
- * @return our `struct DirectNeighbour` for this peer
- */
-static void *
-handle_core_connect (void *cls,
-                    const struct GNUNET_PeerIdentity *peer,
-                    struct GNUNET_MQ_Handle *mq)
-{
-  struct DirectNeighbor *neighbor;
-
-  /* Check for connect to self message */
-  if (0 == memcmp (&my_identity,
-                  peer,
-                  sizeof (struct GNUNET_PeerIdentity)))
-    return NULL;
-  /* check if entry exists */
-  neighbor = GNUNET_CONTAINER_multipeermap_get (direct_neighbors,
-                                               peer);
-  if (NULL != neighbor)
-  {
-    GNUNET_break (GNUNET_NT_UNSPECIFIED != neighbor->network);
-    GNUNET_break (GNUNET_YES != neighbor->connected);
-    neighbor->connected = GNUNET_YES;
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-               "Core connected to %s (distance %u)\n",
-               GNUNET_i2s (peer),
-               (unsigned int) neighbor->distance);
-    if (DIRECT_NEIGHBOR_COST != neighbor->distance)
-      return NULL;
-    handle_direct_connect (neighbor);
-    return NULL;
-  }
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Core connected to %s (distance unknown)\n",
-             GNUNET_i2s (peer));
-  neighbor = GNUNET_new (struct DirectNeighbor);
-  neighbor->peer = *peer;
-  GNUNET_assert (GNUNET_YES ==
-                GNUNET_CONTAINER_multipeermap_put (direct_neighbors,
-                                                   &neighbor->peer,
-                                                   neighbor,
-                                                   
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
-  neighbor->connected = GNUNET_YES;
-  neighbor->distance = 0; /* unknown */
-  neighbor->network = GNUNET_NT_UNSPECIFIED;
-  return neighbor;
-}
-
-
-/**
- * Called for each 'target' in a neighbor table to free the associated memory.
- *
- * @param cls NULL
- * @param key key of the value
- * @param value value to free
- * @return #GNUNET_OK to continue to iterate
- */
-static int
-free_targets (void *cls,
-             const struct GNUNET_PeerIdentity *key,
-             void *value)
-{
-  GNUNET_free (value);
-  return GNUNET_OK;
-}
-
-
-/**
- * Add a new route to the given @a target via the given @a neighbor.
- *
- * @param target the target of the route
- * @param neighbor the next hop for communicating with the @a target
- */
-static void
-add_new_route (struct Target *target,
-               struct DirectNeighbor *neighbor)
-{
-  struct Route *route;
-
-  route = GNUNET_new (struct Route);
-  route->next_hop = neighbor;
-  route->target.peer = target->peer;
-  allocate_route (route, ntohl (target->distance) + 1);
-  GNUNET_assert (GNUNET_YES ==
-                GNUNET_CONTAINER_multipeermap_put (all_routes,
-                                                   &route->target.peer,
-                                                   route,
-                                                   
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
-  send_connect_to_plugin (&route->target.peer,
-                          ntohl (route->target.distance),
-                          neighbor->network);
-}
-
-
-/**
- * Multipeerhmap iterator for checking if a given route is
- * (now) useful to this peer.
- *
- * @param cls the direct neighbor for the given route
- * @param key key value stored under
- * @param value a 'struct Target' that may or may not be useful; not that
- *        the distance in 'target' does not include the first hop yet
- * @return #GNUNET_YES to continue iteration, #GNUNET_NO to stop
- */
-static int
-check_possible_route (void *cls,
-                     const struct GNUNET_PeerIdentity *key,
-                     void *value)
-{
-  struct DirectNeighbor *neighbor = cls;
-  struct Target *target = value;
-  struct Route *route;
-
-  if (GNUNET_YES ==
-      GNUNET_CONTAINER_multipeermap_contains (direct_neighbors,
-                                              key))
-    return GNUNET_YES; /* direct route, do not care about alternatives */
-  route = GNUNET_CONTAINER_multipeermap_get (all_routes,
-                                            key);
-  if (NULL != route)
-  {
-    /* we have an existing route, check how it compares with going via 
'target' */
-    if (ntohl (route->target.distance) > ntohl (target->distance) + 1)
-    {
-      /* via 'target' is cheaper than the existing route; switch to 
alternative route! */
-      move_route (route, ntohl (target->distance) + 1);
-      route->next_hop = neighbor;
-      send_distance_change_to_plugin (&target->peer,
-                                      ntohl (target->distance) + 1,
-                                      neighbor->network);
-    }
-    return GNUNET_YES; /* got a route to this target already */
-  }
-  if (ntohl (target->distance) >= DEFAULT_FISHEYE_DEPTH)
-    return GNUNET_YES; /* distance is too large to be interesting */
-  add_new_route (target, neighbor);
-  return GNUNET_YES;
-}
-
-
-/**
- * Multipeermap iterator for finding routes that were previously
- * "hidden" due to a better route (called after a disconnect event).
- *
- * @param cls NULL
- * @param key peer identity of the given direct neighbor
- * @param value a `struct DirectNeighbor` to check for additional routes
- * @return #GNUNET_YES to continue iteration
- */
-static int
-refresh_routes (void *cls,
-               const struct GNUNET_PeerIdentity *key,
-               void *value)
-{
-  struct DirectNeighbor *neighbor = value;
-
-  if ( (GNUNET_YES != neighbor->connected) ||
-       (DIRECT_NEIGHBOR_COST != neighbor->distance) )
-    return GNUNET_YES;
-  if (NULL != neighbor->neighbor_table)
-    GNUNET_CONTAINER_multipeermap_iterate (neighbor->neighbor_table,
-                                          &check_possible_route,
-                                          neighbor);
-  return GNUNET_YES;
-}
-
-
-/**
- * Task to run #refresh_routes() on all direct neighbours.
- *
- * @param cls NULL
- */
-static void
-refresh_routes_task (void *cls)
-{
-  rr_task = NULL;
-  GNUNET_CONTAINER_multipeermap_iterate (direct_neighbors,
-                                        &refresh_routes,
-                                         NULL);
-}
-
-
-/**
- * Asynchronously run #refresh_routes() at the next opportunity
- * on all direct neighbours.
- */
-static void
-schedule_refresh_routes ()
-{
-  if (NULL == rr_task)
-    rr_task = GNUNET_SCHEDULER_add_now (&refresh_routes_task,
-                                        NULL);
-}
-
-
-/**
- * Multipeermap iterator for freeing routes that go via a particular
- * neighbor that disconnected and is thus no longer available.
- *
- * @param cls the direct neighbor that is now unavailable
- * @param key key value stored under
- * @param value a `struct Route` that may or may not go via neighbor
- *
- * @return #GNUNET_YES to continue iteration, #GNUNET_NO to stop
- */
-static int
-cull_routes (void *cls,
-            const struct GNUNET_PeerIdentity *key,
-            void *value)
-{
-  struct DirectNeighbor *neighbor = cls;
-  struct Route *route = value;
-
-  if (route->next_hop != neighbor)
-    return GNUNET_YES; /* not affected */
-  GNUNET_assert (GNUNET_YES ==
-                GNUNET_CONTAINER_multipeermap_remove (all_routes, key, value));
-  release_route (route);
-  send_disconnect_to_plugin (&route->target.peer);
-  GNUNET_free (route);
-  return GNUNET_YES;
-}
-
-
-/**
- * Handle the case that a direct connection to a peer is
- * disrupted.  Remove all routes via that peer and
- * stop the consensus with it.
- *
- * @param neighbor peer that was disconnected (or at least is no
- *    longer at distance 1)
- */
-static void
-handle_direct_disconnect (struct DirectNeighbor *neighbor)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Culling routes via %s due to direct disconnect\n",
-             GNUNET_i2s (&neighbor->peer));
-  GNUNET_CONTAINER_multipeermap_iterate (all_routes,
-                                        &cull_routes,
-                                         neighbor);
-  if (NULL != neighbor->direct_route)
-  {
-    release_route (neighbor->direct_route);
-    GNUNET_free (neighbor->direct_route);
-    neighbor->direct_route = NULL;
-  }
-  if (NULL != neighbor->neighbor_table_consensus)
-  {
-    GNUNET_CONTAINER_multipeermap_iterate (neighbor->neighbor_table_consensus,
-                                          &free_targets,
-                                          NULL);
-    GNUNET_CONTAINER_multipeermap_destroy (neighbor->neighbor_table_consensus);
-    neighbor->neighbor_table_consensus = NULL;
-  }
-  if (NULL != neighbor->neighbor_table)
-  {
-    GNUNET_CONTAINER_multipeermap_iterate (neighbor->neighbor_table,
-                                          &free_targets,
-                                          NULL);
-    GNUNET_CONTAINER_multipeermap_destroy (neighbor->neighbor_table);
-    neighbor->neighbor_table = NULL;
-  }
-  if (NULL != neighbor->set_op)
-  {
-    GNUNET_SET_operation_cancel (neighbor->set_op);
-    neighbor->set_op = NULL;
-  }
-  if (NULL != neighbor->my_set)
-  {
-    GNUNET_SET_destroy (neighbor->my_set);
-    neighbor->my_set = NULL;
-  }
-  if (NULL != neighbor->listen_handle)
-  {
-    GNUNET_SET_listen_cancel (neighbor->listen_handle);
-    neighbor->listen_handle = NULL;
-  }
-  if (NULL != neighbor->initiate_task)
-  {
-    GNUNET_SCHEDULER_cancel (neighbor->initiate_task);
-    neighbor->initiate_task = NULL;
-  }
-}
-
-
-/**
- * Function that is called with QoS information about an address; used
- * to update our current distance to another peer.
- *
- * @param cls closure
- * @param address the address
- * @param active #GNUNET_YES if this address is actively used
- *        to maintain a connection to a peer;
- *        #GNUNET_NO if the address is not actively used;
- *        #GNUNET_SYSERR if this address is no longer available for ATS
- * @param bandwidth_out assigned outbound bandwidth for the connection
- * @param bandwidth_in assigned inbound bandwidth for the connection
- * @param prop performance data for the address (as far as known)
- */
-static void
-handle_ats_update (void *cls,
-                  const struct GNUNET_HELLO_Address *address,
-                  int active,
-                  struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out,
-                  struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in,
-                  const struct GNUNET_ATS_Properties *prop)
-{
-  struct DirectNeighbor *neighbor;
-  uint32_t distance;
-  enum GNUNET_NetworkType network;
-
-  if (NULL == address)
-  {
-    /* ATS service temporarily disconnected */
-    return;
-  }
-
-  if (GNUNET_YES != active)
-  {
-    // FIXME: handle disconnect/inactive case too!
-    return;
-  }
-  distance = prop->distance;
-  network = prop->scope;
-  GNUNET_break (GNUNET_NT_UNSPECIFIED != network);
-  /* check if entry exists */
-  neighbor = GNUNET_CONTAINER_multipeermap_get (direct_neighbors,
-                                               &address->peer);
-  if (NULL != neighbor)
-  {
-    neighbor->network = network;
-    if (neighbor->distance == distance)
-      return; /* nothing new to see here, move along */
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "ATS says distance to %s is now %u\n",
-                GNUNET_i2s (&address->peer),
-                (unsigned int) distance);
-    if ( (DIRECT_NEIGHBOR_COST == neighbor->distance) &&
-        (DIRECT_NEIGHBOR_COST == distance) )
-      return; /* no change */
-    if (DIRECT_NEIGHBOR_COST == neighbor->distance)
-    {
-      neighbor->distance = distance;
-      GNUNET_STATISTICS_update (stats,
-                               "# peers connected (1-hop)",
-                               -1, GNUNET_NO);
-      handle_direct_disconnect (neighbor);
-      schedule_refresh_routes ();
-      return;
-    }
-    neighbor->distance = distance;
-    if (DIRECT_NEIGHBOR_COST != neighbor->distance)
-      return;
-    if (GNUNET_YES != neighbor->connected)
-      return;
-    handle_direct_connect (neighbor);
-    return;
-  }
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "ATS says distance to %s is now %u\n",
-             GNUNET_i2s (&address->peer),
-             (unsigned int) distance);
-  neighbor = GNUNET_new (struct DirectNeighbor);
-  neighbor->peer = address->peer;
-  GNUNET_assert (GNUNET_YES ==
-                GNUNET_CONTAINER_multipeermap_put (direct_neighbors,
-                                                   &neighbor->peer,
-                                                   neighbor,
-                                                   
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
-  neighbor->connected = GNUNET_NO; /* not yet */
-  neighbor->distance = distance;
-  neighbor->network = network;
-}
-
-
-/**
- * Check if a target was removed from the set of the other peer; if so,
- * if we also used it for our route, we need to remove it from our
- * 'all_routes' set (and later check if an alternative path now exists).
- *
- * @param cls the `struct DirectNeighbor`
- * @param key peer identity for the target
- * @param value a `struct Target` previously reachable via the given neighbor
- */
-static int
-check_target_removed (void *cls,
-                     const struct GNUNET_PeerIdentity *key,
-                     void *value)
-{
-  struct DirectNeighbor *neighbor = cls;
-  struct Target *new_target;
-  struct Route *current_route;
-
-  new_target = GNUNET_CONTAINER_multipeermap_get 
(neighbor->neighbor_table_consensus,
-                                                 key);
-  current_route = GNUNET_CONTAINER_multipeermap_get (all_routes,
-                                                     key);
-  if (NULL != new_target)
-  {
-    /* target was in old set, is in new set */
-    if ( (NULL != current_route) &&
-         (current_route->next_hop == neighbor) &&
-         (current_route->target.distance != new_target->distance) )
-    {
-      /* need to recalculate routes due to distance change */
-      neighbor->target_removed = GNUNET_YES;
-    }
-    return GNUNET_OK;
-  }
-  /* target was revoked, check if it was used */
-  if ( (NULL == current_route) ||
-       (current_route->next_hop != neighbor) )
-  {
-    /* didn't matter, wasn't used */
-    return GNUNET_OK;
-  }
-  /* remove existing route */
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Lost route to %s\n",
-              GNUNET_i2s (&current_route->target.peer));
-  GNUNET_assert (GNUNET_YES ==
-                 GNUNET_CONTAINER_multipeermap_remove (all_routes, key, 
current_route));
-  send_disconnect_to_plugin (&current_route->target.peer);
-  release_route (current_route);
-  GNUNET_free (current_route);
-  neighbor->target_removed = GNUNET_YES;
-  return GNUNET_OK;
-}
-
-
-/**
- * Check if a target was added to the set of the other peer; if it
- * was added or impoves the existing route, do the needed updates.
- *
- * @param cls the `struct DirectNeighbor`
- * @param key peer identity for the target
- * @param value a `struct Target` now reachable via the given neighbor
- */
-static int
-check_target_added (void *cls,
-                   const struct GNUNET_PeerIdentity *key,
-                   void *value)
-{
-  struct DirectNeighbor *neighbor = cls;
-  struct Target *target = value;
-  struct Route *current_route;
-
-  /* target was revoked, check if it was used */
-  current_route = GNUNET_CONTAINER_multipeermap_get (all_routes,
-                                                    key);
-  if (NULL != current_route)
-  {
-    /* route exists */
-    if (current_route->next_hop == neighbor)
-    {
-      /* we had the same route before, no change in target */
-      if (ntohl (target->distance) + 1 != ntohl 
(current_route->target.distance))
-      {
-        /* but distance changed! */
-        if (ntohl (target->distance) + 1 > DEFAULT_FISHEYE_DEPTH)
-        {
-          /* distance increased beyond what is allowed, kill route */
-          GNUNET_assert (GNUNET_YES ==
-                         GNUNET_CONTAINER_multipeermap_remove (all_routes,
-                                                               key,
-                                                               current_route));
-          send_disconnect_to_plugin (key);
-          release_route (current_route);
-          GNUNET_free (current_route);
-        }
-        else
-        {
-          /* distance decreased, update route */
-          move_route (current_route,
-                      ntohl (target->distance) + 1);
-          send_distance_change_to_plugin (&target->peer,
-                                          ntohl (target->distance) + 1,
-                                          neighbor->network);
-        }
-      }
-      return GNUNET_OK;
-    }
-    if (ntohl (current_route->target.distance) <= ntohl (target->distance) + 1)
-    {
-      /* alternative, shorter route exists, ignore */
-      return GNUNET_OK;
-    }
-    /* new route is better than the existing one, take over! */
-    /* NOTE: minor security issue: malicious peers may advertise
-       very short routes to take over longer paths; as we don't
-       check that the shorter routes actually work, a malicious
-       direct neighbor can use this to DoS our long routes */
-
-    move_route (current_route, ntohl (target->distance) + 1);
-    current_route->next_hop = neighbor;
-    send_distance_change_to_plugin (&target->peer,
-                                    ntohl (target->distance) + 1,
-                                    neighbor->network);
-    return GNUNET_OK;
-  }
-  /* new route */
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Discovered new route to %s using %u hops\n",
-             GNUNET_i2s (&target->peer),
-             (unsigned int) (ntohl (target->distance) + 1));
-  current_route = GNUNET_new (struct Route);
-  current_route->next_hop = neighbor;
-  current_route->target.peer = target->peer;
-  allocate_route (current_route, ntohl (target->distance) + 1);
-  GNUNET_assert (GNUNET_YES ==
-                GNUNET_CONTAINER_multipeermap_put (all_routes,
-                                                   &current_route->target.peer,
-                                                   current_route,
-                                                   
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
-
-  send_connect_to_plugin (&current_route->target.peer,
-                         ntohl (current_route->target.distance),
-                         neighbor->network);
-  return GNUNET_OK;
-}
-
-
-/**
- * Callback for set operation results. Called for each element
- * in the result set.
- * We have learned a new route from the other peer.  Add it to the
- * route set we're building.
- *
- * @param cls the `struct DirectNeighbor` we're building the consensus with
- * @param element a result element, only valid if status is 
#GNUNET_SET_STATUS_OK
- * @param current_size current set size
- * @param status see `enum GNUNET_SET_Status`
- */
-static void
-handle_set_union_result (void *cls,
-                        const struct GNUNET_SET_Element *element,
-                         uint64_t current_size,
-                        enum GNUNET_SET_Status status)
-{
-  struct DirectNeighbor *neighbor = cls;
-  struct DirectNeighbor *dn;
-  struct Target *target;
-  const struct Target *ctarget;
-  char *status_str;
-
-  switch (status)
-  {
-  case GNUNET_SET_STATUS_OK:
-    status_str = "GNUNET_SET_STATUS_OK";
-    break;
-  case GNUNET_SET_STATUS_FAILURE:
-    status_str = "GNUNET_SET_STATUS_FAILURE";
-    break;
-  case GNUNET_SET_STATUS_HALF_DONE:
-    status_str = "GNUNET_SET_STATUS_HALF_DONE";
-    break;
-  case GNUNET_SET_STATUS_DONE:
-    status_str = "GNUNET_SET_STATUS_DONE";
-    break;
-  default:
-    status_str = "UNDEFINED";
-    break;
-  }
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Got SET union result: %s\n",
-             status_str);
-  switch (status)
-  {
-  case GNUNET_SET_STATUS_OK:
-    if (sizeof (struct Target) != element->size)
-    {
-      GNUNET_break_op (0);
-      return;
-    }
-    ctarget = element->data;
-    if ( (NULL !=
-          (dn = GNUNET_CONTAINER_multipeermap_get (direct_neighbors,
-                                                   &ctarget->peer))) &&
-         (DIRECT_NEIGHBOR_COST == dn->distance) )
-    {
-      /* this is a direct neighbor of ours, we do not care about routes
-         to this peer */
-      return;
-    }
-    target = GNUNET_new (struct Target);
-    GNUNET_memcpy (target, element->data, sizeof (struct Target));
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "Received information about peer `%s' with distance %u from 
SET\n",
-                GNUNET_i2s (&target->peer),
-                ntohl (target->distance) + 1);
-
-    if (NULL == neighbor->neighbor_table_consensus)
-      neighbor->neighbor_table_consensus
-        = GNUNET_CONTAINER_multipeermap_create (10, GNUNET_NO);
-    if (GNUNET_YES !=
-       GNUNET_CONTAINER_multipeermap_put (neighbor->neighbor_table_consensus,
-                                          &target->peer,
-                                          target,
-                                          
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY))
-    {
-      GNUNET_break_op (0);
-      GNUNET_free (target);
-    }
-    break;
-  case GNUNET_SET_STATUS_FAILURE:
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-               "Failed to establish DV union, will try again later\n");
-    neighbor->set_op = NULL;
-    if (NULL != neighbor->neighbor_table_consensus)
-    {
-      GNUNET_CONTAINER_multipeermap_iterate 
(neighbor->neighbor_table_consensus,
-                                            &free_targets,
-                                            NULL);
-      GNUNET_CONTAINER_multipeermap_destroy 
(neighbor->neighbor_table_consensus);
-      neighbor->neighbor_table_consensus = NULL;
-    }
-    if (0 < memcmp (&neighbor->peer,
-                   &my_identity,
-                   sizeof (struct GNUNET_PeerIdentity)))
-      neighbor->initiate_task = GNUNET_SCHEDULER_add_delayed 
(GNUNET_DV_CONSENSUS_FREQUENCY,
-                                                             
&initiate_set_union,
-                                                             neighbor);
-    break;
-  case GNUNET_SET_STATUS_HALF_DONE:
-    break;
-  case GNUNET_SET_STATUS_DONE:
-    /* we got all of our updates; integrate routing table! */
-    neighbor->target_removed = GNUNET_NO;
-    if (NULL == neighbor->neighbor_table_consensus)
-      neighbor->neighbor_table_consensus = 
GNUNET_CONTAINER_multipeermap_create (10, GNUNET_NO);
-    if (NULL != neighbor->neighbor_table)
-      GNUNET_CONTAINER_multipeermap_iterate (neighbor->neighbor_table,
-                                             &check_target_removed,
-                                             neighbor);
-    if (GNUNET_YES == neighbor->target_removed)
-    {
-      /* check if we got an alternative for the removed routes */
-      schedule_refresh_routes ();
-    }
-    /* add targets that appeared (and check for improved routes) */
-    GNUNET_CONTAINER_multipeermap_iterate (neighbor->neighbor_table_consensus,
-                                           &check_target_added,
-                                           neighbor);
-    if (NULL != neighbor->neighbor_table)
-    {
-      GNUNET_CONTAINER_multipeermap_iterate (neighbor->neighbor_table,
-                                             &free_targets,
-                                             NULL);
-      GNUNET_CONTAINER_multipeermap_destroy (neighbor->neighbor_table);
-      neighbor->neighbor_table = NULL;
-    }
-    neighbor->neighbor_table = neighbor->neighbor_table_consensus;
-    neighbor->neighbor_table_consensus = NULL;
-
-    /* operation done, schedule next run! */
-    neighbor->set_op = NULL;
-    if (0 < memcmp (&neighbor->peer,
-                   &my_identity,
-                   sizeof (struct GNUNET_PeerIdentity)))
-      neighbor->initiate_task = GNUNET_SCHEDULER_add_delayed 
(GNUNET_DV_CONSENSUS_FREQUENCY,
-                                                             
&initiate_set_union,
-                                                             neighbor);
-    break;
-  default:
-    GNUNET_break (0);
-    return;
-  }
-}
-
-
-/**
- * Start creating a new DV set union construction, our neighbour has
- * asked for it (callback for listening peer).
- *
- * @param cls the 'struct DirectNeighbor' of the peer we're building
- *        a routing consensus with
- * @param other_peer the other peer
- * @param context_msg message with application specific information from
- *        the other peer
- * @param request request from the other peer, use GNUNET_SET_accept
- *        to accept it, otherwise the request will be refused
- *        Note that we don't use a return value here, as it is also
- *        necessary to specify the set we want to do the operation with,
- *        whith sometimes can be derived from the context message.
- *        Also necessary to specify the timeout.
- */
-static void
-listen_set_union (void *cls,
-                 const struct GNUNET_PeerIdentity *other_peer,
-                 const struct GNUNET_MessageHeader *context_msg,
-                 struct GNUNET_SET_Request *request)
-{
-  struct DirectNeighbor *neighbor = cls;
-
-  if (NULL == request)
-    return; /* why??? */
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Starting to create consensus with %s\n",
-             GNUNET_i2s (&neighbor->peer));
-  if (NULL != neighbor->set_op)
-  {
-    GNUNET_SET_operation_cancel (neighbor->set_op);
-    neighbor->set_op = NULL;
-  }
-  if (NULL != neighbor->my_set)
-  {
-    GNUNET_SET_destroy (neighbor->my_set);
-    neighbor->my_set = NULL;
-  }
-  neighbor->my_set = GNUNET_SET_create (cfg,
-                                       GNUNET_SET_OPERATION_UNION);
-  neighbor->set_op = GNUNET_SET_accept (request,
-                                       GNUNET_SET_RESULT_ADDED,
-                                        (struct GNUNET_SET_Option[]) {{ 0 }},
-                                       &handle_set_union_result,
-                                       neighbor);
-  neighbor->consensus_insertion_offset = 0;
-  neighbor->consensus_insertion_distance = 0;
-  neighbor->consensus_elements = 0;
-  build_set (neighbor);
-}
-
-
-/**
- * Start creating a new DV set union by initiating the connection.
- *
- * @param cls the `struct DirectNeighbor *` of the peer we're building
- *        a routing consensus with
- */
-static void
-initiate_set_union (void *cls)
-{
-  struct DirectNeighbor *neighbor = cls;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Initiating SET union with peer `%s'\n",
-             GNUNET_i2s (&neighbor->peer));
-  neighbor->initiate_task = NULL;
-  neighbor->my_set = GNUNET_SET_create (cfg,
-                                       GNUNET_SET_OPERATION_UNION);
-  neighbor->set_op = GNUNET_SET_prepare (&neighbor->peer,
-                                         &neighbor->real_session_id,
-                                         NULL,
-                                         GNUNET_SET_RESULT_ADDED,
-                                         (struct GNUNET_SET_Option[]) {{ 0 }},
-                                         &handle_set_union_result,
-                                         neighbor);
-  neighbor->consensus_insertion_offset = 0;
-  neighbor->consensus_insertion_distance = 0;
-  neighbor->consensus_elements = 0;
-  build_set (neighbor);
-}
-
-
-/**
- * Check that @a rm is well-formed.
- *
- * @param cls closure
- * @param rm the message
- * @return #GNUNET_OK if @a rm is well-formed.
- */
-static int
-check_dv_route_message (void *cls,
-                       const struct RouteMessage *rm)
-{
-  const struct GNUNET_MessageHeader *payload;
-
-  if (ntohs (rm->header.size) < sizeof (struct RouteMessage) + sizeof (struct 
GNUNET_MessageHeader))
-  {
-    GNUNET_break_op (0);
-    return GNUNET_SYSERR;
-  }
-  payload = (const struct GNUNET_MessageHeader *) &rm[1];
-  if (ntohs (rm->header.size) != sizeof (struct RouteMessage) + ntohs 
(payload->size))
-  {
-    GNUNET_break_op (0);
-    return GNUNET_SYSERR;
-  }
-  return GNUNET_OK;
-}
-
-
-/**
- * Core handler for DV data messages.  Whatever this message
- * contains all we really have to do is rip it out of its
- * DV layering and give it to our pal the DV plugin to report
- * in with.
- *
- * @param cls closure
- * @param rm the message
- */
-static void
-handle_dv_route_message (void *cls,
-                        const struct RouteMessage *rm)
-{
-  struct DirectNeighbor *neighbor = cls;
-  const struct GNUNET_MessageHeader *payload;
-  struct Route *route;
-  struct DirectNeighbor *nneighbor;
-  struct DirectNeighbor *dn;
-  struct Target *target;
-  uint32_t distance;
-  char me[5];
-  char src[5];
-  char prev[5];
-  char dst[5];
-
-  distance = ntohl (rm->distance);
-  payload = (const struct GNUNET_MessageHeader *) &rm[1];
-  strncpy (prev, GNUNET_i2s (&neighbor->peer), 4);
-  strncpy (me, GNUNET_i2s (&my_identity), 4);
-  strncpy (src, GNUNET_i2s (&rm->sender), 4);
-  strncpy (dst, GNUNET_i2s (&rm->target), 4);
-  prev[4] = me[4] = src[4] = dst[4] = '\0';
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Handling DV message with %u bytes payload of type %u from %s to 
%s routed by %s to me (%s @ hop %u)\n",
-              (unsigned int) (ntohs (rm->header.size) - sizeof (struct 
RouteMessage)),
-              ntohs (payload->type),
-              src,
-             dst,
-              prev,
-             me,
-              (unsigned int) distance + 1);
-
-  if (0 == memcmp (&rm->target,
-                  &my_identity,
-                  sizeof (struct GNUNET_PeerIdentity)))
-  {
-    if ((NULL !=
-        (dn = GNUNET_CONTAINER_multipeermap_get (direct_neighbors,
-                                                 &rm->sender))) &&
-       (DIRECT_NEIGHBOR_COST == dn->distance))
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "Discarding DV message, as %s is a direct neighbor\n",
-                  GNUNET_i2s (&rm->sender));
-      GNUNET_STATISTICS_update (stats,
-                                "# messages discarded (direct neighbor)",
-                                1, GNUNET_NO);
-      return;
-    }
-    /* message is for me, check reverse route! */
-    route = GNUNET_CONTAINER_multipeermap_get (all_routes,
-                                              &rm->sender);
-    if ( (NULL == route) &&
-         (distance < DEFAULT_FISHEYE_DEPTH) )
-    {
-      /* don't have reverse route yet, learn it! */
-      target = GNUNET_new (struct Target);
-      target->peer = rm->sender;
-      target->distance = htonl (distance);
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "Learning sender %s at distance %u from delivery!\n",
-                  GNUNET_i2s (&rm->sender),
-                  (unsigned int) distance + 1);
-      if (NULL == neighbor->neighbor_table)
-        neighbor->neighbor_table = GNUNET_CONTAINER_multipeermap_create (10, 
GNUNET_NO);
-      if (GNUNET_YES !=
-          GNUNET_CONTAINER_multipeermap_put (neighbor->neighbor_table,
-                                             &target->peer,
-                                             target,
-                                             
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY))
-      {
-        GNUNET_break_op (0);
-        GNUNET_free (target);
-        return;
-      }
-      add_new_route (target, neighbor);
-    }
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-               "Delivering %u bytes from %s to myself!\n",
-               ntohs (payload->size),
-                GNUNET_i2s (&rm->sender));
-    send_data_to_plugin (payload,
-                        &rm->sender,
-                        1 + distance);
-    return;
-  }
-  if ( (NULL == GNUNET_CONTAINER_multipeermap_get (direct_neighbors,
-                                                   &rm->sender)) &&
-       (NULL == GNUNET_CONTAINER_multipeermap_get (all_routes,
-                                                   &rm->sender)) )
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "Learning sender %s at distance %u from forwarding!\n",
-                GNUNET_i2s (&rm->sender),
-                1 + distance);
-    target = GNUNET_new (struct Target);
-    target->peer = rm->sender;
-    target->distance = htonl (distance);
-    if (NULL == neighbor->neighbor_table)
-      neighbor->neighbor_table = GNUNET_CONTAINER_multipeermap_create (10, 
GNUNET_NO);
-    if (GNUNET_YES !=
-        GNUNET_CONTAINER_multipeermap_put (neighbor->neighbor_table,
-                                           &target->peer,
-                                           target,
-                                           
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY))
-    {
-      GNUNET_break_op (0);
-      GNUNET_free (target);
-      return;
-    }
-    add_new_route (target, neighbor);
-  }
-
-  route = GNUNET_CONTAINER_multipeermap_get (all_routes,
-                                            &rm->target);
-  if (NULL == route)
-  {
-    nneighbor = GNUNET_CONTAINER_multipeermap_get (direct_neighbors,
-                                                  &rm->target);
-    if (NULL == nneighbor)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "No route to %s, not routing %u bytes!\n",
-                  GNUNET_i2s (&rm->target),
-                  ntohs (payload->size));
-      GNUNET_STATISTICS_update (stats,
-                                "# messages discarded (no route)",
-                                1, GNUNET_NO);
-      return;
-    }
-  }
-  else
-  {
-    nneighbor = route->next_hop;
-  }
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Forwarding message to %s\n",
-             GNUNET_i2s (&nneighbor->peer));
-  forward_payload (nneighbor,
-                  distance + 1,
-                  &rm->sender,
-                  &rm->target,
-                  payload);
-}
-
-
-/**
- * Check that @a msg is well-formed
- *
- * @param cls identification of the client
- * @param message the actual message
- * @return #GNUNET_OK if @a msg is well-formed
- */
-static int
-check_dv_send_message (void *cls,
-                       const struct GNUNET_DV_SendMessage *msg)
-{
-  const struct GNUNET_MessageHeader *payload;
-
-  if (ntohs (msg->header.size) < sizeof (struct GNUNET_DV_SendMessage) +
-      sizeof (struct GNUNET_MessageHeader))
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  payload = (const struct GNUNET_MessageHeader *) &msg[1];
-  if (ntohs (msg->header.size) != sizeof (struct GNUNET_DV_SendMessage) + 
ntohs (payload->size))
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  return GNUNET_OK;
-}
-
-
-/**
- * Service server's handler for message send requests (which come
- * bubbling up to us through the DV plugin).
- *
- * @param cls identification of the client
- * @param message the actual message
- */
-static void
-handle_dv_send_message (void *cls,
-                        const struct GNUNET_DV_SendMessage *msg)
-{
-  struct GNUNET_SERVICE_Client *client = cls;
-  struct Route *route;
-  const struct GNUNET_MessageHeader *payload;
-
-  payload = (const struct GNUNET_MessageHeader *) &msg[1];
-  route = GNUNET_CONTAINER_multipeermap_get (all_routes,
-                                            &msg->target);
-  if (NULL == route)
-  {
-    /* got disconnected */
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "No route to %s, dropping local message of type %u\n",
-                GNUNET_i2s (&msg->target),
-                ntohs (payload->type));
-    GNUNET_STATISTICS_update (stats,
-                             "# local messages discarded (no route)",
-                             1, GNUNET_NO);
-    GNUNET_SERVICE_client_continue (client);
-    return;
-  }
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Forwarding %u bytes of type %u to %s\n",
-             ntohs (payload->size),
-              ntohs (payload->type),
-             GNUNET_i2s (&msg->target));
-
-  forward_payload (route->next_hop,
-                  0 /* first hop, distance is zero */,
-                  &my_identity,
-                  &msg->target,
-                  payload);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-/**
- * Cleanup all of the data structures associated with a given neighbor.
- *
- * @param neighbor neighbor to clean up
- */
-static void
-cleanup_neighbor (struct DirectNeighbor *neighbor)
-{
-  handle_direct_disconnect (neighbor);
-  GNUNET_assert (GNUNET_YES ==
-                GNUNET_CONTAINER_multipeermap_remove (direct_neighbors,
-                                                      &neighbor->peer,
-                                                      neighbor));
-  GNUNET_free (neighbor);
-}
-
-
-/**
- * Method called whenever a given peer disconnects.
- *
- * @param cls closure
- * @param peer peer identity this notification is about
- * @param internal_cls the corresponding `struct DirectNeighbor`
- */
-static void
-handle_core_disconnect (void *cls,
-                       const struct GNUNET_PeerIdentity *peer,
-                       void *internal_cls)
-{
-  struct DirectNeighbor *neighbor = internal_cls;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Received core peer disconnect message for peer `%s'!\n",
-             GNUNET_i2s (peer));
-  /* Check for disconnect from self message */
-  if (NULL == neighbor)
-    return;
-  GNUNET_break (GNUNET_YES == neighbor->connected);
-  neighbor->connected = GNUNET_NO;
-  if (DIRECT_NEIGHBOR_COST == neighbor->distance)
-  {
-    GNUNET_STATISTICS_update (stats,
-                             "# peers connected (1-hop)",
-                             -1,
-                             GNUNET_NO);
-  }
-  cleanup_neighbor (neighbor);
-  if (GNUNET_YES == in_shutdown)
-    return;
-  schedule_refresh_routes ();
-}
-
-
-/**
- * Multipeermap iterator for freeing routes.  Should never be called.
- *
- * @param cls NULL
- * @param key key value stored under
- * @param value the route to be freed
- * @return #GNUNET_YES to continue iteration, #GNUNET_NO to stop
- */
-static int
-free_route (void *cls,
-            const struct GNUNET_PeerIdentity *key,
-            void *value)
-{
-  struct Route *route = value;
-
-  GNUNET_break (0);
-  GNUNET_assert (GNUNET_YES ==
-                GNUNET_CONTAINER_multipeermap_remove (all_routes, key, value));
-  release_route (route);
-  send_disconnect_to_plugin (&route->target.peer);
-  GNUNET_free (route);
-  return GNUNET_YES;
-}
-
-
-/**
- * Multipeermap iterator for freeing direct neighbors. Should never be called.
- *
- * @param cls NULL
- * @param key key value stored under
- * @param value the direct neighbor to be freed
- * @return #GNUNET_YES to continue iteration, #GNUNET_NO to stop
- */
-static int
-free_direct_neighbors (void *cls,
-                       const struct GNUNET_PeerIdentity *key,
-                       void *value)
-{
-  struct DirectNeighbor *neighbor = value;
-
-  cleanup_neighbor (neighbor);
-  return GNUNET_YES;
-}
-
-
-/**
- * Task run during shutdown.
- *
- * @param cls unused
- */
-static void
-shutdown_task (void *cls)
-{
-  unsigned int i;
-
-  in_shutdown = GNUNET_YES;
-  GNUNET_assert (NULL != core_api);
-  GNUNET_CORE_disconnect (core_api);
-  core_api = NULL;
-  GNUNET_ATS_performance_done (ats);
-  ats = NULL;
-  GNUNET_CONTAINER_multipeermap_iterate (direct_neighbors,
-                                         &free_direct_neighbors,
-                                        NULL);
-  GNUNET_CONTAINER_multipeermap_iterate (all_routes,
-                                         &free_route,
-                                        NULL);
-  GNUNET_CONTAINER_multipeermap_destroy (direct_neighbors);
-  GNUNET_CONTAINER_multipeermap_destroy (all_routes);
-  GNUNET_STATISTICS_destroy (stats, GNUNET_NO);
-  stats = NULL;
-  GNUNET_notification_context_destroy (nc);
-  nc = NULL;
-  for (i=0;i<DEFAULT_FISHEYE_DEPTH;i++)
-  {
-    GNUNET_array_grow (consensi[i].targets,
-                      consensi[i].array_length,
-                      0);
-  }
-  if (NULL != rr_task)
-  {
-    GNUNET_SCHEDULER_cancel (rr_task);
-    rr_task = NULL;
-  }
-}
-
-
-/**
- * Notify newly connected client about an existing route.
- *
- * @param cls the `struct GNUNET_SERVICE_Client *`
- * @param key peer identity
- * @param value the `struct Route *`
- * @return #GNUNET_OK (continue to iterate)
- */
-static int
-notify_client_about_route (void *cls,
-                           const struct GNUNET_PeerIdentity *key,
-                           void *value)
-{
-  struct GNUNET_SERVICE_Client *client = cls;
-  struct Route *route = value;
-  struct GNUNET_MQ_Envelope *env;
-  struct GNUNET_DV_ConnectMessage *cm;
-
-  env = GNUNET_MQ_msg (cm,
-                       GNUNET_MESSAGE_TYPE_DV_CONNECT);
-  cm->distance = htonl (route->target.distance);
-  cm->peer = route->target.peer;
-  GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client),
-                  env);
-  return GNUNET_OK;
-}
-
-
-/**
- * Handle START-message.  This is the first message sent to us
- * by the client (can only be one!).
- *
- * @param cls closure (always NULL)
- * @param client identification of the client
- * @param message the actual message
- */
-static void
-handle_start (void *cls,
-              const struct GNUNET_MessageHeader *message)
-{
-  struct GNUNET_SERVICE_Client *client = cls;
-
-  GNUNET_notification_context_add (nc,
-                                   GNUNET_SERVICE_client_get_mq (client));
-  GNUNET_SERVICE_client_continue (client);
-  GNUNET_CONTAINER_multipeermap_iterate (all_routes,
-                                        &notify_client_about_route,
-                                        client);
-}
-
-
-/**
- * Called on core init.
- *
- * @param cls unused
- * @param identity this peer's identity
- */
-static void
-core_init (void *cls,
-           const struct GNUNET_PeerIdentity *identity)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "I am peer: %s\n",
-              GNUNET_i2s (identity));
-  my_identity = *identity;
-}
-
-
-/**
- * Process dv requests.
- *
- * @param cls closure
- * @param c configuration to use
- * @param service the initialized service
- */
-static void
-run (void *cls,
-     const struct GNUNET_CONFIGURATION_Handle *c,
-     struct GNUNET_SERVICE_Handle *service)
-{
-  struct GNUNET_MQ_MessageHandler core_handlers[] = {
-    GNUNET_MQ_hd_var_size (dv_route_message,
-                           GNUNET_MESSAGE_TYPE_DV_ROUTE,
-                           struct RouteMessage,
-                           NULL),
-    GNUNET_MQ_handler_end ()
-  };
-  in_shutdown = GNUNET_NO;
-  cfg = c;
-  direct_neighbors = GNUNET_CONTAINER_multipeermap_create (128,
-                                                          GNUNET_NO);
-  all_routes = GNUNET_CONTAINER_multipeermap_create (65536,
-                                                    GNUNET_NO);
-  core_api = GNUNET_CORE_connect (cfg,
-                                 NULL,
-                                 &core_init,
-                                 &handle_core_connect,
-                                 &handle_core_disconnect,
-                                 core_handlers);
-
-  if (NULL == core_api)
-    return;
-  ats = GNUNET_ATS_performance_init (cfg,
-                                    &handle_ats_update,
-                                    NULL);
-  if (NULL == ats)
-  {
-    GNUNET_CORE_disconnect (core_api);
-    core_api = NULL;
-    return;
-  }
-  nc = GNUNET_notification_context_create (MAX_QUEUE_SIZE_PLUGIN);
-  stats = GNUNET_STATISTICS_create ("dv",
-                                   cfg);
-  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
-                                NULL);
-}
-
-
-/**
- * Callback called when a client connects to the service.
- *
- * @param cls closure for the service
- * @param c the new client that connected to the service
- * @param mq the message queue used to send messages to the client
- * @return @a c
- */
-static void *
-client_connect_cb (void *cls,
-                  struct GNUNET_SERVICE_Client *c,
-                  struct GNUNET_MQ_Handle *mq)
-{
-  return c;
-}
-
-
-/**
- * Callback called when a client disconnected from the service
- *
- * @param cls closure for the service
- * @param c the client that disconnected
- * @param internal_cls should be equal to @a c
- */
-static void
-client_disconnect_cb (void *cls,
-                     struct GNUNET_SERVICE_Client *c,
-                     void *internal_cls)
-{
-  GNUNET_assert (c == internal_cls);
-}
-
-
-/**
- * Define "main" method using service macro.
- */
-GNUNET_SERVICE_MAIN
-("dv",
- GNUNET_SERVICE_OPTION_NONE,
- &run,
- &client_connect_cb,
- &client_disconnect_cb,
- NULL,
- GNUNET_MQ_hd_fixed_size (start,
-                         GNUNET_MESSAGE_TYPE_DV_START,
-                         struct GNUNET_MessageHeader,
-                         NULL),
- GNUNET_MQ_hd_var_size (dv_send_message,
-                        GNUNET_MESSAGE_TYPE_DV_SEND,
-                        struct GNUNET_DV_SendMessage,
-                        NULL),
- GNUNET_MQ_handler_end ());
-
-
-/* end of gnunet-service-dv.c */
diff --git a/src/dv/plugin_transport_dv.c b/src/dv/plugin_transport_dv.c
deleted file mode 100644
index a99c170d7..000000000
--- a/src/dv/plugin_transport_dv.c
+++ /dev/null
@@ -1,910 +0,0 @@
-/*
-     This file is part of GNUnet
-     Copyright (C) 2002--2014 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     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
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @file dv/plugin_transport_dv.c
- * @brief DV transport service, takes incoming DV requests and deals with
- * the DV service
- * @author Nathan Evans
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_protocols.h"
-#include "gnunet_statistics_service.h"
-#include "gnunet_dv_service.h"
-#include "gnunet_transport_service.h"
-#include "gnunet_transport_plugin.h"
-#include "dv.h"
-
-
-#define LOG(kind,...) GNUNET_log_from (kind, "transport-dv",__VA_ARGS__)
-
-
-/**
- * Encapsulation of all of the state of the plugin.
- */
-struct Plugin;
-
-
-/**
- * Session handle for connections.
- */
-struct GNUNET_ATS_Session
-{
-  /**
-   * Pointer to the global plugin struct.
-   */
-  struct Plugin *plugin;
-
-  /**
-   * Address we use for the other peer.
-   */
-  struct GNUNET_HELLO_Address *address;
-
-  /**
-   * To whom are we talking to.
-   */
-  struct GNUNET_PeerIdentity sender;
-
-  /**
-   * Number of bytes waiting for transmission to this peer.
-   * FIXME: not set yet.
-   */
-  unsigned long long bytes_in_queue;
-
-  /**
-   * Number of messages waiting for transmission to this peer.
-   * FIXME: not set yet.
-   */
-  unsigned int msgs_in_queue;
-
-  /**
-   * Current distance to the given peer.
-   */
-  uint32_t distance;
-
-  /**
-   * Current network the next hop peer is located in
-   */
-  enum GNUNET_NetworkType network;
-
-  /**
-   * Does the transport service know about this session (and we thus
-   * need to call `session_end` when it is released?)
-   */
-  int active;
-
-};
-
-
-/**
- * Encapsulation of all of the state of the plugin.
- */
-struct Plugin
-{
-  /**
-   * Our environment.
-   */
-  struct GNUNET_TRANSPORT_PluginEnvironment *env;
-
-  /**
-   * Hash map of sessions (active and inactive).
-   */
-  struct GNUNET_CONTAINER_MultiPeerMap *sessions;
-
-  /**
-   * Copy of the handler array where the closures are
-   * set to this struct's instance.
-   */
-  struct GNUNET_SERVER_MessageHandler *handlers;
-
-  /**
-   * Handle to the DV service
-   */
-  struct GNUNET_DV_ServiceHandle *dvh;
-
-  /**
-   * Tokenizer for boxed messages.
-   */
-  struct GNUNET_SERVER_MessageStreamTokenizer *mst;
-
-  /**
-   * Function to call about session status changes.
-   */
-  GNUNET_TRANSPORT_SessionInfoCallback sic;
-
-  /**
-   * Closure for @e sic.
-   */
-  void *sic_cls;
-};
-
-
-/**
- * If a session monitor is attached, notify it about the new
- * session state.
- *
- * @param plugin our plugin
- * @param session session that changed state
- * @param state new state of the session
- */
-static void
-notify_session_monitor (struct Plugin *plugin,
-                        struct GNUNET_ATS_Session *session,
-                        enum GNUNET_TRANSPORT_SessionState state)
-{
-  struct GNUNET_TRANSPORT_SessionInfo info;
-
-  if (NULL == plugin->sic)
-    return;
-  memset (&info, 0, sizeof (info));
-  info.state = state;
-  info.is_inbound = GNUNET_SYSERR; /* hard to say */
-  info.num_msg_pending = session->msgs_in_queue;
-  info.num_bytes_pending = session->bytes_in_queue;
-  /* info.receive_delay remains zero as this is not supported by DV
-     (cannot selectively not receive from 'core') */
-  info.session_timeout = GNUNET_TIME_UNIT_FOREVER_ABS;
-  info.address = session->address;
-  plugin->sic (plugin->sic_cls,
-               session,
-               &info);
-}
-
-
-/**
- * Notify transport service about the change in distance.
- *
- * @param session session where the distance changed
- */
-static void
-notify_distance_change (struct GNUNET_ATS_Session *session)
-{
-  struct Plugin *plugin = session->plugin;
-
-  if (GNUNET_YES != session->active)
-    return;
-  plugin->env->update_address_distance (plugin->env->cls,
-                                        session->address,
-                                        session->distance);
-}
-
-
-/**
- * Function called by MST on each message from the box.
- *
- * @param cls closure with the `struct Plugin *`
- * @param client identification of the client (with the 'struct 
GNUNET_ATS_Session')
- * @param message the actual message
- * @return #GNUNET_OK on success
- */
-static int
-unbox_cb (void *cls,
-         void *client,
-         const struct GNUNET_MessageHeader *message)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_ATS_Session *session = client;
-
-  session->active = GNUNET_YES;
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Delivering message of type %u with %u bytes from peer `%s'\n",
-       ntohs (message->type),
-       ntohs (message->size),
-       GNUNET_i2s (&session->sender));
-  plugin->env->receive (plugin->env->cls,
-                        session->address,
-                        session,
-                        message);
-  plugin->env->update_address_distance (plugin->env->cls,
-                                        session->address,
-                                        session->distance);
-  return GNUNET_OK;
-}
-
-
-/**
- * Handler for messages received from the DV service.
- *
- * @param cls closure with the plugin
- * @param sender sender of the message
- * @param distance how far did the message travel
- * @param msg actual message payload
- */
-static void
-handle_dv_message_received (void *cls,
-                           const struct GNUNET_PeerIdentity *sender,
-                           uint32_t distance,
-                           const struct GNUNET_MessageHeader *msg)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_ATS_Session *session;
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Received DV_MESSAGE_RECEIVED message for peer `%s': new distance %u\n",
-       GNUNET_i2s (sender),
-       distance);
-  session = GNUNET_CONTAINER_multipeermap_get (plugin->sessions,
-                                              sender);
-  if (NULL == session)
-  {
-    GNUNET_break (0);
-    return;
-  }
-  if (GNUNET_MESSAGE_TYPE_DV_BOX == ntohs (msg->type))
-  {
-    /* need to unbox using MST */
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Unboxing DV message using MST\n");
-    GNUNET_SERVER_mst_receive (plugin->mst,
-                              session,
-                              (const char *) &msg[1],
-                              ntohs (msg->size) - sizeof (struct 
GNUNET_MessageHeader),
-                              GNUNET_YES,
-                              GNUNET_NO);
-    return;
-  }
-  session->active = GNUNET_YES;
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Delivering message of type %u with %u bytes from peer `%s'\n",
-       ntohs (msg->type),
-       ntohs (msg->size),
-       GNUNET_i2s (sender));
-  plugin->env->receive (plugin->env->cls,
-                        session->address,
-                        session,
-                        msg);
-  plugin->env->update_address_distance (plugin->env->cls,
-                                        session->address,
-                                        session->distance);
-}
-
-
-/**
- * Function called if DV starts to be able to talk to a peer.
- *
- * @param cls closure with `struct Plugin *`
- * @param peer newly connected peer
- * @param distance distance to the peer
- * @param network the network the next hop is located in
- */
-static void
-handle_dv_connect (void *cls,
-                  const struct GNUNET_PeerIdentity *peer,
-                  uint32_t distance,
-                   enum GNUNET_NetworkType network)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_ATS_Session *session;
-
-  GNUNET_break (GNUNET_NT_UNSPECIFIED != network);
-  /**
-   * This requires transport plugin to be linked to libgnunetats.
-   * If you remove it, also remove libgnunetats linkage from Makefile.am
-   */
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Received DV_CONNECT message for peer `%s' with next hop in network 
%s\n",
-       GNUNET_i2s (peer),
-       GNUNET_NT_to_string (network));
-
-  session = GNUNET_CONTAINER_multipeermap_get (plugin->sessions,
-                                              peer);
-  if (NULL != session)
-  {
-    GNUNET_break (0);
-    session->distance = distance;
-    notify_distance_change (session);
-    return; /* nothing to do */
-  }
-
-  session = GNUNET_new (struct GNUNET_ATS_Session);
-  session->address = GNUNET_HELLO_address_allocate (peer, "dv",
-                                                    NULL, 0,
-                                                    
GNUNET_HELLO_ADDRESS_INFO_NONE);
-  session->sender = *peer;
-  session->plugin = plugin;
-  session->distance = distance;
-  session->network = network;
-  GNUNET_assert(GNUNET_YES ==
-                GNUNET_CONTAINER_multipeermap_put (plugin->sessions,
-                                                   &session->sender, session,
-                                                   
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Creating new DV session %p for peer `%s' at distance %u\n",
-       session,
-       GNUNET_i2s (peer),
-       distance);
-
-  session->active = GNUNET_YES;
-  plugin->env->session_start (plugin->env->cls,
-                              session->address,
-                              session,
-                              network);
-  plugin->env->update_address_distance (plugin->env->cls,
-                                        session->address,
-                                        session->distance);
-
-  notify_session_monitor (session->plugin,
-                          session,
-                          GNUNET_TRANSPORT_SS_UP);
-}
-
-
-/**
- * Function called if DV distance to a peer is changed.
- *
- * @param cls closure with `struct Plugin *`
- * @param peer connected peer
- * @param distance new distance to the peer
- * @param network network type used for the connection
- */
-static void
-handle_dv_distance_changed (void *cls,
-                           const struct GNUNET_PeerIdentity *peer,
-                           uint32_t distance,
-                            enum GNUNET_NetworkType network)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_ATS_Session *session;
-
-  GNUNET_break (GNUNET_NT_UNSPECIFIED != network);
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Received `%s' message for peer `%s': new distance %u\n",
-       "DV_DISTANCE_CHANGED",
-       GNUNET_i2s (peer),
-       distance);
-  session = GNUNET_CONTAINER_multipeermap_get (plugin->sessions,
-                                              peer);
-  if (NULL == session)
-  {
-    GNUNET_break (0);
-    handle_dv_connect (plugin, peer, distance, network);
-    return;
-  }
-  session->distance = distance;
-  notify_distance_change (session);
-}
-
-
-/**
- * Release session object and clean up associated resources.
- *
- * @param session session to clean up
- */
-static void
-free_session (struct GNUNET_ATS_Session *session)
-{
-  struct Plugin *plugin = session->plugin;
-
-  GNUNET_assert (GNUNET_YES ==
-                GNUNET_CONTAINER_multipeermap_remove (plugin->sessions,
-                                                      &session->sender,
-                                                      session));
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Freeing session %p for peer `%s'\n",
-       session,
-       GNUNET_i2s (&session->sender));
-  if (GNUNET_YES == session->active)
-  {
-    notify_session_monitor (session->plugin,
-                           session,
-                           GNUNET_TRANSPORT_SS_DONE);
-    plugin->env->session_end (plugin->env->cls,
-                             session->address,
-                             session);
-    session->active = GNUNET_NO;
-  }
-  GNUNET_HELLO_address_free (session->address);
-  GNUNET_free (session);
-}
-
-
-/**
- * Function called if DV is no longer able to talk to a peer.
- *
- * @param cls closure with `struct Plugin *`
- * @param peer peer that disconnected
- */
-static void
-handle_dv_disconnect (void *cls,
-                      const struct GNUNET_PeerIdentity *peer)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_ATS_Session *session;
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Received `%s' message for peer `%s'\n",
-       "DV_DISCONNECT",
-       GNUNET_i2s (peer));
-  session = GNUNET_CONTAINER_multipeermap_get (plugin->sessions,
-                                              peer);
-  if (NULL == session)
-    return; /* nothing to do */
-  free_session (session);
-}
-
-
-/**
- * Function that can be used by the transport service to transmit
- * a message using the plugin.
- *
- * @param cls closure
- * @param session the session used
- * @param priority how important is the message
- * @param msgbuf the message to transmit
- * @param msgbuf_size number of bytes in 'msgbuf'
- * @param timeout when should we time out
- * @param cont continuation to call once the message has
- *        been transmitted (or if the transport is ready
- *        for the next transmission call; or if the
- *        peer disconnected...)
- * @param cont_cls closure for @a cont
- * @return number of bytes used (on the physical network, with overheads);
- *         -1 on hard errors (i.e. address invalid); 0 is a legal value
- *         and does NOT mean that the message was not transmitted (DV)
- */
-static ssize_t
-dv_plugin_send (void *cls,
-               struct GNUNET_ATS_Session *session,
-                const char *msgbuf,
-                size_t msgbuf_size,
-                unsigned int priority,
-                struct GNUNET_TIME_Relative timeout,
-                GNUNET_TRANSPORT_TransmitContinuation cont,
-                void *cont_cls)
-{
-  struct Plugin *plugin = cls;
-  const struct GNUNET_MessageHeader *msg;
-  struct GNUNET_MessageHeader *box;
-
-  box = NULL;
-  msg = (const struct GNUNET_MessageHeader *) msgbuf;
-  if (ntohs (msg->size) != msgbuf_size)
-  {
-    /* need to box */
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Boxing DV message\n");
-    box = GNUNET_malloc (sizeof (struct GNUNET_MessageHeader) + msgbuf_size);
-    box->type = htons (GNUNET_MESSAGE_TYPE_DV_BOX);
-    box->size = htons (sizeof (struct GNUNET_MessageHeader) + msgbuf_size);
-    GNUNET_memcpy (&box[1], msgbuf, msgbuf_size);
-    msg = box;
-  }
-  GNUNET_DV_send (plugin->dvh,
-                  &session->sender,
-                  msg);
-  cont (cont_cls,
-        &session->sender,
-        GNUNET_OK,
-        msgbuf_size, 0);
-  GNUNET_free_non_null (box);
-  return 0; /* DV */
-}
-
-
-/**
- * Function that can be used to force the plugin to disconnect
- * from the given peer and cancel all previous transmissions
- * (and their continuations).
- *
- * @param cls closure with the `struct Plugin *`
- * @param target peer from which to disconnect
- */
-static void
-dv_plugin_disconnect_peer (void *cls,
-                           const struct GNUNET_PeerIdentity *target)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_ATS_Session *session;
-
-  session = GNUNET_CONTAINER_multipeermap_get (plugin->sessions,
-                                              target);
-  if (NULL == session)
-    return; /* nothing to do */
-  session->active = GNUNET_NO;
-}
-
-
-/**
- * Function that can be used to force the plugin to disconnect
- * from the given peer and cancel all previous transmissions
- * (and their continuations).
- *
- * @param cls closure with the `struct Plugin *`
- * @param session which session to disconnect
- * @return #GNUNET_OK
- */
-static int
-dv_plugin_disconnect_session (void *cls,
-                              struct GNUNET_ATS_Session *session)
-{
-  session->active = GNUNET_NO;
-  return GNUNET_OK;
-}
-
-
-/**
- * Convert the transports address to a nice, human-readable
- * format.
- *
- * @param cls closure
- * @param type name of the transport that generated the address
- * @param addr one of the addresses of the host, NULL for the last address
- *        the specific address format depends on the transport
- * @param addrlen length of the address
- * @param numeric should (IP) addresses be displayed in numeric form?
- * @param timeout after how long should we give up?
- * @param asc function to call on each string
- * @param asc_cls closure for @a asc
- */
-static void
-dv_plugin_address_pretty_printer (void *cls,
-                                  const char *type,
-                                  const void *addr,
-                                  size_t addrlen,
-                                  int numeric,
-                                  struct GNUNET_TIME_Relative timeout,
-                                  GNUNET_TRANSPORT_AddressStringCallback asc,
-                                  void *asc_cls)
-{
-  if ( (0 == addrlen) &&
-       (0 == strcmp (type, "dv")) )
-    asc (asc_cls,
-         "dv",
-         GNUNET_OK);
-  else
-    asc (asc_cls,
-         NULL,
-         GNUNET_SYSERR);
-  asc (asc_cls,
-       NULL,
-       GNUNET_OK);
-}
-
-
-/**
- * Convert the DV address to a pretty string.
- *
- * @param cls closure
- * @param addr the (hopefully) DV address
- * @param addrlen the length of the @a addr
- * @return string representing the DV address
- */
-static const char *
-dv_plugin_address_to_string (void *cls,
-                             const void *addr,
-                             size_t addrlen)
-{
-  if (0 != addrlen)
-  {
-    GNUNET_break (0); /* malformed */
-    return NULL;
-  }
-  return "dv";
-}
-
-
-/**
- * Another peer has suggested an address for this peer and transport
- * plugin.  Check that this could be a valid address.  This function
- * is not expected to 'validate' the address in the sense of trying to
- * connect to it but simply to see if the binary format is technically
- * legal for establishing a connection to this peer (and make sure that
- * the address really corresponds to our network connection/settings
- * and not some potential man-in-the-middle).
- *
- * @param cls closure
- * @param addr pointer to the address
- * @param addrlen length of @a addr
- * @return #GNUNET_OK if this is a plausible address for this peer
- *         and transport, #GNUNET_SYSERR if not
- *
- */
-static int
-dv_plugin_check_address (void *cls,
-                         const void *addr,
-                         size_t addrlen)
-{
-  if (0 != addrlen)
-    return GNUNET_SYSERR;
-  return GNUNET_OK;
-}
-
-
-/**
- * Create a new session to transmit data to the target
- * This session will used to send data to this peer and the plugin will
- * notify us by calling the env->session_end function
- *
- * @param cls the plugin
- * @param address the address
- * @return the session if the address is valid, NULL otherwise
- */
-static struct GNUNET_ATS_Session *
-dv_get_session (void *cls,
-               const struct GNUNET_HELLO_Address *address)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_ATS_Session *session;
-
-  if (0 != address->address_length)
-    return NULL;
-  session = GNUNET_CONTAINER_multipeermap_get (plugin->sessions,
-                                              &address->peer);
-  if (NULL == session)
-    return NULL; /* not valid right now */
-  session->active = GNUNET_YES;
-  return session;
-}
-
-
-/**
- * Function called to convert a string address to
- * a binary address.
- *
- * @param cls closure ('struct Plugin*')
- * @param addr string address
- * @param addrlen length of the @a addr including \0 termination
- * @param buf location to store the buffer
- *        If the function returns #GNUNET_SYSERR, its contents are undefined.
- * @param added length of created address
- * @return #GNUNET_OK on success, #GNUNET_SYSERR on failure
- */
-static int
-dv_plugin_string_to_address (void *cls,
-                            const char *addr,
-                            uint16_t addrlen,
-                            void **buf,
-                            size_t *added)
-{
-  if ( (addrlen == 3) &&
-       (0 == strcmp ("dv", addr)) )
-  {
-    *added = 0;
-    return GNUNET_OK;
-  }
-  return GNUNET_SYSERR;
-}
-
-
-/**
- * Function that will be called whenever the transport service wants to
- * notify the plugin that a session is still active and in use and
- * therefore the session timeout for this session has to be updated
- *
- * @param cls closure (`struct Plugin *`)
- * @param peer which peer was the session for
- * @param session which session is being updated
- */
-static void
-dv_plugin_update_session_timeout (void *cls,
-                                  const struct GNUNET_PeerIdentity *peer,
-                                  struct GNUNET_ATS_Session *session)
-{
-  /* DV currently doesn't time out like "normal" plugins,
-     so it should be safe to do nothing, right?
-     (or should we add an internal timeout?) */
-}
-
-
-/**
- * Function to obtain the network type for a session
- * FIXME: we should probably look at the network type
- * used by the next hop here.  Or find some other way
- * to properly allow ATS-DV resource allocation.
- *
- * @param cls closure (`struct Plugin *`)
- * @param session the session
- * @return the network type
- */
-static enum GNUNET_NetworkType
-dv_get_network (void *cls,
-               struct GNUNET_ATS_Session *session)
-{
-  GNUNET_assert (NULL != session);
-  return session->network;
-}
-
-
-/**
- * Function obtain the network type for an address.
- *
- * @param cls closure (`struct Plugin *`)
- * @param address the address
- * @return the network type
- */
-static enum GNUNET_NetworkType
-dv_plugin_get_network_for_address (void *cls,
-                                   const struct GNUNET_HELLO_Address *address)
-{
-  return GNUNET_NT_WAN; /* FOR NOW */
-}
-
-
-/**
- * Function that is called to get the keepalive factor.
- * #GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT is divided by this number to
- * calculate the interval between keepalive packets.
- *
- * @param cls closure with the `struct Plugin`
- * @return keepalive factor
- */
-static unsigned int
-dv_plugin_query_keepalive_factor (void *cls)
-{
-  return 3;
-}
-
-
-/**
- * Return information about the given session to the
- * monitor callback.
- *
- * @param cls the `struct Plugin` with the monitor callback (`sic`)
- * @param peer peer we send information about
- * @param value our `struct GNUNET_ATS_Session` to send information about
- * @return #GNUNET_OK (continue to iterate)
- */
-static int
-send_session_info_iter (void *cls,
-                        const struct GNUNET_PeerIdentity *peer,
-                        void *value)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_ATS_Session *session = value;
-
-  if (GNUNET_YES != session->active)
-    return GNUNET_OK;
-  notify_session_monitor (plugin,
-                          session,
-                          GNUNET_TRANSPORT_SS_UP);
-  return GNUNET_OK;
-}
-
-
-/**
- * Begin monitoring sessions of a plugin.  There can only
- * be one active monitor per plugin (i.e. if there are
- * multiple monitors, the transport service needs to
- * multiplex the generated events over all of them).
- *
- * @param cls closure of the plugin
- * @param sic callback to invoke, NULL to disable monitor;
- *            plugin will being by iterating over all active
- *            sessions immediately and then enter monitor mode
- * @param sic_cls closure for @a sic
- */
-static void
-dv_plugin_setup_monitor (void *cls,
-                          GNUNET_TRANSPORT_SessionInfoCallback sic,
-                          void *sic_cls)
-{
-  struct Plugin *plugin = cls;
-
-  plugin->sic = sic;
-  plugin->sic_cls = sic_cls;
-  if (NULL != sic)
-  {
-    GNUNET_CONTAINER_multipeermap_iterate (plugin->sessions,
-                                           &send_session_info_iter,
-                                           plugin);
-    /* signal end of first iteration */
-    sic (sic_cls, NULL, NULL);
-  }
-}
-
-
-/**
- * Entry point for the plugin.
- *
- * @param cls closure with the plugin environment
- * @return plugin API
- */
-void *
-libgnunet_plugin_transport_dv_init (void *cls)
-{
-  struct GNUNET_TRANSPORT_PluginEnvironment *env = cls;
-  struct GNUNET_TRANSPORT_PluginFunctions *api;
-  struct Plugin *plugin;
-
-  plugin = GNUNET_new (struct Plugin);
-  plugin->env = env;
-  plugin->sessions = GNUNET_CONTAINER_multipeermap_create (1024 * 8, 
GNUNET_YES);
-  plugin->mst = GNUNET_SERVER_mst_create (&unbox_cb,
-                                         plugin);
-  plugin->dvh = GNUNET_DV_service_connect (env->cfg,
-                                          plugin,
-                                          &handle_dv_connect,
-                                          &handle_dv_distance_changed,
-                                          &handle_dv_disconnect,
-                                          &handle_dv_message_received);
-  if (NULL == plugin->dvh)
-  {
-    GNUNET_CONTAINER_multipeermap_destroy (plugin->sessions);
-    GNUNET_SERVER_mst_destroy (plugin->mst);
-    GNUNET_free (plugin);
-    return NULL;
-  }
-  api = GNUNET_new (struct GNUNET_TRANSPORT_PluginFunctions);
-  api->cls = plugin;
-  api->send = &dv_plugin_send;
-  api->disconnect_peer = &dv_plugin_disconnect_peer;
-  api->disconnect_session = &dv_plugin_disconnect_session;
-  api->address_pretty_printer = &dv_plugin_address_pretty_printer;
-  api->check_address = &dv_plugin_check_address;
-  api->address_to_string = &dv_plugin_address_to_string;
-  api->string_to_address = &dv_plugin_string_to_address;
-  api->query_keepalive_factor = &dv_plugin_query_keepalive_factor;
-  api->get_session = &dv_get_session;
-  api->get_network = &dv_get_network;
-  api->get_network_for_address = &dv_plugin_get_network_for_address;
-  api->update_session_timeout = &dv_plugin_update_session_timeout;
-  api->setup_monitor = &dv_plugin_setup_monitor;
-  return api;
-}
-
-
-/**
- * Function called to free a session.
- *
- * @param cls NULL
- * @param key unused
- * @param value session to free
- * @return #GNUNET_OK (continue to iterate)
- */
-static int
-free_session_iterator (void *cls,
-                      const struct GNUNET_PeerIdentity *key,
-                      void *value)
-{
-  struct GNUNET_ATS_Session *session = value;
-
-  free_session (session);
-  return GNUNET_OK;
-}
-
-
-/**
- * Exit point from the plugin.
- *
- * @param cls plugin API
- * @return NULL
- */
-void *
-libgnunet_plugin_transport_dv_done (void *cls)
-{
-  struct GNUNET_TRANSPORT_PluginFunctions *api = cls;
-  struct Plugin *plugin = api->cls;
-
-  GNUNET_DV_service_disconnect (plugin->dvh);
-  GNUNET_CONTAINER_multipeermap_iterate (plugin->sessions,
-                                        &free_session_iterator,
-                                        NULL);
-  GNUNET_CONTAINER_multipeermap_destroy (plugin->sessions);
-  GNUNET_SERVER_mst_destroy (plugin->mst);
-  GNUNET_free (plugin);
-  GNUNET_free (api);
-  return NULL;
-}
-
-/* end of plugin_transport_dv.c */
diff --git a/src/dv/template_dv.conf b/src/dv/template_dv.conf
deleted file mode 100644
index d37154261..000000000
--- a/src/dv/template_dv.conf
+++ /dev/null
@@ -1,33 +0,0 @@
-# Peers:
-#
-# `G3FK2T8AMPJ0H556QXEYVTEW409BP3KHPCG99TV66V8NYAS1KEWG'
-# `6DEVS8Y51AT0TGNNHR7A75H47XXYJEFRZXX5RVQ9Q6S7Z49SYXT0'
-# `6YNBKM6TTK64FAG9DF0292AW5JA9CCAC04JTY0HF8XHP635HPBBG'
-# `DK5WZKKDHH06BH1H0DE0Z8CPBTG9AD8P85SF02WW3285AT3V0V50'
-#
-
-[testbed]
-OVERLAY_TOPOLOGY = CLIQUE
-SETUP_TIMEOUT = 3 m
-OPERATION_TIMEOUT = 30 s
-CACHE_SIZE = 0
-
-[transport-blacklist-G3FK2T8AMPJ0H556QXEYVTEW409BP3KHPCG99TV66V8NYAS1KEWG]
-6DEVS8Y51AT0TGNNHR7A75H47XXYJEFRZXX5RVQ9Q6S7Z49SYXT0 = tcp
-
-[transport-blacklist-6DEVS8Y51AT0TGNNHR7A75H47XXYJEFRZXX5RVQ9Q6S7Z49SYXT0]
-G3FK2T8AMPJ0H556QXEYVTEW409BP3KHPCG99TV66V8NYAS1KEWG = tcp
-
-[transport-blacklist-6YNBKM6TTK64FAG9DF0292AW5JA9CCAC04JTY0HF8XHP635HPBBG]
-
-[transport-blacklist-DK5WZKKDHH06BH1H0DE0Z8CPBTG9AD8P85SF02WW3285AT3V0V50]
-
-[PATHS]
-GNUNET_TEST_HOME = $GNUNET_TMP/test-gnunet-dv-testing/
-
-[peerinfo]
-USE_INCLUDED_HELLOS = NO
-
-[nat]
-RETURN_LOCAL_ADDRESSES = YES
-
diff --git a/src/dv/test_transport_blacklist.c 
b/src/dv/test_transport_blacklist.c
deleted file mode 100644
index 4fc9b4908..000000000
--- a/src/dv/test_transport_blacklist.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2009, 2013 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     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
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-/**
- * @file dv/test_transport_blacklist.c
- * @brief base testcase for testing blacklist
- */
-#include "platform.h"
-#include "gnunet_core_service.h"
-#include "gnunet_testbed_service.h"
-
-/**
- * Return value from main, set to 0 on success.
- */
-static int ok;
-
-
-static void
-test_connection (void *cls,
-                 struct GNUNET_TESTBED_RunHandle *h,
-                unsigned int num_peers,
-                struct GNUNET_TESTBED_Peer **peers,
-                 unsigned int links_succeeded,
-                 unsigned int links_failed)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Links successful %u / %u failed\n", 
links_succeeded, links_failed);
-  if ( (4 == num_peers) && (0 == links_failed) )
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-               "Testbed connect peers despite blacklist!\n");
-    ok = 1;
-  }
-  else
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-               "Note that getting a message about a timeout during setup is 
expected for this test.\n");
-  }
-  GNUNET_SCHEDULER_shutdown ();
-}
-
-
-int
-main (int argc, char *argv[])
-{
-  (void) GNUNET_TESTBED_test_run ("test-transport-blacklist",
-                                 "test_transport_blacklist_data.conf",
-                                 4,
-                                 0, NULL, NULL,
-                                 &test_connection, NULL);
-  return ok;
-}
-
-/* end of test_transport_blacklist.c */
diff --git a/src/dv/test_transport_blacklist_data.conf 
b/src/dv/test_transport_blacklist_data.conf
deleted file mode 100644
index ea55a196b..000000000
--- a/src/dv/test_transport_blacklist_data.conf
+++ /dev/null
@@ -1,5 +0,0 @@
address@hidden@ template_dv.conf
-
-[transport]
-PORT = 52565
-PLUGINS = tcp 
diff --git a/src/dv/test_transport_dv.c b/src/dv/test_transport_dv.c
deleted file mode 100644
index 03b6087d5..000000000
--- a/src/dv/test_transport_dv.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2009, 2013 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     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
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-/**
- * @file dv/test_transport_dv.c
- * @brief base testcase for testing distance vector transport
- */
-#include "platform.h"
-#include "gnunet_core_service.h"
-#include "gnunet_testbed_service.h"
-
-/**
- * Return value from main, set to 0 on success.
- */
-static int ok;
-
-struct GNUNET_TESTBED_Operation *topology_op;
-
-static struct GNUNET_SCHEDULER_Task * shutdown_task;
-
-
-static void
-do_shutdown (void *cls)
-{
-  shutdown_task = NULL;
-  if (NULL != topology_op)
-  {
-    GNUNET_TESTBED_operation_done (topology_op);
-    topology_op = NULL;
-  }
-}
-
-
-static void
-topology_completed (void *cls,
-                    unsigned int nsuccess,
-                    unsigned int nfailures)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Links successful %u / %u failed\n",
-              nsuccess,
-              nfailures);
-  GNUNET_TESTBED_operation_done (topology_op);
-  topology_op = NULL;
-
-  if (nfailures > 0)
-  {
-    fprintf (stderr,
-             "Error: links successful %u but %u failed\n",
-             nsuccess,
-             nfailures);
-    ok = 1;
-  }
-  else
-    ok = 0;
-
-  GNUNET_SCHEDULER_shutdown ();
-}
-
-
-static void
-test_connection (void *cls,
-                 struct GNUNET_TESTBED_RunHandle *h,
-                unsigned int num_peers,
-                struct GNUNET_TESTBED_Peer **peers,
-                 unsigned int links_succeeded,
-                 unsigned int links_failed)
-{
-  shutdown_task = GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
-                                                NULL);
-  if (4 != num_peers)
-  {
-    ok = 1;
-    fprintf (stderr,
-             "Only %u out of 4 peers were started ...\n",
-             num_peers);
-  }
-
-  if (0 != links_failed)
-  {
-    /* All peers except DV peers are connected  */
-    fprintf (stderr,
-             "Testbed failed to connect peers (%u links OK, %u links 
failed)\n",
-             links_succeeded,
-             links_failed);
-
-    topology_op = GNUNET_TESTBED_overlay_configure_topology
-      (NULL, num_peers, peers, NULL,
-       &topology_completed, NULL,
-       GNUNET_TESTBED_TOPOLOGY_CLIQUE,
-       GNUNET_TESTBED_TOPOLOGY_OPTION_END);
-    return;
-  }
-
-  ok = 1;
-  fprintf (stderr,
-           "Testbed connected peers, should not happen...\n");
-  GNUNET_SCHEDULER_shutdown ();
-}
-
-
-int
-main (int argc, char *argv[])
-{
-  ok = 1;
-  /* Connecting initial topology */
-  (void) GNUNET_TESTBED_test_run ("test-transport-dv",
-                                 "test_transport_dv_data.conf",
-                                 4,
-                                 0, NULL, NULL,
-                                 &test_connection, NULL);
-  return ok;
-}
-
-/* end of test_transport_dv.c */
diff --git a/src/dv/test_transport_dv_data.conf 
b/src/dv/test_transport_dv_data.conf
deleted file mode 100644
index a21fba8a7..000000000
--- a/src/dv/test_transport_dv_data.conf
+++ /dev/null
@@ -1,19 +0,0 @@
address@hidden@ template_dv.conf
-
-[transport]
-PORT = 52565
-PLUGINS = tcp dv
-#PREFIX = valgrind --leak-check=full --track-fds=yes --leak-resolution=high
-
-[dv]
-START_ON_DEMAND = YES
-# PREFIX = valgrind --leak-check=full --track-fds=yes --leak-resolution=high
-
-[set]
-START_ON_DEMAND = YES
-# PREFIX = valgrind --leak-check=full --track-fds=yes --leak-resolution=high
-
-[core]
-# PREFIX = valgrind --leak-check=full --track-fds=yes --leak-resolution=high
-
-
diff --git a/src/gns/test_gns_nick_shorten.conf 
b/src/gns/test_gns_nick_shorten.conf
deleted file mode 100644
index 317477c80..000000000
--- a/src/gns/test_gns_nick_shorten.conf
+++ /dev/null
@@ -1,24 +0,0 @@
address@hidden@ test_gns_defaults.conf
-
-[PATHS]
-GNUNET_TEST_HOME = $GNUNET_TMP/test-gnunet-gns-peer-1/
-
-[dht]
-START_ON_DEMAND = YES
-
-[transport]
-PLUGINS =
-
-[gns]
-#PREFIX = valgrind --leak-check=full --track-origins=yes
-START_ON_DEMAND = YES
-AUTO_IMPORT_PKEY = YES
-MAX_PARALLEL_BACKGROUND_QUERIES = 10
-DEFAULT_LOOKUP_TIMEOUT = 15 s
-RECORD_PUT_INTERVAL = 1 h
-ZONE_PUBLISH_TIME_WINDOW = 1 h
-DNS_ROOT=PD67SGHF3E0447TU9HADIVU9OM7V4QHTOG0EBU69TFRI2LG63DR0
-#USE_CACHE = NO
-
-[revocation]
-WORKBITS = 1
diff --git a/src/include/Makefile.am b/src/include/Makefile.am
index acff7ef3a..bb7749629 100644
--- a/src/include/Makefile.am
+++ b/src/include/Makefile.am
@@ -33,6 +33,7 @@ gnunetinclude_HEADERS = \
   gnunet_ats_application_service.h \
   gnunet_ats_transport_service.h \
   gnunet_ats_plugin.h \
+  gnunet_ats_plugin_new.h \
   gnunet_bandwidth_lib.h \
   gnunet_bio_lib.h \
   gnunet_block_lib.h \
diff --git a/src/peerstore/Makefile.am b/src/peerstore/Makefile.am
index 3aef05769..c6acdce56 100644
--- a/src/peerstore/Makefile.am
+++ b/src/peerstore/Makefile.am
@@ -107,7 +107,9 @@ check_PROGRAMS = \
  $(FLAT_TESTS)
 
 EXTRA_DIST = \
- test_peerstore_api_data.conf
+ test_peerstore_api_data.conf \
+ test_plugin_peerstore_flat.conf \
+ test_plugin_peerstore_sqlite.conf
 
 if ENABLE_TEST_RUN
 AM_TESTS_ENVIRONMENT=export 
GNUNET_PREFIX=$${GNUNET_PREFIX:address@hidden@};export 
PATH=$${GNUNET_PREFIX:address@hidden@}/bin:$$PATH;unset XDG_DATA_HOME;unset 
XDG_CONFIG_HOME;
diff --git a/src/testing/Makefile.am b/src/testing/Makefile.am
index 727bfb134..39e5f1574 100644
--- a/src/testing/Makefile.am
+++ b/src/testing/Makefile.am
@@ -95,4 +95,5 @@ test_testing_sharedservices_LDADD = \
  $(top_builddir)/src/util/libgnunetutil.la
 
 EXTRA_DIST = \
-  test_testing_defaults.conf
+  test_testing_defaults.conf \
+  test_testing_sharedservices.conf
diff --git a/src/transport/Makefile.am b/src/transport/Makefile.am
index 3de46cf6f..93615b023 100644
--- a/src/transport/Makefile.am
+++ b/src/transport/Makefile.am
@@ -271,7 +271,7 @@ gnunet_communicator_udp_LDADD = \
   $(top_builddir)/src/nt/libgnunetnt.la \
   $(top_builddir)/src/statistics/libgnunetstatistics.la \
   $(top_builddir)/src/util/libgnunetutil.la \
-  $(LIBGCRYPT_LIBS) 
+  $(LIBGCRYPT_LIBS)
 
 
 gnunet_helper_transport_wlan_SOURCES = \
@@ -1339,6 +1339,7 @@ test_transport_api_slow_ats_LDADD = \
 
 
 EXTRA_DIST = \
+communicator-unix.conf \
 test_plugin_hostkey \
 test_plugin_hostkey.ecc \
 test_delay \

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

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