[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnunet] branch master updated: - add WIP cmd to connect peers
From: |
gnunet |
Subject: |
[gnunet] branch master updated: - add WIP cmd to connect peers |
Date: |
Wed, 01 Jan 2025 15:18:41 +0100 |
This is an automated email from the git hooks/post-receive script.
martin-schanzenbach pushed a commit to branch master
in repository gnunet.
The following commit(s) were added to refs/heads/master by this push:
new bd69613b3 - add WIP cmd to connect peers
bd69613b3 is described below
commit bd69613b32546cd8d45e3614b4eb1c2f0fc2e372
Author: Martin Schanzenbach <schanzen@gnunet.org>
AuthorDate: Wed Jan 1 15:18:34 2025 +0100
- add WIP cmd to connect peers
---
.../testing_cmd_transport_connect_peers.c | 273 +++++++++++++++++++++
1 file changed, 273 insertions(+)
diff --git a/src/service/transport/testing_cmd_transport_connect_peers.c
b/src/service/transport/testing_cmd_transport_connect_peers.c
new file mode 100644
index 000000000..5b0798481
--- /dev/null
+++ b/src/service/transport/testing_cmd_transport_connect_peers.c
@@ -0,0 +1,273 @@
+/*
+ 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 core_api_cmd_connecting_peers.c
+ * @brief cmd to start a peer.
+ * @author t3sserakt
+ */
+#include "platform.h"
+#include "gnunet_util_lib.h"
+#include "gnunet_testing_core_lib.h"
+#include "gnunet_testing_testbed_lib.h"
+#include "gnunet_testing_transport_lib.h"
+#include "gnunet_transport_application_service.h"
+#include "gnunet_transport_core_service.h"
+#include "transport-testing-cmds.h"
+
+/**
+ * Generic logging shortcut
+ */
+#define LOG(kind, ...) GNUNET_log (kind, __VA_ARGS__)
+
+
+/**
+ * The run method of this cmd will connect to peers.
+ *
+ */
+static void
+connect_peers_run (void *cls,
+ struct GNUNET_TESTING_Interpreter *is)
+{
+ struct GNUNET_TESTING_ConnectPeersState *cps = cls;
+ const struct GNUNET_TESTING_StartPeerState *sps;
+ const struct GNUNET_TESTING_Command *system_cmd;
+ struct GNUNET_TESTBED_System *tl_system;
+ const struct GNUNET_TESTING_Command *peer1_cmd;
+ struct GNUNET_PeerIdentity *peer;
+ enum GNUNET_NetworkType nt = 0;
+ struct GNUNET_TESTING_NodeConnection *pos_connection;
+ struct GNUNET_TESTING_AddressPrefix *pos_prefix;
+ const enum GNUNET_GenericReturnValue *broadcast;
+ unsigned int con_num = 0;
+ uint32_t num;
+ char *addr;
+ char *addr_and_port;
+ char *emsg = NULL;
+
+ cps->is = is;
+ peer1_cmd = GNUNET_TESTING_interpreter_lookup_command (is,
+
cps->start_peer_label);
+ GNUNET_TRANSPORT_TESTING_get_trait_broadcast (peer1_cmd,
+ &broadcast);
+ GNUNET_TRANSPORT_TESTING_get_trait_state (peer1_cmd,
+ &sps);
+
+ system_cmd = GNUNET_TESTING_interpreter_lookup_command (is,
+ cps->create_label);
+ GNUNET_TESTING_TESTBED_get_trait_test_system (system_cmd,
+ &tl_system);
+
+ cps->tl_system = tl_system;
+
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "cps->num: %u \n",
+ cps->num);
+
+
+ cps->ah = GNUNET_TRANSPORT_application_init (sps->cfg);
+ if (NULL == cps->ah)
+ {
+ LOG (GNUNET_ERROR_TYPE_ERROR,
+ "Failed to initialize the TRANSPORT application suggestion client
handle for peer `%s': `%s'\n",
+ sps->cfgname,
+ emsg);
+ GNUNET_free (emsg);
+ GNUNET_TESTING_interpreter_fail (is);
+ return;
+ }
+
+ cps->node_connections_head = GNUNET_TESTING_get_connections (cps->num,
+ cps->topology);
+
+ for (pos_connection = cps->node_connections_head; NULL != pos_connection;
+ pos_connection = pos_connection->next)
+ {
+ con_num++;
+ num = GNUNET_TESTING_calculate_num (pos_connection, cps->topology);
+ for (pos_prefix = pos_connection->address_prefixes_head; NULL !=
pos_prefix;
+ pos_prefix =
+ pos_prefix->next)
+ {
+ addr = GNUNET_TESTING_get_address (pos_connection,
+ pos_prefix->address_prefix);
+ if (NULL != addr)
+ {
+ char *natted_p = strstr (pos_prefix->address_prefix, "_");
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "0 validating peer number %s %s %s\n",
+ natted_p,
+ pos_prefix->address_prefix,
+ addr);
+ if (0 == GNUNET_memcmp (pos_prefix->address_prefix, "udp"))
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "validating memcmp\n");
+ if (GNUNET_YES == *broadcast)
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "validating broadcast\n");
+ if ((0 == GNUNET_memcmp (pos_prefix->address_prefix, "udp")) &&
+ (GNUNET_YES == *broadcast) )
+ GNUNET_asprintf (&addr_and_port,
+ "%s:2086",
+ addr);
+ else if (NULL == natted_p)
+ GNUNET_asprintf (&addr_and_port,
+ "%s:60002",
+ addr);
+ else if (NULL != natted_p)
+ {
+ char *prefix;
+ char *rest;
+ char *address;
+
+ prefix = strtok (addr, "_");
+ rest = strtok (NULL, "_");
+ strtok (rest, "-");
+ address = strtok (NULL, "-");
+
+ GNUNET_asprintf (&addr_and_port,
+ "%s-%s:0",
+ prefix,
+ address);
+
+ }
+ peer = GNUNET_TESTING_get_peer (num, tl_system);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "validating peer number %u with identity %s and address %s
%u %s and handle %p\n",
+ num,
+ GNUNET_i2s (peer),
+ addr_and_port,
+ *broadcast,
+ pos_prefix->address_prefix,
+ cps->ah);
+ GNUNET_TRANSPORT_application_validate ((struct
+
GNUNET_TRANSPORT_ApplicationHandle
+ *) cps->ah,
+ peer,
+ nt,
+ addr_and_port);
+ GNUNET_free (peer);
+ GNUNET_free (addr);
+ GNUNET_free (addr_and_port);
+ }
+ }
+ }
+ cps->con_num = con_num;
+}
+
+
+/**
+ * The cleanup function of this cmd frees resources the cmd allocated.
+ *
+ */
+static void
+connect_peers_cleanup (void *cls)
+{
+ struct GNUNET_TESTING_ConnectPeersState *cps = cls;
+
+ GNUNET_free (cps->connected_peers_map);
+ GNUNET_free (cps);
+}
+
+
+/**
+ * This function prepares an array with traits.
+ *
+ */
+enum GNUNET_GenericReturnValue
+connect_peers_traits (void *cls,
+ const void **ret,
+ const char *trait,
+ unsigned int index)
+{
+ struct GNUNET_TESTING_ConnectPeersState *cps = cls;
+ struct GNUNET_TESTING_Trait traits[] = {
+ GNUNET_TRANSPORT_TESTING_make_trait_connect_peer_state ((const void *)
cps),
+ GNUNET_TESTING_trait_end ()
+ };
+ return GNUNET_TESTING_get_trait (traits,
+ ret,
+ trait,
+ index);
+}
+
+
+struct GNUNET_TESTING_Command
+GNUNET_TESTING_cmd_transport_connect_peers (
+ const char *label,
+ const char *start_peer_label,
+ const char *create_label,
+ uint32_t num,
+ struct GNUNET_TESTING_NetjailTopology *topology,
+ unsigned int additional_connects,
+ unsigned int wait_for_connect,
+ struct GNUNET_MQ_MessageHandler *handlers)
+{
+ struct GNUNET_TESTING_ConnectPeersState *cps;
+ //unsigned int node_additional_connects;
+ struct GNUNET_CONTAINER_MultiShortmap *connected_peers_map =
+ GNUNET_CONTAINER_multishortmap_create (1,GNUNET_NO);
+ unsigned int i;
+
+ //node_additional_connects = GNUNET_TESTING_get_additional_connects (num,
+ //
topology);
+
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "global: %u\n",
+ additional_connects);
+ // node_additional_connects);
+
+ //if (0 != node_additional_connects)
+ // additional_connects = node_additional_connects;
+
+ cps = GNUNET_new (struct GNUNET_TESTING_ConnectPeersState);
+ cps->start_peer_label = start_peer_label;
+ cps->num = num;
+ cps->create_label = create_label;
+ cps->topology = topology;
+ cps->additional_connects = additional_connects;
+ cps->wait_for_connect = wait_for_connect;
+ cps->connected_peers_map = connected_peers_map;
+
+ if (NULL != handlers)
+ {
+ for (i = 0; NULL != handlers[i].cb; i++)
+ cps->handlers = GNUNET_new_array (i + 1,
+ struct GNUNET_MQ_MessageHandler);
+ GNUNET_memcpy (cps->handlers,
+ handlers,
+ i * sizeof(struct GNUNET_MQ_MessageHandler));
+ }
+ // FIXME: wrap with cmd_make_unblocking!
+ if (GNUNET_YES == wait_for_connect)
+ return GNUNET_TESTING_command_new_ac (cps,
+ label,
+ &connect_peers_run,
+ &connect_peers_cleanup,
+ &connect_peers_traits,
+ &cps->ac);
+ else
+ return GNUNET_TESTING_command_new (cps,
+ label,
+ &connect_peers_run,
+ &connect_peers_cleanup,
+ &connect_peers_traits);
+}
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnunet] branch master updated: - add WIP cmd to connect peers,
gnunet <=