[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnunet] 10/40: TNG: Added Testcase that just runs two peers, and blocks
From: |
gnunet |
Subject: |
[gnunet] 10/40: TNG: Added Testcase that just runs two peers, and blocks. |
Date: |
Thu, 05 Oct 2023 08:57:13 +0200 |
This is an automated email from the git hooks/post-receive script.
martin-schanzenbach pushed a commit to branch master
in repository gnunet.
commit 4ba7b5f6cb1ca15a4049fc0288fdd8182d63ab00
Author: t3sserakt <t3ss@posteo.de>
AuthorDate: Fri Jul 14 19:53:52 2023 +0200
TNG: Added Testcase that just runs two peers, and blocks.
---
contrib/Makefile.am | 4 +-
contrib/testing-ng/block.sh | 11 +
src/transport/template_tng_cfg_peer1.conf | 34 ++
src/transport/test_tng_defaults.conf | 14 +
src/transport/test_transport_api2_tng_node.conf | 31 ++
src/transport/test_transport_just_run_topo.conf | 6 +
src/transport/test_transport_plugin_cmd_just_run.c | 494 +++++++++++++++++++++
7 files changed, 593 insertions(+), 1 deletion(-)
diff --git a/contrib/Makefile.am b/contrib/Makefile.am
index 4cbb38cb0..13fdcdd60 100644
--- a/contrib/Makefile.am
+++ b/contrib/Makefile.am
@@ -27,7 +27,8 @@ dist_pkgdata_DATA = \
netjail/netjail_exec.sh \
netjail/netjail_start.sh \
netjail/netjail_stop.sh \
- netjail/topo.sh
+ netjail/topo.sh \
+ testing-ng/block.sh
INITD_FILES = \
services/systemd/gnunet-user.service \
@@ -270,5 +271,6 @@ install-data-hook:
chmod o+x '$(DESTDIR)$(pkgdatadir)/netjail_stop.sh'
chmod o+x '$(DESTDIR)$(pkgdatadir)/netjail_exec.sh'
chmod o+x '$(DESTDIR)$(pkgdatadir)/topo.sh'
+ chmod o+x '$(DESTDIR)$(pkgdatadir)/block.sh'
## EOF
diff --git a/contrib/testing-ng/block.sh b/contrib/testing-ng/block.sh
new file mode 100755
index 000000000..6edf18ede
--- /dev/null
+++ b/contrib/testing-ng/block.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+echo started > block.log
+while true
+do
+ if [ -f stop ]
+ then
+ break
+ fi
+ sleep 1
+done
+echo stopped >> block.log
diff --git a/src/transport/template_tng_cfg_peer1.conf
b/src/transport/template_tng_cfg_peer1.conf
new file mode 100644
index 000000000..b6198d72c
--- /dev/null
+++ b/src/transport/template_tng_cfg_peer1.conf
@@ -0,0 +1,34 @@
+@INLINE@ test_tng_defaults.conf
+[PATHS]
+GNUNET_TEST_HOME = $GNUNET_TMP/test-transport/api-tcp-p1/
+GNUNET_RUNTIME_DIR = $GNUNET_TEST_HOME/runtime/
+GNUNET_USER_RUNTIME_DIR = $GNUNET_TEST_HOME/runtime/
+
+[nat]
+RETURN_LOCAL_ADDRESSES = YES
+DISABLEV6 = NO
+
+[arm]
+PORT = 12005
+UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-arm.sock
+
+[statistics]
+PORT = 12004
+UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-statistics.sock
+
+[resolver]
+PORT = 12003
+UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-resolver.sock
+
+[peerinfo]
+PORT = 12002
+UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-peerinfo.sock
+USE_INCLUDED_HELLOS = NO
+
+[transport]
+#PREFIX = valgrind --leak-check=full
+PORT = 12001
+UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-transport.sock
+
+[hostlist]
+SERVERS = dummy
diff --git a/src/transport/test_tng_defaults.conf
b/src/transport/test_tng_defaults.conf
new file mode 100644
index 000000000..e37dab25e
--- /dev/null
+++ b/src/transport/test_tng_defaults.conf
@@ -0,0 +1,14 @@
+@INLINE@ ../../contrib/conf/gnunet/no_forcestart.conf
+
+[PATHS]
+GNUNET_TEST_HOME = $GNUNET_TMP/test-tng/
+
+[transport]
+# PREFIX = valgrind
+
+[nat]
+DISABLEV6 = NO
+RETURN_LOCAL_ADDRESSES = YES
+BINDTO = 127.0.0.1
+INTERNAL_ADDRESS = 127.0.0.1
+EXTERNAL_ADDRESS = 127.0.0.1
diff --git a/src/transport/test_transport_api2_tng_node.conf
b/src/transport/test_transport_api2_tng_node.conf
new file mode 100644
index 000000000..61ffbe92f
--- /dev/null
+++ b/src/transport/test_transport_api2_tng_node.conf
@@ -0,0 +1,31 @@
+@INLINE@ template_tng_cfg_peer1.conf
+[PATHS]
+GNUNET_TEST_HOME = $GNUNET_TMP/test-transport/api-tcp-p1/
+
+[transport]
+BINARY = gnunet-service-tng
+#PREFIX = valgrind --leak-check=full --track-origins=yes --trace-children=yes
--log-file=$GNUNET_TEST_HOME/vg_peer1-%p
+UNIXPATH = $GNUNET_RUNTIME_DIR/tng-p1.sock
+
+[PEER]
+PRIVATE_KEY = $GNUNET_RUNTIME_DIR/private.key
+
+[communicator-tcp]
+BINARY = gnunet-communicator-tcp
+BINDTO = 192.168.15.1:60002
+DISABLE_V6 = YES
+IMMEDIATE_START = YES
+UNIXPATH = $GNUNET_RUNTIME_DIR/tcp-comm-p1.sock
+#PREFIX = valgrind --leak-check=full --track-origins=yes --trace-children=yes
--log-file=$GNUNET_TEST_HOME/vg_ctpeer1-%p
+#PREFIX = xterm -geometry 100x85 -T peer1 -e gdb --args
+
+[communicator-udp]
+#PREFIX = valgrind --leak-check=full --track-origins=yes --trace-children=yes
--log-file=$GNUNET_TEST_HOME/vg_cupeer1-%p
+BINARY = gnunet-communicator-udp
+BINDTO = 192.168.15.1:60002
+DISABLE_V6 = YES
+IMMEDIATE_START = YES
+UNIXPATH = $GNUNET_RUNTIME_DIR/udp-comm-p1.sock
+
+[peerstore]
+IMMEDIATE_START = YES
diff --git a/src/transport/test_transport_just_run_topo.conf
b/src/transport/test_transport_just_run_topo.conf
new file mode 100644
index 000000000..d27a2fc77
--- /dev/null
+++ b/src/transport/test_transport_just_run_topo.conf
@@ -0,0 +1,6 @@
+M:2
+N:1
+X:0
+T:libgnunet_test_transport_plugin_cmd_just_run
+P:1:1|{connect:{P:1:2:tcp}|{P:1:2:udp}}
+P:1:2|{connect:{P:1:1:tcp}|{P:1:1:udp}}
\ No newline at end of file
diff --git a/src/transport/test_transport_plugin_cmd_just_run.c
b/src/transport/test_transport_plugin_cmd_just_run.c
new file mode 100644
index 000000000..df7484884
--- /dev/null
+++ b/src/transport/test_transport_plugin_cmd_just_run.c
@@ -0,0 +1,494 @@
+/*
+ This file is part of GNUnet
+ Copyright (C) 2021 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 testbed/plugin_cmd_simple_send.c
+ * @brief a plugin to provide the API for running test cases.
+ * @author t3sserakt
+ */
+#include "platform.h"
+#include "gnunet_testing_barrier.h"
+#include "gnunet_testing_netjail_lib.h"
+#include "gnunet_util_lib.h"
+#include "gnunet_transport_application_service.h"
+#include "transport-testing2.h"
+#include "transport-testing-cmds.h"
+#include "gnunet_testing_barrier.h"
+#include "gnunet_core_service.h"
+
+/**
+ * Generic logging shortcut
+ */
+#define LOG(kind, ...) GNUNET_log (kind, __VA_ARGS__)
+
+#define BASE_DIR "testdir"
+
+#define TOPOLOGY_CONFIG "test_transport_simple_send_topo.conf"
+
+#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 600)
+
+#define MAX_RECEIVED 1000
+
+#define MESSAGE_SIZE 65000
+
+static struct GNUNET_TESTING_Command block_script;
+
+static struct GNUNET_TESTING_Command connect_peers;
+
+static struct GNUNET_TESTING_Command local_prepared;
+
+static struct GNUNET_TESTING_Command start_peer;
+
+static struct GNUNET_TESTING_Interpreter *is;
+
+static struct GNUNET_CONTAINER_MultiPeerMap *senders;
+
+struct Sender
+{
+ /**
+ * Number of received messages from sender.
+ */
+ unsigned long long num_received;
+
+ /**
+ * Sample mean time the message traveled.
+ */
+ struct GNUNET_TIME_Relative mean_time;
+
+ /**
+ * Time the first message was send.
+ */
+ struct GNUNET_TIME_Absolute time_first;
+};
+
+/**
+ * Function called to check a message of type
GNUNET_TRANSPORT_TESTING_SIMPLE_MTYPE being
+ * received.
+ *
+ */
+static int
+check_test (void *cls,
+ const struct
+ GNUNET_TRANSPORT_TESTING_PerformanceTestMessage *message)
+{
+ return GNUNET_OK;
+}
+
+
+struct GNUNET_TESTING_BarrierList*
+get_waiting_for_barriers ()
+{
+ struct GNUNET_TESTING_BarrierList*barriers;
+ struct GNUNET_TESTING_BarrierListEntry *ble;
+
+ barriers = GNUNET_new (struct GNUNET_TESTING_BarrierList);
+ ble = GNUNET_new (struct GNUNET_TESTING_BarrierListEntry);
+ ble->barrier_name = "ready-to-connect";
+ ble->expected_reaches = 1;
+ GNUNET_CONTAINER_DLL_insert (barriers->head,
+ barriers->tail,
+ ble);
+
+ ble = GNUNET_new (struct GNUNET_TESTING_BarrierListEntry);
+ ble->barrier_name = "test-case-finished";
+ ble->expected_reaches = 1;
+ GNUNET_CONTAINER_DLL_insert (barriers->head,
+ barriers->tail,
+ ble);
+ return barriers;
+}
+
+
+/**
+ * Callback to set the flag indicating all peers started. Will be called via
the plugin api.
+ *
+ */
+static void
+all_peers_started ()
+{
+}
+
+
+/**
+ * Function called with the final result of the test.
+ *
+ * @param cls the `struct MainParams`
+ * @param rv #GNUNET_OK if the test passed
+ */
+static void
+handle_result (void *cls,
+ enum GNUNET_GenericReturnValue rv)
+{
+ struct TestState *ts = cls;
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Local test exits with status %d\n",
+ rv);
+
+ ts->finished_cb (rv);
+ GNUNET_free (ts->testdir);
+ GNUNET_free (ts->cfgname);
+ GNUNET_TESTING_free_topology (ts->topology);
+ GNUNET_free (ts);
+}
+
+
+/**
+ * Callback from start peer cmd for signaling a peer got connected.
+ *
+ *
+static void *
+notify_connect (struct GNUNET_TESTING_Interpreter *is,
+ const struct GNUNET_PeerIdentity *peer)
+{
+ const struct ConnectPeersState *cps;
+ const struct GNUNET_TESTING_Command *cmd;
+
+ cmd = GNUNET_TESTING_interpreter_lookup_command (is,
+ "connect-peers");
+ GNUNET_TRANSPORT_get_trait_connect_peer_state (cmd,
+ &cps);
+ void *ret = NULL;
+
+ cps->notify_connect (is,
+ peer);
+ return ret;
+ }*/
+
+
+/**
+ * Callback to set the flag indicating all peers are prepared to finish. Will
be called via the plugin api.
+ */
+static void
+all_local_tests_prepared ()
+{
+ const struct GNUNET_TESTING_LocalPreparedState *lfs;
+
+ GNUNET_TESTING_get_trait_local_prepared_state (&local_prepared,
+ &lfs);
+ GNUNET_assert (NULL != &lfs->ac);
+ if (NULL == lfs->ac.cont)
+ GNUNET_TESTING_async_fail ((struct GNUNET_TESTING_AsyncContext *)
&lfs->ac);
+ else
+ GNUNET_TESTING_async_finish ((struct
+ GNUNET_TESTING_AsyncContext *) &lfs->ac);
+}
+
+
+static void
+child_completed_callback (void *cls,
+ enum GNUNET_OS_ProcessStatusType type,
+ long unsigned int exit_code)
+{
+
+}
+
+
+/**
+ * Function called to check a message being
+ * received.
+ *
+ */
+static int
+check_encrypted (void *cls, struct GNUNET_MessageHeader *header)
+{
+ return GNUNET_OK;
+}
+
+
+static void
+core_receive_continue (struct GNUNET_PeerIdentity *peer)
+{
+ const struct GNUNET_TESTING_StartPeerState *sps;
+
+ GNUNET_TRANSPORT_get_trait_state (&start_peer,
+ &sps);
+
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "Executing core receive continue\n");
+
+ GNUNET_TRANSPORT_core_receive_continue (sps->th, peer);
+}
+
+
+/*static void
+handle_core (void *cls, struct GNUNET_MessageHeader *header)
+{
+ struct GNUNET_PeerIdentity *peer = cls;
+
+ core_receive_continue (peer);
+ }*/
+
+
+/**
+ * Function called to handle a message being received.
+ *
+ */
+static void
+handle_encrypted (void *cls, struct GNUNET_MessageHeader *header)
+{
+ struct GNUNET_PeerIdentity *peer = cls;
+
+ core_receive_continue (peer);
+}
+
+
+static void
+handle_ephemeral_key (void *cls, struct GNUNET_MessageHeader *header)
+{
+ struct GNUNET_PeerIdentity *peer = cls;
+
+ core_receive_continue (peer);
+}
+
+
+static void
+handle_ping (void *cls, struct GNUNET_MessageHeader *header)
+{
+ struct GNUNET_PeerIdentity *peer = cls;
+
+ core_receive_continue (peer);
+}
+
+
+static void
+handle_pong (void *cls, struct GNUNET_MessageHeader *header)
+{
+ struct GNUNET_PeerIdentity *peer = cls;
+
+ core_receive_continue (peer);
+}
+
+/**
+ * Function to start a local test case.
+ *
+ * @param write_message Callback to send a message to the master loop.
+ * @param router_ip Global address of the network namespace.
+ * @param node_ip The IP address of the node.
+ * @param m The number of the node in a network namespace.
+ * @param n The number of the network namespace.
+ * @param local_m The number of nodes in a network namespace.
+ * @param topology_data A file name for the file containing the topology
configuration, or a string containing
+ * the topology configuration.
+ * @param read_file If read_file is GNUNET_YES this string is the filename for
the topology configuration,
+ * if read_file is GNUNET_NO the string contains the topology
configuration.
+ * @param finish_cb Callback function which writes a message from the helper
process running on a netjail
+ * node to the master process * signaling that the test case
running on the netjail node finished.
+ * @return Returns the struct GNUNET_TESTING_Interpreter of the command loop
running on this netjail node.
+ */
+static struct GNUNET_TESTING_Interpreter *
+start_testcase (GNUNET_TESTING_cmd_helper_write_cb write_message,
+ const char *router_ip,
+ const char *node_ip,
+ const char *m,
+ const char *n,
+ const char *local_m,
+ const char *topology_data,
+ unsigned int *read_file,
+ GNUNET_TESTING_cmd_helper_finish_cb finished_cb)
+{
+
+ unsigned int n_int;
+ unsigned int m_int;
+ unsigned int local_m_int;
+ unsigned int num;
+ struct TestState *ts = GNUNET_new (struct TestState);
+ struct GNUNET_TESTING_NetjailTopology *topology;
+ unsigned int sscanf_ret = 0;
+ char **argv = NULL;
+ int argc = 0;
+
+ ts->finished_cb = finished_cb;
+ LOG (GNUNET_ERROR_TYPE_ERROR,
+ "n %s m %s\n",
+ n,
+ m);
+
+ if (GNUNET_YES == *read_file)
+ {
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "read from file\n");
+ topology = GNUNET_TESTING_get_topo_from_file (topology_data);
+ }
+ else
+ topology = GNUNET_TESTING_get_topo_from_string (topology_data);
+
+ ts->topology = topology;
+
+ errno = 0;
+ sscanf_ret = sscanf (m, "%u", &m_int);
+ if (errno != 0)
+ {
+ GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "sscanf");
+ }
+ GNUNET_assert (0 < sscanf_ret);
+ errno = 0;
+ sscanf_ret = sscanf (n, "%u", &n_int);
+ if (errno != 0)
+ {
+ GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "sscanf");
+ }
+ GNUNET_assert (0 < sscanf_ret);
+ errno = 0;
+ sscanf_ret = sscanf (local_m, "%u", &local_m_int);
+ if (errno != 0)
+ {
+ GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "sscanf");
+ }
+ GNUNET_assert (0 < sscanf_ret);
+
+ if (0 == n_int)
+ num = m_int;
+ else
+ num = (n_int - 1) * local_m_int + m_int + topology->nodes_x;
+
+ block_script = GNUNET_TESTING_cmd_block_until_external_trigger (
+ "block-script");
+ connect_peers = GNUNET_TRANSPORT_cmd_connect_peers ("connect-peers",
+ "start-peer",
+ "system-create",
+ num,
+ topology,
+ 0,
+ GNUNET_NO);
+ local_prepared = GNUNET_TESTING_cmd_local_test_prepared (
+ "local-test-prepared",
+ write_message);
+
+
+ GNUNET_asprintf (&ts->cfgname,
+ "test_transport_api2_tcp_node1.conf");
+
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "plugin cfgname: %s\n",
+ ts->cfgname);
+
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "node ip: %s\n",
+ node_ip);
+
+ GNUNET_asprintf (&ts->testdir,
+ "%s%s%s",
+ BASE_DIR,
+ m,
+ n);
+
+ /*struct GNUNET_MQ_MessageHandler handlers[] = {
+ GNUNET_MQ_hd_fixed_size (ephemeral_key,
+ GNUNET_MESSAGE_TYPE_CORE_EPHEMERAL_KEY,
+ struct EphemeralKeyMessage,
+ NULL),
+ GNUNET_MQ_hd_fixed_size (ping,
+ GNUNET_MESSAGE_TYPE_CORE_PING,
+ struct PingMessage,
+ NULL),
+ GNUNET_MQ_hd_fixed_size (pong,
+ GNUNET_MESSAGE_TYPE_CORE_PONG,
+ struct PongMessage,
+ NULL),
+ GNUNET_MQ_handler_end ()
+ };*/
+
+ start_peer = GNUNET_TESTING_cmd_start_peer ("start-peer",
+ "system-create",
+ num,
+ node_ip,
+ ts->cfgname,
+ GNUNET_NO);
+
+ struct GNUNET_TESTING_Command commands[] = {
+ GNUNET_TESTING_cmd_system_create ("system-create",
+ ts->testdir),
+ start_peer,
+ GNUNET_TESTING_cmd_barrier_reached ("ready-to-connect-reached",
+ "ready-to-connect",
+ GNUNET_NO,
+ num,
+ GNUNET_NO,
+ write_message),
+ connect_peers,
+ GNUNET_TESTING_cmd_exec_bash_script ("script",
+ "block.sh",
+ argv,
+ argc,
+ &child_completed_callback),
+ block_script,
+ GNUNET_TESTING_cmd_barrier_reached ("test-case-finished-reached",
+ "test-case-finished",
+ GNUNET_NO,
+ num,
+ GNUNET_NO,
+ write_message),
+ GNUNET_TRANSPORT_cmd_stop_peer ("stop-peer",
+ "start-peer"),
+ GNUNET_TESTING_cmd_system_destroy ("system-destroy",
+ "system-create"),
+ GNUNET_TESTING_cmd_end ()
+ };
+
+ ts->write_message = write_message;
+
+ is = GNUNET_TESTING_run (commands,
+ TIMEOUT,
+ &handle_result,
+ ts);
+ return is;
+}
+
+
+/**
+ * Entry point for the plugin.
+ *
+ * @param cls NULL
+ * @return the exported block API
+ */
+void *
+libgnunet_test_transport_plugin_cmd_just_run_init (void *cls)
+{
+ struct GNUNET_TESTING_PluginFunctions *api;
+
+ GNUNET_log_setup ("simple-send",
+ "DEBUG",
+ NULL);
+
+ api = GNUNET_new (struct GNUNET_TESTING_PluginFunctions);
+ api->start_testcase = &start_testcase;
+ api->get_waiting_for_barriers = get_waiting_for_barriers;
+ return api;
+}
+
+
+/**
+ * Exit point from the plugin.
+ *
+ * @param cls the return value from
#libgnunet_test_transport_plugin_just_run_init
+ * @return NULL
+ */
+void *
+libgnunet_test_transport_plugin_cmd_just_run_done (void *cls)
+{
+ struct GNUNET_TESTING_PluginFunctions *api = cls;
+
+ GNUNET_free (api);
+ return NULL;
+}
+
+
+/* end of plugin_cmd_simple_send.c */
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [gnunet] 36/40: Fix warnings; CADET not FTBFS because old hello removed, (continued)
- [gnunet] 36/40: Fix warnings; CADET not FTBFS because old hello removed, gnunet, 2023/10/05
- [gnunet] 33/40: Merge branch 'master' into l20integration, gnunet, 2023/10/05
- [gnunet] 18/40: NEWS: The old hello design replaced by the new hello design., gnunet, 2023/10/05
- [gnunet] 39/40: Make fs and cadet build again; cadet hello handling suspicious, gnunet, 2023/10/05
- [gnunet] 25/40: Hello: Changed address and hello format to new TNG format., gnunet, 2023/10/05
- [gnunet] 38/40: Remove more traces of old transport, gnunet, 2023/10/05
- [gnunet] 31/40: BUILD: Make meson build without ats, tesbed, peerinfo, gnunet, 2023/10/05
- [gnunet] 37/40: Remove more traces of ATS, gnunet, 2023/10/05
- [gnunet] 30/40: Merge branch 'master' into l20integration, gnunet, 2023/10/05
- [gnunet] 40/40: Update to new transport binary, gnunet, 2023/10/05
- [gnunet] 10/40: TNG: Added Testcase that just runs two peers, and blocks.,
gnunet <=
- [gnunet] 14/40: NEWS: Added api to store hellos with peerstore service., gnunet, 2023/10/05
- [gnunet] 20/40: PEERSTORE: Moved code to scan and import hello file into peerstore from peerinfo., gnunet, 2023/10/05
- [gnunet] 26/40: Peerstore: Fixed bug in bootstrap code, gnunet, 2023/10/05
- [gnunet] 28/40: DHT: Fixed wrong group name, gnunet, 2023/10/05
- [gnunet] 11/40: CORE: Fixed bug that core is not calling GNUNET_TRANSPORT_core_receive_continue, gnunet, 2023/10/05
- [gnunet] 15/40: NEWS: Added api to get notified when hellos are stored with peerstore service., gnunet, 2023/10/05
- [gnunet] 08/40: TNG: Added generic start script for test cases., gnunet, 2023/10/05
- [gnunet] 21/40: NEWS: Moved code to testing to have more generic test setup, which can be used not only from within transport., gnunet, 2023/10/05
- [gnunet] 23/40: NEWS: Changed method GNUNET_HELLO_builder_get_expiration_time to not need parameter GNUNET_HELLO_Builder., gnunet, 2023/10/05
- [gnunet] 24/40: Peerstore: Changed the behavior of GNUNET_PEERSTORE_watch to also return the values allready stored for the key., gnunet, 2023/10/05