GNUnet 0.21.1
core_api_cmd_connecting_peers.c File Reference

cmd to start a peer. More...

Include dependency graph for core_api_cmd_connecting_peers.c:

Go to the source code of this file.

Macros

#define LOG(kind, ...)   GNUNET_log (kind, __VA_ARGS__)
 Generic logging shortcut. More...
 

Functions

static void connect_peers_run (void *cls, struct GNUNET_TESTING_Interpreter *is)
 The run method of this cmd will connect to peers. More...
 
static void connect_peers_cleanup (void *cls)
 The cleanup function of this cmd frees resources the cmd allocated. More...
 
enum GNUNET_GenericReturnValue connect_peers_traits (void *cls, const void **ret, const char *trait, unsigned int index)
 This function prepares an array with traits. More...
 
struct GNUNET_TESTING_Command GNUNET_CORE_cmd_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)
 FIXME: document properly! Create command. More...
 

Detailed Description

cmd to start a peer.

Author
t3sserakt

Definition in file core_api_cmd_connecting_peers.c.

Macro Definition Documentation

◆ LOG

#define LOG (   kind,
  ... 
)    GNUNET_log (kind, __VA_ARGS__)

Generic logging shortcut.

Definition at line 36 of file core_api_cmd_connecting_peers.c.

Function Documentation

◆ connect_peers_run()

static void connect_peers_run ( void *  cls,
struct GNUNET_TESTING_Interpreter is 
)
static

The run method of this cmd will connect to peers.

Definition at line 44 of file core_api_cmd_connecting_peers.c.

46{
47 struct GNUNET_TESTING_ConnectPeersState *cps = cls;
48 const struct GNUNET_TESTING_StartPeerState *sps;
49 const struct GNUNET_TESTING_Command *system_cmd;
50 const struct GNUNET_TESTING_System *tl_system;
51 const struct GNUNET_TESTING_Command *peer1_cmd;
52 struct GNUNET_PeerIdentity *peer;
53 enum GNUNET_NetworkType nt = 0;
54 struct GNUNET_TESTING_NodeConnection *pos_connection;
55 struct GNUNET_TESTING_AddressPrefix *pos_prefix;
56 const enum GNUNET_GenericReturnValue *broadcast;
57 unsigned int con_num = 0;
58 uint32_t num;
59 char *addr;
60 char *addr_and_port;
61 char *emsg = NULL;
62
63 cps->is = is;
65 cps->start_peer_label);
67 &broadcast);
69 &sps);
70
72 cps->create_label);
74 &tl_system);
75
76 cps->tl_system = tl_system;
77
79 "cps->num: %u \n",
80 cps->num);
81
82
84 if (NULL == cps->ah)
85 {
87 "Failed to initialize the TRANSPORT application suggestion client handle for peer `%s': `%s'\n",
88 sps->cfgname,
89 emsg);
90 GNUNET_free (emsg);
92 return;
93 }
94
96 cps->topology);
97
98 for (pos_connection = cps->node_connections_head; NULL != pos_connection;
99 pos_connection = pos_connection->next)
100 {
101 con_num++;
102 num = GNUNET_TESTING_calculate_num (pos_connection, cps->topology);
103 for (pos_prefix = pos_connection->address_prefixes_head; NULL != pos_prefix;
104 pos_prefix =
105 pos_prefix->next)
106 {
107 addr = GNUNET_TESTING_get_address (pos_connection,
108 pos_prefix->address_prefix);
109 if (NULL != addr)
110 {
111 char *natted_p = strstr (pos_prefix->address_prefix, "_");
112
114 "0 validating peer number %s %s %s\n",
115 natted_p,
116 pos_prefix->address_prefix,
117 addr);
118 if (0 == GNUNET_memcmp (pos_prefix->address_prefix, "udp"))
120 "validating memcmp\n");
121 if (GNUNET_YES == *broadcast)
123 "validating broadcast\n");
124 if ((0 == GNUNET_memcmp (pos_prefix->address_prefix, "udp")) &&
125 (GNUNET_YES == *broadcast) )
126 GNUNET_asprintf (&addr_and_port,
127 "%s:2086",
128 addr);
129 else if (NULL == natted_p)
130 GNUNET_asprintf (&addr_and_port,
131 "%s:60002",
132 addr);
133 else if (NULL != natted_p)
134 {
135 char *prefix;
136 char *rest;
137 char *address;
138
139 prefix = strtok (addr, "_");
140 rest = strtok (NULL, "_");
141 strtok (rest, "-");
142 address = strtok (NULL, "-");
143
144 GNUNET_asprintf (&addr_and_port,
145 "%s-%s:0",
146 prefix,
147 address);
148
149 }
150 peer = GNUNET_TESTING_get_peer (num, tl_system);
152 "validating peer number %u with identity %s and address %s %u %s and handle %p\n",
153 num,
154 GNUNET_i2s (peer),
155 addr_and_port,
156 *broadcast,
157 pos_prefix->address_prefix,
158 cps->ah);
161 *) cps->ah,
162 peer,
163 nt,
164 addr_and_port);
165 GNUNET_free (peer);
166 GNUNET_free (addr);
167 GNUNET_free (addr_and_port);
168 }
169 }
170 }
171 cps->con_num = con_num;
172}
#define LOG(kind,...)
Generic logging shortcut.
struct GNUNET_TESTING_Interpreter * is
static int prefix
If printing the value of PREFIX has been requested.
Definition: gnunet-config.c:59
static char * address
GNS address for this phone.
static struct GNUNET_NAT_AUTO_Test * nt
Handle to a NAT test operation.
const struct GNUNET_TESTING_Command * GNUNET_TESTING_interpreter_lookup_command(struct GNUNET_TESTING_Interpreter *is, const char *label)
Lookup command by label.
void GNUNET_TESTING_interpreter_fail(struct GNUNET_TESTING_Interpreter *is)
Current command failed, clean up and fail the test case.
struct GNUNET_TESTING_NodeConnection * GNUNET_TESTING_get_connections(unsigned int num, const struct GNUNET_TESTING_NetjailTopology *topology)
Get the connections to other nodes for a specific node.
Definition: testing.c:2251
unsigned int GNUNET_TESTING_calculate_num(struct GNUNET_TESTING_NodeConnection *node_connection, struct GNUNET_TESTING_NetjailTopology *topology)
Calculate the unique id identifying a node from a given connection.
Definition: testing.c:2361
char * GNUNET_TESTING_get_address(struct GNUNET_TESTING_NodeConnection *connection, const char *prefix)
Get the address for a specific communicator from a connection.
Definition: testing.c:2387
enum GNUNET_GenericReturnValue GNUNET_TESTING_get_trait_test_system(const struct GNUNET_TESTING_Command *cmd, const struct GNUNET_TESTING_System **ret)
enum GNUNET_GenericReturnValue GNUNET_TRANSPORT_TESTING_get_trait_broadcast(const struct GNUNET_TESTING_Command *cmd, const enum GNUNET_GenericReturnValue **ret)
struct GNUNET_PeerIdentity * GNUNET_TESTING_get_peer(unsigned int num, const struct GNUNET_TESTING_System *tl_system)
Retrieve peer identity from the test system with the unique node id.
Definition: testing.c:2276
enum GNUNET_GenericReturnValue GNUNET_TRANSPORT_TESTING_get_trait_state(const struct GNUNET_TESTING_Command *cmd, const struct GNUNET_TESTING_StartPeerState **ret)
void GNUNET_TRANSPORT_application_validate(struct GNUNET_TRANSPORT_ApplicationHandle *ch, const struct GNUNET_PeerIdentity *peer, enum GNUNET_NetworkType nt, const char *addr)
An application (or a communicator) has received a HELLO (or other address data of another peer) and w...
struct GNUNET_TRANSPORT_ApplicationHandle * GNUNET_TRANSPORT_application_init(const struct GNUNET_CONFIGURATION_Handle *cfg)
Initialize the TRANSPORT application client handle.
#define GNUNET_log(kind,...)
#define GNUNET_memcmp(a, b)
Compare memory in a and b, where both must be of the same pointer type.
GNUNET_GenericReturnValue
Named constants for return values.
@ GNUNET_YES
const char * GNUNET_i2s(const struct GNUNET_PeerIdentity *pid)
Convert a peer identity to a string (for printing debug messages).
@ GNUNET_ERROR_TYPE_ERROR
@ GNUNET_ERROR_TYPE_DEBUG
int int GNUNET_asprintf(char **buf, const char *format,...) __attribute__((format(printf
Like asprintf, just portable.
#define GNUNET_free(ptr)
Wrapper around free.
GNUNET_NetworkType
Types of networks (with separate quotas) we support.
Definition: gnunet_nt_lib.h:44
The identity of the host (wraps the signing key of the peer).
Protocol address prefix für a connection between nodes.
struct GNUNET_TESTING_AddressPrefix * next
Pointer to the next prefix in the DLL.
char * address_prefix
The address prefix.
A command to be run by the interpreter.
API for cmds working with core sub system provided by libgnunetcoretesting.
uint32_t num
Number globally identifying the node.
const struct GNUNET_TESTING_System * tl_system
The testing system of this node.
struct GNUNET_TESTING_Interpreter * is
unsigned int con_num
Number of connections.
const char * start_peer_label
Label of the cmd to start a peer.
struct GNUNET_TRANSPORT_ApplicationHandle * ah
Handle for transport.
struct GNUNET_TESTING_NodeConnection * node_connections_head
Connections to other peers.
struct GNUNET_TESTING_NetjailTopology * topology
The topology of the test setup.
struct GNUNET_TESTING_NodeConnection * next
Pointer to the next connection in the DLL.
struct GNUNET_TESTING_AddressPrefix * address_prefixes_head
Head of the DLL with the address prefixes for the protocolls this node is reachable.
struct GNUNET_CONFIGURATION_Handle * cfg
Peer's configuration.
char * cfgname
GNUnet configuration file used to start a peer.
Handle for a system on which GNUnet peers are executed; a system is used for reserving unique paths a...
Definition: testing.c:122
Handle to the TRANSPORT subsystem for application management.

References address, GNUNET_TESTING_AddressPrefix::address_prefix, GNUNET_TESTING_NodeConnection::address_prefixes_head, GNUNET_TESTING_ConnectPeersState::ah, GNUNET_TESTING_StartPeerState::cfg, GNUNET_TESTING_StartPeerState::cfgname, GNUNET_TESTING_ConnectPeersState::con_num, GNUNET_TESTING_ConnectPeersState::create_label, GNUNET_asprintf(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_ERROR_TYPE_ERROR, GNUNET_free, GNUNET_i2s(), GNUNET_log, GNUNET_memcmp, GNUNET_TESTING_calculate_num(), GNUNET_TESTING_get_address(), GNUNET_TESTING_get_connections(), GNUNET_TESTING_get_peer(), GNUNET_TESTING_get_trait_test_system(), GNUNET_TESTING_interpreter_fail(), GNUNET_TESTING_interpreter_lookup_command(), GNUNET_TRANSPORT_application_init(), GNUNET_TRANSPORT_application_validate(), GNUNET_TRANSPORT_TESTING_get_trait_broadcast(), GNUNET_TRANSPORT_TESTING_get_trait_state(), GNUNET_YES, GNUNET_TESTING_ConnectPeersState::is, is, LOG, GNUNET_TESTING_AddressPrefix::next, GNUNET_TESTING_NodeConnection::next, GNUNET_TESTING_ConnectPeersState::node_connections_head, nt, GNUNET_TESTING_ConnectPeersState::num, prefix, GNUNET_TESTING_ConnectPeersState::start_peer_label, GNUNET_TESTING_ConnectPeersState::tl_system, and GNUNET_TESTING_ConnectPeersState::topology.

Referenced by GNUNET_CORE_cmd_connect_peers().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ connect_peers_cleanup()

static void connect_peers_cleanup ( void *  cls)
static

The cleanup function of this cmd frees resources the cmd allocated.

Definition at line 180 of file core_api_cmd_connecting_peers.c.

181{
182 struct GNUNET_TESTING_ConnectPeersState *cps = cls;
183
185 GNUNET_free (cps);
186}
struct GNUNET_CONTAINER_MultiShortmap * connected_peers_map
A map with struct GNUNET_MQ_Handle values for each peer this peer is connected to.

References GNUNET_TESTING_ConnectPeersState::connected_peers_map, and GNUNET_free.

Referenced by GNUNET_CORE_cmd_connect_peers().

Here is the caller graph for this function:

◆ connect_peers_traits()

enum GNUNET_GenericReturnValue connect_peers_traits ( void *  cls,
const void **  ret,
const char *  trait,
unsigned int  index 
)

This function prepares an array with traits.

Definition at line 194 of file core_api_cmd_connecting_peers.c.

198{
199 struct GNUNET_TESTING_ConnectPeersState *cps = cls;
200 struct GNUNET_TESTING_Trait traits[] = {
203 };
204 return GNUNET_TESTING_get_trait (traits,
205 ret,
206 trait,
207 index);
208}
static int ret
Final status code.
Definition: gnunet-arm.c:94
struct GNUNET_TESTING_Trait GNUNET_CORE_TESTING_make_trait_connect_peer_state(const struct GNUNET_TESTING_ConnectPeersState *value)
struct GNUNET_TESTING_Trait GNUNET_TESTING_trait_end(void)
"end" of traits array.
enum GNUNET_GenericReturnValue GNUNET_TESTING_get_trait(const struct GNUNET_TESTING_Trait *traits, const void **ret, const char *trait, unsigned int index)
Obtain value of a trait from a command.
A struct GNUNET_TESTING_Trait can be used to exchange data between cmds.
unsigned int index
Index number associated with the trait.

References GNUNET_CORE_TESTING_make_trait_connect_peer_state(), GNUNET_TESTING_get_trait(), GNUNET_TESTING_trait_end(), GNUNET_TESTING_Trait::index, and ret.

Referenced by GNUNET_CORE_cmd_connect_peers().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_CORE_cmd_connect_peers()

struct GNUNET_TESTING_Command GNUNET_CORE_cmd_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 
)

FIXME: document properly! Create command.

Parameters
labelname for command
start_peer_labelLabel of the cmd to start a peer.
create_labelLabel of the cmd which started the test system.
numNumber globally identifying the node.
topologyThe topology for the test setup.
additional_connectsNumber of additional connects this cmd will wait for not triggered by this cmd.
Returns
command.

Definition at line 212 of file core_api_cmd_connecting_peers.c.

221{
223 unsigned int node_additional_connects;
224 struct GNUNET_CONTAINER_MultiShortmap *connected_peers_map =
226 unsigned int i;
227
228 node_additional_connects = GNUNET_TESTING_get_additional_connects (num,
229 topology);
230
232 "global: %u and local: %u additional_connects\n",
233 additional_connects,
234 node_additional_connects);
235
236 if (0 != node_additional_connects)
237 additional_connects = node_additional_connects;
238
240 cps->start_peer_label = start_peer_label;
241 cps->num = num;
242 cps->create_label = create_label;
243 cps->topology = topology;
244 cps->additional_connects = additional_connects;
245 cps->wait_for_connect = wait_for_connect;
246 cps->connected_peers_map = connected_peers_map;
247
248 if (NULL != handlers)
249 {
250 for (i = 0; NULL != handlers[i].cb; i++)
251 ;
252 cps->handlers = GNUNET_new_array (i + 1,
255 handlers,
256 i * sizeof(struct GNUNET_MQ_MessageHandler));
257 }
258
259 if (GNUNET_YES == wait_for_connect)
260 return GNUNET_TESTING_command_new (cps,
261 label,
265 &cps->ac);
266 else
267 return GNUNET_TESTING_command_new (cps,
268 label,
272 NULL);
273}
struct GNUNET_MQ_MessageHandlers handlers[]
Definition: 003.c:1
static void connect_peers_run(void *cls, struct GNUNET_TESTING_Interpreter *is)
The run method of this cmd will connect to peers.
static void connect_peers_cleanup(void *cls)
The cleanup function of this cmd frees resources the cmd allocated.
enum GNUNET_GenericReturnValue connect_peers_traits(void *cls, const void **ret, const char *trait, unsigned int index)
This function prepares an array with traits.
struct GNUNET_TESTING_Command GNUNET_TESTING_command_new(void *cls, const char *label, GNUNET_TESTING_CommandRunRoutine run, GNUNET_TESTING_CommandCleanupRoutine cleanup, GNUNET_TESTING_CommandGetTraits traits, struct GNUNET_TESTING_AsyncContext *ac)
Create a new command.
unsigned int GNUNET_TESTING_get_additional_connects(unsigned int num, struct GNUNET_TESTING_NetjailTopology *topology)
Get the number of unintentional additional connections the node waits for.
Definition: testing.c:2447
struct GNUNET_CONTAINER_MultiShortmap * GNUNET_CONTAINER_multishortmap_create(unsigned int len, int do_not_copy_keys)
Create a multi peer map (hash map for public keys of peers).
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.
@ GNUNET_NO
#define GNUNET_new(type)
Allocate a struct or union of the given type.
#define GNUNET_new_array(n, type)
Allocate a size n array with structs or unions of the given type.
Internal representation of the hash map.
Message handler for a specific message type.
unsigned int additional_connects
Number of additional connects this cmd will wait for not triggered by this cmd.
unsigned int wait_for_connect
Flag indicating, whether the command is waiting for peers to connect that are configured to connect.
struct GNUNET_MQ_MessageHandler * handlers
Receive callback.
struct GNUNET_TESTING_AsyncContext ac
Context for our asynchronous completion.

References GNUNET_TESTING_ConnectPeersState::ac, GNUNET_TESTING_ConnectPeersState::additional_connects, connect_peers_cleanup(), connect_peers_run(), connect_peers_traits(), GNUNET_TESTING_ConnectPeersState::connected_peers_map, GNUNET_TESTING_ConnectPeersState::create_label, GNUNET_CONTAINER_multishortmap_create(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_memcpy, GNUNET_new, GNUNET_new_array, GNUNET_NO, GNUNET_TESTING_command_new(), GNUNET_TESTING_get_additional_connects(), GNUNET_YES, handlers, GNUNET_TESTING_ConnectPeersState::handlers, LOG, GNUNET_TESTING_ConnectPeersState::num, GNUNET_TESTING_ConnectPeersState::start_peer_label, GNUNET_TESTING_ConnectPeersState::topology, and GNUNET_TESTING_ConnectPeersState::wait_for_connect.

Here is the call graph for this function: