aboutsummaryrefslogtreecommitdiff
path: root/src/multicast
diff options
context:
space:
mode:
authorxrs <xrs@mail36.net>2017-03-13 20:35:18 +0100
committerxrs <xrs@mail36.net>2017-03-13 20:35:18 +0100
commit9f68c9e7d383061abbc81d1590abf25cde2305fe (patch)
tree971a0188e84878f43c2074def4ac3531c73acba6 /src/multicast
parent501c1f7794be6e8a2ea15200dbdadd4c066edb89 (diff)
parent8691934f57063bfa5032f4e34836ecbcb3d761e9 (diff)
downloadgnunet-9f68c9e7d383061abbc81d1590abf25cde2305fe.tar.gz
gnunet-9f68c9e7d383061abbc81d1590abf25cde2305fe.zip
Merge branch 'master' of ssh://gnunet.org/gnunet
Conflicts: src/multicast/test_multicast_2peers.c
Diffstat (limited to 'src/multicast')
-rw-r--r--src/multicast/Makefile.am6
-rw-r--r--src/multicast/test_multicast_2peers.c66
-rw-r--r--src/multicast/test_multicast_multipeer.c56
3 files changed, 86 insertions, 42 deletions
diff --git a/src/multicast/Makefile.am b/src/multicast/Makefile.am
index 2a00a7a02..8a754d3db 100644
--- a/src/multicast/Makefile.am
+++ b/src/multicast/Makefile.am
@@ -51,9 +51,9 @@ gnunet_service_multicast_LDADD = \
51 $(GN_LIBINTL) 51 $(GN_LIBINTL)
52 52
53check_PROGRAMS = \ 53check_PROGRAMS = \
54 test_multicast \ 54 test_multicast_multipeer
55 test_multicast_2peers 55# test_multicast
56# test_multicast_multipeer 56# test_multicast_2peers
57 57
58if ENABLE_TEST_RUN 58if ENABLE_TEST_RUN
59AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@}; export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH; unset XDG_DATA_HOME; unset XDG_CONFIG_HOME; 59AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@}; export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH; unset XDG_DATA_HOME; unset XDG_CONFIG_HOME;
diff --git a/src/multicast/test_multicast_2peers.c b/src/multicast/test_multicast_2peers.c
index 9d1f42063..8ce4d585f 100644
--- a/src/multicast/test_multicast_2peers.c
+++ b/src/multicast/test_multicast_2peers.c
@@ -20,7 +20,7 @@
20 20
21/** 21/**
22 * @file multicast/test_multicast_2peers.c 22 * @file multicast/test_multicast_2peers.c
23 * @brief Tests for the Multicast API with two peers doing the ping 23 * @brief Tests for the Multicast API with two peers doing the ping
24 * pong test. 24 * pong test.
25 * @author xrs 25 * @author xrs
26 */ 26 */
@@ -118,16 +118,17 @@ member_join_request (void *cls,
118} 118}
119 119
120 120
121int notify (void *cls, 121static int
122 size_t *data_size, 122notify (void *cls,
123 void *data) 123 size_t *data_size,
124 void *data)
124{ 125{
125 126
126 char text[] = "ping"; 127 char text[] = "ping";
127 *data_size = strlen(text)+1; 128 *data_size = strlen(text)+1;
128 GNUNET_memcpy(data, text, *data_size); 129 GNUNET_memcpy(data, text, *data_size);
129 130
130 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 131 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
131 "Member sents message to origin: %s\n", text); 132 "Member sents message to origin: %s\n", text);
132 133
133 return GNUNET_YES; 134 return GNUNET_YES;
@@ -142,26 +143,30 @@ member_join_decision (void *cls,
142 const struct GNUNET_PeerIdentity *relays, 143 const struct GNUNET_PeerIdentity *relays,
143 const struct GNUNET_MessageHeader *join_msg) 144 const struct GNUNET_MessageHeader *join_msg)
144{ 145{
145 struct GNUNET_MULTICAST_MemberTransmitHandle *req; 146 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
146 147 "Member received a decision from origin: %s\n",
147 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 148 (GNUNET_YES == is_admitted)
148 "Member received a decision from origin: %s\n", (GNUNET_YES == is_admitted)?"accepted":"rejected"); 149 ? "accepted"
149 150 : "rejected");
151
150 if (GNUNET_YES == is_admitted) 152 if (GNUNET_YES == is_admitted)
151 { 153 {
154 struct GNUNET_MULTICAST_MemberTransmitHandle *req;
155
156 // FIXME: move to MQ-style API!
152 req = GNUNET_MULTICAST_member_to_origin (member, 157 req = GNUNET_MULTICAST_member_to_origin (member,
153 0, 158 0,
154 notify, 159 &notify,
155 NULL); 160 NULL);
156 } 161 }
157} 162}
158 163
159 164
160static void 165static void
161member_message (void *cls, 166member_message (void *cls,
162 const struct GNUNET_MULTICAST_MessageHeader *msg) 167 const struct GNUNET_MULTICAST_MessageHeader *msg)
163{ 168{
164 if (0 != strncmp ("pong", (char *)&msg[1], 4)) 169 if (0 != strncmp ("pong", (char *)&msg[1], 4))
165 { 170 {
166 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "member did not receive pong\n"); 171 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "member did not receive pong\n");
167 result = GNUNET_SYSERR; 172 result = GNUNET_SYSERR;
@@ -187,19 +192,19 @@ origin_join_request (void *cls,
187 192
188 uint8_t data_size = ntohs (join_msg->size); 193 uint8_t data_size = ntohs (join_msg->size);
189 194
190 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 195 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
191 "origin got a join request...\n"); 196 "origin got a join request...\n");
192 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 197 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
193 "origin receives: '%s'\n", (char *)&join_msg[1]); 198 "origin receives: '%s'\n", (char *)&join_msg[1]);
194 199
195 char data[] = "Come in!"; 200 const char data[] = "Come in!";
196 data_size = strlen (data) + 1; 201 data_size = strlen (data) + 1;
197 join_resp = GNUNET_malloc (sizeof (join_resp) + data_size); 202 join_resp = GNUNET_malloc (sizeof (join_resp) + data_size);
198 join_resp->size = htons (sizeof (join_resp) + data_size); 203 join_resp->size = htons (sizeof (join_resp) + data_size);
199 join_resp->type = htons (123); 204 join_resp->type = htons (123);
200 GNUNET_memcpy (&join_resp[1], data, data_size); 205 GNUNET_memcpy (&join_resp[1], data, data_size);
201 206
202 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 207 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
203 "origin sends: '%s'\n", data); 208 "origin sends: '%s'\n", data);
204 209
205 GNUNET_MULTICAST_join_decision (jh, 210 GNUNET_MULTICAST_join_decision (jh,
@@ -207,23 +212,23 @@ origin_join_request (void *cls,
207 0, 212 0,
208 NULL, 213 NULL,
209 join_resp); 214 join_resp);
210 215 GNUNET_free (join_resp);
211 result = GNUNET_OK; 216 result = GNUNET_OK;
212} 217}
213 218
214 219
215int 220int
216origin_notify (void *cls, 221origin_notify (void *cls,
217 size_t *data_size, 222 size_t *data_size,
218 void *data) 223 void *data)
219{ 224{
220 char text[] = "pong"; 225 char text[] = "pong";
221 *data_size = strlen(text)+1; 226 *data_size = strlen(text)+1;
222 memcpy(data, text, *data_size); 227 memcpy(data, text, *data_size);
223 228
224 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin sends (to all): %s\n", text); 229 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin sends (to all): %s\n", text);
225 230
226 return GNUNET_YES; 231 return GNUNET_YES;
227} 232}
228 233
229 234
@@ -232,8 +237,8 @@ origin_request (void *cls,
232 const struct GNUNET_MULTICAST_RequestHeader *req) 237 const struct GNUNET_MULTICAST_RequestHeader *req)
233{ 238{
234 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin receives: %s\n", (char *)&req[1]); 239 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin receives: %s\n", (char *)&req[1]);
235 240
236 if (0 != strncmp ("ping", (char *)&req[1], 4)) 241 if (0 != strncmp ("ping", (char *)&req[1], 4))
237 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "origin didn't reveice a correct request"); 242 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "origin didn't reveice a correct request");
238 243
239 GNUNET_MULTICAST_origin_to_all (origin, 244 GNUNET_MULTICAST_origin_to_all (origin,
@@ -246,7 +251,7 @@ origin_request (void *cls,
246 251
247static void 252static void
248origin_message (void *cls, 253origin_message (void *cls,
249 const struct GNUNET_MULTICAST_MessageHeader *msg) 254 const struct GNUNET_MULTICAST_MessageHeader *msg)
250{ 255{
251 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin message msg\n"); 256 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin message msg\n");
252} 257}
@@ -288,11 +293,12 @@ multicast_ca1 (void *cls,
288 const struct GNUNET_CONFIGURATION_Handle *cfg) 293 const struct GNUNET_CONFIGURATION_Handle *cfg)
289{ 294{
290 struct GNUNET_MessageHeader *join_msg; 295 struct GNUNET_MessageHeader *join_msg;
296 void *ret;
291 297
292 // Get members keys 298 // Get members keys
293 member_key = GNUNET_CRYPTO_ecdsa_key_create (); 299 member_key = GNUNET_CRYPTO_ecdsa_key_create ();
294 GNUNET_CRYPTO_ecdsa_key_get_public (member_key, &member_pub_key); 300 GNUNET_CRYPTO_ecdsa_key_get_public (member_key, &member_pub_key);
295 301
296 char data[] = "Hi, can I enter?"; 302 char data[] = "Hi, can I enter?";
297 uint8_t data_size = strlen (data) + 1; 303 uint8_t data_size = strlen (data) + 1;
298 join_msg = GNUNET_malloc (sizeof (join_msg) + data_size); 304 join_msg = GNUNET_malloc (sizeof (join_msg) + data_size);
@@ -303,7 +309,7 @@ multicast_ca1 (void *cls,
303 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 309 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
304 "Members tries to join multicast group\n"); 310 "Members tries to join multicast group\n");
305 311
306 return GNUNET_MULTICAST_member_join (cfg, 312 ret = GNUNET_MULTICAST_member_join (cfg,
307 &group_pub_key, 313 &group_pub_key,
308 member_key, 314 member_key,
309 peer_id[0], 315 peer_id[0],
@@ -316,6 +322,8 @@ multicast_ca1 (void *cls,
316 NULL, /* no test for member_replay_msg */ 322 NULL, /* no test for member_replay_msg */
317 member_message, 323 member_message,
318 NULL); 324 NULL);
325 GNUNET_free (join_msg);
326 return ret;
319} 327}
320 328
321 329
@@ -327,7 +335,7 @@ peer_information_cb (void *cls,
327{ 335{
328 int i = (int) (long) cls; 336 int i = (int) (long) cls;
329 337
330 if (NULL == pinfo) 338 if (NULL == pinfo)
331 { 339 {
332 result = GNUNET_SYSERR; 340 result = GNUNET_SYSERR;
333 GNUNET_SCHEDULER_shutdown (); 341 GNUNET_SCHEDULER_shutdown ();
@@ -341,7 +349,7 @@ peer_information_cb (void *cls,
341 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 349 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
342 "Create member peer\n"); 350 "Create member peer\n");
343 351
344 if (0 == i) 352 if (0 == i)
345 { 353 {
346 /* connect to multicast service of member */ 354 /* connect to multicast service of member */
347 op1 = GNUNET_TESTBED_service_connect (NULL, /* Closure for operation */ 355 op1 = GNUNET_TESTBED_service_connect (NULL, /* Closure for operation */
diff --git a/src/multicast/test_multicast_multipeer.c b/src/multicast/test_multicast_multipeer.c
index 266c87a16..c2078abf9 100644
--- a/src/multicast/test_multicast_multipeer.c
+++ b/src/multicast/test_multicast_multipeer.c
@@ -38,8 +38,9 @@
38struct multicast_peer 38struct multicast_peer
39{ 39{
40 int peer; /* peer number */ 40 int peer; /* peer number */
41 struct GNUNET_TESTBED_Operation *op; 41 struct GNUNET_TESTBED_Operation *op; /* not yet in use */
42 struct GNUNET_TESTBED_Operation *pi_op; 42 struct GNUNET_TESTBED_Operation *pi_op; /* not yet in use */
43 uint8_t test_ok;
43}; 44};
44 45
45static void service_connect (void *cls, 46static void service_connect (void *cls,
@@ -49,12 +50,14 @@ static void service_connect (void *cls,
49 50
50static struct multicast_peer **mc_peers; 51static struct multicast_peer **mc_peers;
51static struct GNUNET_TESTBED_Peer **peers; 52static struct GNUNET_TESTBED_Peer **peers;
53
54// FIXME: refactor
52static struct GNUNET_TESTBED_Operation *op[NUM_PEERS]; 55static struct GNUNET_TESTBED_Operation *op[NUM_PEERS];
53static struct GNUNET_TESTBED_Operation *pi_op[NUM_PEERS]; 56static struct GNUNET_TESTBED_Operation *pi_op[NUM_PEERS];
54static const struct GNUNET_PeerIdentity *peer_id[NUM_PEERS]; 57static const struct GNUNET_PeerIdentity *peer_id[NUM_PEERS];
55 58
56static struct GNUNET_MULTICAST_Origin *origin; 59static struct GNUNET_MULTICAST_Origin *origin;
57static struct GNUNET_MULTICAST_Member *member[NUM_PEERS]; 60static struct GNUNET_MULTICAST_Member *member[NUM_PEERS]; /* first element always empty */
58 61
59static struct GNUNET_SCHEDULER_Task *timeout_tid; 62static struct GNUNET_SCHEDULER_Task *timeout_tid;
60 63
@@ -70,7 +73,6 @@ static struct GNUNET_CRYPTO_EcdsaPublicKey *member_pub_key[NUM_PEERS];
70 */ 73 */
71static int result; 74static int result;
72 75
73
74/** 76/**
75 * Function run on CTRL-C or shutdown (i.e. success/timeout/etc.). 77 * Function run on CTRL-C or shutdown (i.e. success/timeout/etc.).
76 * Cleans up. 78 * Cleans up.
@@ -132,6 +134,7 @@ member_join_request (void *cls,
132 134
133} 135}
134 136
137
135static int 138static int
136notify (void *cls, 139notify (void *cls,
137 size_t *data_size, 140 size_t *data_size,
@@ -174,6 +177,7 @@ member_join_decision (void *cls,
174 } 177 }
175} 178}
176 179
180
177static void 181static void
178member_replay_frag () 182member_replay_frag ()
179{ 183{
@@ -181,6 +185,7 @@ member_replay_frag ()
181 "member replay frag...\n"); 185 "member replay frag...\n");
182} 186}
183 187
188
184static void 189static void
185member_replay_msg () 190member_replay_msg ()
186{ 191{
@@ -188,17 +193,42 @@ member_replay_msg ()
188 "member replay msg...\n"); 193 "member replay msg...\n");
189} 194}
190 195
196
191static void 197static void
192member_message () 198member_message (void *cls,
199 const struct GNUNET_MULTICAST_MessageHeader *msg)
193{ 200{
201 struct multicast_peer *mc_peer = (struct multicast_peer*)cls;
202
203 if (0 != strncmp ("pong", (char *)&msg[1], 4))
204 {
205 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
206 "peer #%i did not receive pong\n",
207 mc_peer->peer);
208
209 result = GNUNET_SYSERR;
210 GNUNET_SCHEDULER_shutdown ();
211 }
212
194 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 213 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
195 "member message...\n"); 214 "peer #%i receives: %s\n",
215 mc_peer->peer,
216 (char *)&msg[1]);
217
218 mc_peer->test_ok = GNUNET_OK;
219
220 // FIXME: ugly test function
221 /*
222 for (int i=1; i<NUM_PEERS; i++)
223 if (!mc_peers[i]->test_ok)
224 return;
196 225
197 // FIXME: not finished here
198 result = GNUNET_YES; 226 result = GNUNET_YES;
199 GNUNET_SCHEDULER_shutdown (); 227 GNUNET_SCHEDULER_shutdown();
228 */
200} 229}
201 230
231
202static void 232static void
203origin_join_request (void *cls, 233origin_join_request (void *cls,
204 const struct GNUNET_CRYPTO_EcdsaPublicKey *member_pub_key, 234 const struct GNUNET_CRYPTO_EcdsaPublicKey *member_pub_key,
@@ -233,6 +263,7 @@ origin_join_request (void *cls,
233 result = GNUNET_OK; 263 result = GNUNET_OK;
234} 264}
235 265
266
236static void 267static void
237origin_replay_frag (void *cls, 268origin_replay_frag (void *cls,
238 const struct GNUNET_CRYPTO_EcdsaPublicKey *member_pub_key, 269 const struct GNUNET_CRYPTO_EcdsaPublicKey *member_pub_key,
@@ -243,6 +274,7 @@ origin_replay_frag (void *cls,
243 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin replay fraq msg\n"); 274 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin replay fraq msg\n");
244} 275}
245 276
277
246static void 278static void
247origin_replay_msg (void *cls, 279origin_replay_msg (void *cls,
248 const struct GNUNET_CRYPTO_EcdsaPublicKey *member_pub_key, 280 const struct GNUNET_CRYPTO_EcdsaPublicKey *member_pub_key,
@@ -288,6 +320,7 @@ origin_request (void *cls,
288 cls); 320 cls);
289} 321}
290 322
323
291static void 324static void
292origin_message (void *cls, 325origin_message (void *cls,
293 const struct GNUNET_MULTICAST_MessageHeader *msg) 326 const struct GNUNET_MULTICAST_MessageHeader *msg)
@@ -295,6 +328,7 @@ origin_message (void *cls,
295 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin message msg\n"); 328 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin message msg\n");
296} 329}
297 330
331
298static void 332static void
299multicast_da (void *cls, 333multicast_da (void *cls,
300 void *op_result) 334 void *op_result)
@@ -375,6 +409,7 @@ multicast_ca (void *cls,
375 } 409 }
376} 410}
377 411
412
378static void 413static void
379peer_information_cb (void *cls, 414peer_information_cb (void *cls,
380 struct GNUNET_TESTBED_Operation *operation, 415 struct GNUNET_TESTBED_Operation *operation,
@@ -452,7 +487,7 @@ service_connect (void *cls,
452 } 487 }
453 else 488 else
454 { 489 {
455 member[mc_peer->peer-1] = ca_result; 490 member[mc_peer->peer] = ca_result;
456 } 491 }
457} 492}
458 493
@@ -500,6 +535,7 @@ testbed_master (void *cls,
500 { 535 {
501 mc_peers[i] = GNUNET_new (struct multicast_peer); 536 mc_peers[i] = GNUNET_new (struct multicast_peer);
502 mc_peers[i]->peer = i; 537 mc_peers[i]->peer = i;
538 mc_peers[i]->test_ok = GNUNET_NO;
503 } 539 }
504 540
505 op[0] = GNUNET_TESTBED_service_connect (NULL, /* Closure for operation */ 541 op[0] = GNUNET_TESTBED_service_connect (NULL, /* Closure for operation */
@@ -517,7 +553,7 @@ testbed_master (void *cls,
517 GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL); /* Schedule a new task on shutdown */ 553 GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL); /* Schedule a new task on shutdown */
518 554
519 /* Schedule the shutdown task with a delay of a few Seconds */ 555 /* Schedule the shutdown task with a delay of a few Seconds */
520 timeout_tid = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 60), 556 timeout_tid = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 80),
521 &timeout_task, NULL); 557 &timeout_task, NULL);
522} 558}
523 559