aboutsummaryrefslogtreecommitdiff
path: root/src/transport
diff options
context:
space:
mode:
Diffstat (limited to 'src/transport')
-rw-r--r--src/transport/Makefile.am18
-rw-r--r--src/transport/gnunet-transport-connect-running-peers.c1
-rw-r--r--src/transport/plugin_transport_http.h2
-rw-r--r--src/transport/template_cfg_peer2.conf2
-rw-r--r--src/transport/test_transport_api.c190
-rw-r--r--src/transport/test_transport_api_http_peer1.conf2
-rw-r--r--src/transport/test_transport_api_limited_sockets.c44
-rw-r--r--src/transport/test_transport_api_reliability.c81
-rw-r--r--src/transport/test_transport_api_reliability_tcp_peer1.conf1
-rw-r--r--src/transport/test_transport_api_reliability_tcp_peer2.conf2
-rw-r--r--src/transport/test_transport_api_tcp_nat_peer2.conf3
-rw-r--r--src/transport/test_transport_api_tcp_peer1.conf2
-rw-r--r--src/transport/test_transport_api_timeout.c72
-rw-r--r--src/transport/test_transport_api_timeout_tcp_peer1.conf2
-rw-r--r--src/transport/test_transport_api_timeout_tcp_peer2.conf5
-rw-r--r--src/transport/test_transport_api_unreliability.c49
-rw-r--r--src/transport/test_transport_api_unreliability_constant.c48
-rw-r--r--src/transport/test_transport_startonly.c17
-rw-r--r--src/transport/test_transport_testing.c106
-rw-r--r--src/transport/transport-testing.c302
-rw-r--r--src/transport/transport-testing.h87
21 files changed, 725 insertions, 311 deletions
diff --git a/src/transport/Makefile.am b/src/transport/Makefile.am
index d8821e499..6ed3e918a 100644
--- a/src/transport/Makefile.am
+++ b/src/transport/Makefile.am
@@ -56,8 +56,8 @@ UNIX_QUOTA_TEST = test_quota_compliance_unix \
56endif 56endif
57 57
58noinst_PROGRAMS = \ 58noinst_PROGRAMS = \
59 $(WLAN_BIN_DUMMY) \ 59 $(WLAN_BIN_DUMMY)
60 gnunet-transport-connect-running-peers 60# gnunet-transport-connect-running-peers
61 61
62lib_LTLIBRARIES = \ 62lib_LTLIBRARIES = \
63 libgnunettransport.la \ 63 libgnunettransport.la \
@@ -337,13 +337,13 @@ test_transport_testing_LDADD = \
337 $(top_builddir)/src/hello/libgnunethello.la \ 337 $(top_builddir)/src/hello/libgnunethello.la \
338 $(top_builddir)/src/transport/libgnunettransporttesting.la 338 $(top_builddir)/src/transport/libgnunettransporttesting.la
339 339
340gnunet_transport_connect_running_peers_SOURCES = \ 340#gnunet_transport_connect_running_peers_SOURCES = \
341 gnunet-transport-connect-running-peers.c 341# gnunet-transport-connect-running-peers.c
342gnunet_transport_connect_running_peers_LDADD = \ 342#gnunet_transport_connect_running_peers_LDADD = \
343 $(top_builddir)/src/transport/libgnunettransport.la \ 343# $(top_builddir)/src/transport/libgnunettransport.la \
344 $(top_builddir)/src/hello/libgnunethello.la \ 344# $(top_builddir)/src/hello/libgnunethello.la \
345 $(top_builddir)/src/util/libgnunetutil.la \ 345# $(top_builddir)/src/util/libgnunetutil.la \
346 $(top_builddir)/src/transport/libgnunettransporttesting.la 346# $(top_builddir)/src/transport/libgnunettransporttesting.la
347 347
348test_transport_api_disconnect_SOURCES = \ 348test_transport_api_disconnect_SOURCES = \
349 test_transport_api_disconnect.c 349 test_transport_api_disconnect.c
diff --git a/src/transport/gnunet-transport-connect-running-peers.c b/src/transport/gnunet-transport-connect-running-peers.c
index 3542f8521..9b60ba176 100644
--- a/src/transport/gnunet-transport-connect-running-peers.c
+++ b/src/transport/gnunet-transport-connect-running-peers.c
@@ -324,6 +324,7 @@ run (void *cls, char *const *args, const char *cfgfile,
324 324
325 cc = GNUNET_TRANSPORT_TESTING_connect_peers (p1, p2, &testing_connect_cb, 325 cc = GNUNET_TRANSPORT_TESTING_connect_peers (p1, p2, &testing_connect_cb,
326 NULL); 326 NULL);
327
327} 328}
328 329
329 330
diff --git a/src/transport/plugin_transport_http.h b/src/transport/plugin_transport_http.h
index d5fa4725e..16da05c32 100644
--- a/src/transport/plugin_transport_http.h
+++ b/src/transport/plugin_transport_http.h
@@ -42,7 +42,7 @@
42#include <curl/curl.h> 42#include <curl/curl.h>
43 43
44 44
45#define DEBUG_HTTP GNUNET_EXTRA_LOGGING 45#define DEBUG_HTTP GNUNET_YES
46#define VERBOSE_SERVER GNUNET_EXTRA_LOGGING 46#define VERBOSE_SERVER GNUNET_EXTRA_LOGGING
47#define VERBOSE_CLIENT GNUNET_EXTRA_LOGGING 47#define VERBOSE_CLIENT GNUNET_EXTRA_LOGGING
48#define VERBOSE_CURL GNUNET_NO 48#define VERBOSE_CURL GNUNET_NO
diff --git a/src/transport/template_cfg_peer2.conf b/src/transport/template_cfg_peer2.conf
index 2fb65b9c9..a086a2408 100644
--- a/src/transport/template_cfg_peer2.conf
+++ b/src/transport/template_cfg_peer2.conf
@@ -4,7 +4,7 @@ SERVICEHOME = /tmp/test-transport/api-tcp-p2/
4DEFAULTCONFIG = template_cfg_peer2.conf 4DEFAULTCONFIG = template_cfg_peer2.conf
5 5
6[transport-tcp] 6[transport-tcp]
7PORT = 0 7PORT = 12100
8TIMEOUT = 5000 8TIMEOUT = 5000
9 9
10[arm] 10[arm]
diff --git a/src/transport/test_transport_api.c b/src/transport/test_transport_api.c
index c9068c47a..49e160ddb 100644
--- a/src/transport/test_transport_api.c
+++ b/src/transport/test_transport_api.c
@@ -75,6 +75,8 @@ static GNUNET_TRANSPORT_TESTING_ConnectRequest cc;
75 75
76struct GNUNET_TRANSPORT_TransmitHandle *th; 76struct GNUNET_TRANSPORT_TransmitHandle *th;
77 77
78struct TransportTestingHandle * tth;
79
78char *cfg_file_p1; 80char *cfg_file_p1;
79 81
80char *cfg_file_p2; 82char *cfg_file_p2;
@@ -90,7 +92,55 @@ static void
90end () 92end ()
91{ 93{
92 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stopping peers\n"); 94 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stopping peers\n");
95#if 0
96static void
97get_hello_p2 (void *cb_cls, const struct GNUNET_MessageHeader *message);
98
99static void
100get_hello_p1 (void *cb_cls, const struct GNUNET_MessageHeader *message);
101
102static void
103notify_connect_internal (void *cls, const struct GNUNET_PeerIdentity *peer,
104 const struct GNUNET_TRANSPORT_ATS_Information *ats,
105 uint32_t ats_count)
106{
107 struct ConnectingContext *cc = cls;
108
109 GNUNET_assert (cc != NULL);
110
111 if (0 ==
112 memcmp (&(*peer).hashPubKey, &cc->p1->id.hashPubKey,
113 sizeof (GNUNET_HashCode)))
114 {
115 if (cc->p1_c == GNUNET_NO)
116 cc->p1_c = GNUNET_YES;
117 }
118 if (0 ==
119 memcmp (&(*peer).hashPubKey, &cc->p2->id.hashPubKey,
120 sizeof (GNUNET_HashCode)))
121 {
122 if (cc->p2_c == GNUNET_NO)
123 cc->p2_c = GNUNET_YES;
124 }
93 125
126 if ((cc->p2_c == GNUNET_YES) && (cc->p2_c == GNUNET_YES))
127 {
128 /* clean up */
129 if (cc->tct != GNUNET_SCHEDULER_NO_TASK)
130 GNUNET_SCHEDULER_cancel (cc->tct);
131
132 cc->tct = GNUNET_SCHEDULER_NO_TASK;
133
134 GNUNET_TRANSPORT_disconnect (cc->th_p1);
135 GNUNET_TRANSPORT_disconnect (cc->th_p2);
136
137 if (cc->cb != NULL)
138 cc->cb (cc->p1, cc->p2, cc->cb_cls);
139
140 GNUNET_free (cc);
141 }
142}
143#endif
94 if (send_task != GNUNET_SCHEDULER_NO_TASK) 144 if (send_task != GNUNET_SCHEDULER_NO_TASK)
95 GNUNET_SCHEDULER_cancel (send_task); 145 GNUNET_SCHEDULER_cancel (send_task);
96 146
@@ -101,8 +151,8 @@ end ()
101 GNUNET_TRANSPORT_notify_transmit_ready_cancel (th); 151 GNUNET_TRANSPORT_notify_transmit_ready_cancel (th);
102 th = NULL; 152 th = NULL;
103 153
104 GNUNET_TRANSPORT_TESTING_stop_peer (p1); 154 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1);
105 GNUNET_TRANSPORT_TESTING_stop_peer (p2); 155 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2);
106} 156}
107 157
108static void 158static void
@@ -112,13 +162,14 @@ end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
112 162
113 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Fail! Stopping peers\n"); 163 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Fail! Stopping peers\n");
114 164
165
115 if (send_task != GNUNET_SCHEDULER_NO_TASK) 166 if (send_task != GNUNET_SCHEDULER_NO_TASK)
116 GNUNET_SCHEDULER_cancel (send_task); 167 GNUNET_SCHEDULER_cancel (send_task);
117 168
118 if (cc != NULL) 169 if (cc != NULL)
119 { 170 {
120 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Fail! Could not connect peers\n")); 171 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Fail! Could not connect peers\n"));
121 GNUNET_TRANSPORT_TESTING_connect_peers_cancel (cc); 172 GNUNET_TRANSPORT_TESTING_connect_peers_cancel (tth, cc);
122 } 173 }
123 174
124 if (th != NULL) 175 if (th != NULL)
@@ -126,9 +177,11 @@ end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
126 th = NULL; 177 th = NULL;
127 178
128 if (p1 != NULL) 179 if (p1 != NULL)
129 GNUNET_TRANSPORT_TESTING_stop_peer (p1); 180 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1);
130 if (p2 != NULL) 181 if (p2 != NULL)
131 GNUNET_TRANSPORT_TESTING_stop_peer (p2); 182 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2);
183
184 GNUNET_TRANSPORT_TESTING_done (tth);
132 185
133 ok = GNUNET_SYSERR; 186 ok = GNUNET_SYSERR;
134} 187}
@@ -141,10 +194,18 @@ notify_receive (void *cls, const struct GNUNET_PeerIdentity *peer,
141 uint32_t ats_count) 194 uint32_t ats_count)
142{ 195{
143 struct PeerContext * p = cls; 196 struct PeerContext * p = cls;
197 struct PeerContext *t = NULL;
198
199 if (0 == memcmp (peer, &p1->id, sizeof (struct GNUNET_PeerIdentity)))
200 t = p1;
201 if (0 == memcmp (peer, &p2->id, sizeof (struct GNUNET_PeerIdentity)))
202 t = p2;
203
204 char * ps = strdup (GNUNET_i2s(&p->id));
144 205
145 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 206 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
146 "Received message of type %d from peer %u (`%4s')!\n", 207 "Peer %u (`%4s') received message of type %d and size %u size from peer %u (`%4s')!\n",
147 ntohs (message->type), p->no, GNUNET_i2s (peer)); 208 p->no, ps, ntohs (message->type), ntohs (message->size), t->no, GNUNET_i2s (&t->id));
148 209
149 if ((MTYPE == ntohs (message->type)) && 210 if ((MTYPE == ntohs (message->type)) &&
150 (sizeof (struct GNUNET_MessageHeader) == ntohs (message->size))) 211 (sizeof (struct GNUNET_MessageHeader) == ntohs (message->size)))
@@ -180,9 +241,6 @@ notify_ready (void *cls, size_t size, void *buf)
180 return 0; 241 return 0;
181 } 242 }
182 243
183 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
184 "Transmitting message with %u bytes to peer %u (%4s)\n",
185 sizeof (struct GNUNET_MessageHeader), p->no, GNUNET_i2s (&p->id));
186 GNUNET_assert (size >= 256); 244 GNUNET_assert (size >= 256);
187 245
188 if (buf != NULL) 246 if (buf != NULL)
@@ -191,11 +249,17 @@ notify_ready (void *cls, size_t size, void *buf)
191 hdr->size = htons (sizeof (struct GNUNET_MessageHeader)); 249 hdr->size = htons (sizeof (struct GNUNET_MessageHeader));
192 hdr->type = htons (MTYPE); 250 hdr->type = htons (MTYPE);
193 } 251 }
252 char * ps = strdup (GNUNET_i2s(&p2->id));
253 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
254 "Peer %u (`%4s') sending message with type %u and size %u bytes to peer %u (`%4s')\n",
255 p2->no,
256 ps,
257 ntohs (hdr->type),
258 ntohs (hdr->size), p->no, GNUNET_i2s (&p->id));
259 GNUNET_free (ps);
194 return sizeof (struct GNUNET_MessageHeader); 260 return sizeof (struct GNUNET_MessageHeader);
195} 261}
196 262
197struct PeerContext * sender;
198struct PeerContext * receiver;
199 263
200static void 264static void
201sendtask (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) 265sendtask (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
@@ -204,16 +268,16 @@ sendtask (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
204 268
205 if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0) 269 if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
206 return; 270 return;
207 char * receiver_s = strdup(GNUNET_i2s (&receiver->id)); 271 char * receiver_s = strdup(GNUNET_i2s (&p1->id));
208 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 272 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
209 "Sending message from peer %u (`%4s') -> peer %u (`%s') !\n", 273 "Sending message from peer %u (`%4s') -> peer %u (`%s') !\n",
210 sender->no, 274 p2->no,
211 GNUNET_i2s (&sender->id), receiver->no, receiver_s); 275 GNUNET_i2s (&p2->id), p1->no, receiver_s);
212 GNUNET_free (receiver_s); 276 GNUNET_free (receiver_s);
213 277
214 th = GNUNET_TRANSPORT_notify_transmit_ready (sender->th, &receiver->id, 256, 0, 278 th = GNUNET_TRANSPORT_notify_transmit_ready (p2->th, &p1->id, 256, 0,
215 TIMEOUT_TRANSMIT, &notify_ready, 279 TIMEOUT_TRANSMIT, &notify_ready,
216 receiver); 280 p1);
217} 281}
218 282
219 283
@@ -225,10 +289,18 @@ notify_connect (void *cls, const struct GNUNET_PeerIdentity *peer,
225 static int c; 289 static int c;
226 c++; 290 c++;
227 struct PeerContext *p = cls; 291 struct PeerContext *p = cls;
228 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u (`%4s') connected to us!\n", 292 struct PeerContext *t = NULL;
229 p->no, GNUNET_i2s (peer)); 293
230 if (c == 2) 294 if (0 == memcmp (peer, &p1->id, sizeof (struct GNUNET_PeerIdentity)))
231 send_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &sendtask, NULL); 295 t = p1;
296 if (0 == memcmp (peer, &p2->id, sizeof (struct GNUNET_PeerIdentity)))
297 t = p2;
298
299 char * ps = strdup (GNUNET_i2s(&p->id));
300 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u (`%4s'): peer %u (`%s') connected to me!\n",
301 p->no, ps,
302 t->no, GNUNET_i2s (peer));
303 GNUNET_free (ps);
232} 304}
233 305
234 306
@@ -236,14 +308,15 @@ static void
236notify_disconnect (void *cls, const struct GNUNET_PeerIdentity *peer) 308notify_disconnect (void *cls, const struct GNUNET_PeerIdentity *peer)
237{ 309{
238 struct PeerContext *p = cls; 310 struct PeerContext *p = cls;
239 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u (`%4s') disconnected!\n", 311 char * ps = strdup (GNUNET_i2s(&p->id));
240 p->no, GNUNET_i2s (peer)); 312 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u (`%4s'): peer (`%s') disconnected from me!\n",
313 p->no, ps, GNUNET_i2s (peer));
314
241 if (th != NULL) 315 if (th != NULL)
242 GNUNET_TRANSPORT_notify_transmit_ready_cancel (th); 316 GNUNET_TRANSPORT_notify_transmit_ready_cancel (th);
243 th = NULL; 317 th = NULL;
244} 318}
245 319
246
247static void 320static void
248testing_connect_cb (struct PeerContext *p1, struct PeerContext *p2, void *cls) 321testing_connect_cb (struct PeerContext *p1, struct PeerContext *p2, void *cls)
249{ 322{
@@ -254,6 +327,33 @@ testing_connect_cb (struct PeerContext *p1, struct PeerContext *p2, void *cls)
254 p1->no, p1_c, 327 p1->no, p1_c,
255 p2->no, GNUNET_i2s (&p2->id)); 328 p2->no, GNUNET_i2s (&p2->id));
256 GNUNET_free (p1_c); 329 GNUNET_free (p1_c);
330
331 send_task = GNUNET_SCHEDULER_add_now (&sendtask, NULL);
332}
333
334
335
336void start_cb (struct PeerContext * p,
337 void *cls)
338{
339 static int started;
340 started++;
341
342 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u (`%s') started\n",
343 p->no,
344 GNUNET_i2s (&p->id));
345
346 if (started != 2)
347 return;
348
349 char *sender_c = strdup (GNUNET_i2s (&p1->id));
350 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Test tries to connect peer %u (`%s') -> peer %u (`%s')\n",
351 p1->no, sender_c,
352 p2->no, GNUNET_i2s (&p2->id));
353
354 cc = GNUNET_TRANSPORT_TESTING_connect_peers (tth, p1, p2, &testing_connect_cb,
355 NULL);
356
257} 357}
258 358
259static void 359static void
@@ -262,14 +362,20 @@ run (void *cls, char *const *args, const char *cfgfile,
262{ 362{
263 die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL); 363 die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL);
264 364
265 p1 = GNUNET_TRANSPORT_TESTING_start_peer (cfg_file_p1, &notify_receive, 365 p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth, cfg_file_p1, 1,
266 &notify_connect, &notify_disconnect, 366 &notify_receive,
367 &notify_connect,
368 &notify_disconnect,
369 &start_cb,
370 NULL);
371
372 p2 = GNUNET_TRANSPORT_TESTING_start_peer (tth, cfg_file_p2, 2,
373 &notify_receive,
374 &notify_connect,
375 &notify_disconnect,
376 &start_cb,
267 NULL); 377 NULL);
268 p1->no = 1; 378
269 p2 = GNUNET_TRANSPORT_TESTING_start_peer (cfg_file_p2, &notify_receive,
270 &notify_connect, &notify_disconnect,
271 NULL);
272 p2->no = 2;
273 if ((p1 == NULL) || (p2 == NULL)) 379 if ((p1 == NULL) || (p2 == NULL))
274 { 380 {
275 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Fail! Could not start peers!\n"); 381 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Fail! Could not start peers!\n");
@@ -278,25 +384,6 @@ run (void *cls, char *const *args, const char *cfgfile,
278 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); 384 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
279 return; 385 return;
280 } 386 }
281
282 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u: `%s' using configuration file `%s'\n",
283 p1->no,
284 GNUNET_i2s (&p1->id), cfg_file_p1);
285 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u: `%s' using configuration file `%s'\n",
286 p2->no,
287 GNUNET_i2s (&p2->id), cfg_file_p2);
288
289 sender = p2;
290 receiver = p1;
291
292 char *sender_c = strdup (GNUNET_i2s (&sender->id));
293 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Test triest to send from %u (%s) -> peer %u (%s)\n",
294 sender->no, sender_c,
295 receiver->no, GNUNET_i2s (&receiver->id));
296
297
298 cc = GNUNET_TRANSPORT_TESTING_connect_peers (p1, p2, &testing_connect_cb,
299 NULL);
300} 387}
301 388
302 389
@@ -333,6 +420,8 @@ main (int argc, char *argv[])
333 int ret; 420 int ret;
334 int nat_res; 421 int nat_res;
335 422
423 tth = GNUNET_TRANSPORT_TESTING_init ();
424
336 GNUNET_TRANSPORT_TESTING_get_test_source_name (__FILE__, &test_source); 425 GNUNET_TRANSPORT_TESTING_get_test_source_name (__FILE__, &test_source);
337 GNUNET_TRANSPORT_TESTING_get_test_plugin_name (argv[0], test_source, 426 GNUNET_TRANSPORT_TESTING_get_test_plugin_name (argv[0], test_source,
338 &test_plugin); 427 &test_plugin);
@@ -376,6 +465,7 @@ main (int argc, char *argv[])
376 GNUNET_free (test_plugin); 465 GNUNET_free (test_plugin);
377 GNUNET_free (test_name); 466 GNUNET_free (test_name);
378 467
468 GNUNET_TRANSPORT_TESTING_done (tth);
379 469
380 return ret; 470 return ret;
381} 471}
diff --git a/src/transport/test_transport_api_http_peer1.conf b/src/transport/test_transport_api_http_peer1.conf
index c322c36c1..91d0afe02 100644
--- a/src/transport/test_transport_api_http_peer1.conf
+++ b/src/transport/test_transport_api_http_peer1.conf
@@ -8,7 +8,7 @@ DISABLEV6 = NO
8 8
9[transport-http] 9[transport-http]
10PORT = 12080 10PORT = 12080
11USE_IPv6 = YES 11#USE_IPv6 = NO
12USE_IPv4 = YES 12USE_IPv4 = YES
13DISABLEV6 = NO 13DISABLEV6 = NO
14#BINDTO = 127.0.0.1 14#BINDTO = 127.0.0.1
diff --git a/src/transport/test_transport_api_limited_sockets.c b/src/transport/test_transport_api_limited_sockets.c
index 66816671c..7ceed03aa 100644
--- a/src/transport/test_transport_api_limited_sockets.c
+++ b/src/transport/test_transport_api_limited_sockets.c
@@ -77,6 +77,8 @@ static GNUNET_TRANSPORT_TESTING_ConnectRequest cc;
77 77
78struct GNUNET_TRANSPORT_TransmitHandle *th; 78struct GNUNET_TRANSPORT_TransmitHandle *th;
79 79
80struct TransportTestingHandle * tth;
81
80char *cfg_file_p1; 82char *cfg_file_p1;
81 83
82char *cfg_file_p2; 84char *cfg_file_p2;
@@ -103,8 +105,8 @@ end ()
103 GNUNET_TRANSPORT_notify_transmit_ready_cancel (th); 105 GNUNET_TRANSPORT_notify_transmit_ready_cancel (th);
104 th = NULL; 106 th = NULL;
105 107
106 GNUNET_TRANSPORT_TESTING_stop_peer (p1); 108 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1);
107 GNUNET_TRANSPORT_TESTING_stop_peer (p2); 109 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2);
108} 110}
109 111
110static void 112static void
@@ -118,16 +120,16 @@ end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
118 GNUNET_SCHEDULER_cancel (send_task); 120 GNUNET_SCHEDULER_cancel (send_task);
119 121
120 if (cc != NULL) 122 if (cc != NULL)
121 GNUNET_TRANSPORT_TESTING_connect_peers_cancel (cc); 123 GNUNET_TRANSPORT_TESTING_connect_peers_cancel (tth, cc);
122 124
123 if (th != NULL) 125 if (th != NULL)
124 GNUNET_TRANSPORT_notify_transmit_ready_cancel (th); 126 GNUNET_TRANSPORT_notify_transmit_ready_cancel (th);
125 th = NULL; 127 th = NULL;
126 128
127 if (p1 != NULL) 129 if (p1 != NULL)
128 GNUNET_TRANSPORT_TESTING_stop_peer (p1); 130 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1);
129 if (p2 != NULL) 131 if (p2 != NULL)
130 GNUNET_TRANSPORT_TESTING_stop_peer (p2); 132 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2);
131 133
132 ok = GNUNET_SYSERR; 134 ok = GNUNET_SYSERR;
133} 135}
@@ -228,19 +230,42 @@ testing_connect_cb (struct PeerContext *p1, struct PeerContext *p2, void *cls)
228 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &sendtask, NULL); 230 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &sendtask, NULL);
229} 231}
230 232
233void start_cb (struct PeerContext * p,
234 void *cls)
235{
236 static int started;
237 started++;
238
239 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u (`%s') started\n",
240 p->no,
241 GNUNET_i2s (&p->id));
242
243 if (started != 2)
244 return;
245
246 cc = GNUNET_TRANSPORT_TESTING_connect_peers (tth, p1, p2, &testing_connect_cb,
247 NULL);
248
249}
250
231static void 251static void
232run (void *cls, char *const *args, const char *cfgfile, 252run (void *cls, char *const *args, const char *cfgfile,
233 const struct GNUNET_CONFIGURATION_Handle *cfg) 253 const struct GNUNET_CONFIGURATION_Handle *cfg)
234{ 254{
235 die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL); 255 die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL);
236 256
237 p1 = GNUNET_TRANSPORT_TESTING_start_peer (cfg_file_p1, &notify_receive, 257 tth = GNUNET_TRANSPORT_TESTING_init ();
258
259 p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth, cfg_file_p1, 1,
260 &notify_receive,
238 &notify_connect, &notify_disconnect, 261 &notify_connect, &notify_disconnect,
262 &start_cb,
239 NULL); 263 NULL);
240 p2 = GNUNET_TRANSPORT_TESTING_start_peer (cfg_file_p2, &notify_receive, 264 p2 = GNUNET_TRANSPORT_TESTING_start_peer (tth, cfg_file_p2, 2,
265 &notify_receive,
241 &notify_connect, &notify_disconnect, 266 &notify_connect, &notify_disconnect,
267 &start_cb,
242 NULL); 268 NULL);
243
244 if ((p1 == NULL) || (p2 == NULL)) 269 if ((p1 == NULL) || (p2 == NULL))
245 { 270 {
246 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Fail! Could not start peers!\n"); 271 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Fail! Could not start peers!\n");
@@ -249,9 +274,6 @@ run (void *cls, char *const *args, const char *cfgfile,
249 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); 274 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
250 return; 275 return;
251 } 276 }
252
253 cc = GNUNET_TRANSPORT_TESTING_connect_peers (p1, p2, &testing_connect_cb,
254 NULL);
255} 277}
256 278
257 279
diff --git a/src/transport/test_transport_api_reliability.c b/src/transport/test_transport_api_reliability.c
index e028c93fd..0719a9e47 100644
--- a/src/transport/test_transport_api_reliability.c
+++ b/src/transport/test_transport_api_reliability.c
@@ -79,6 +79,8 @@ char *cfg_file_p1;
79 79
80char *cfg_file_p2; 80char *cfg_file_p2;
81 81
82struct TransportTestingHandle * tth;
83
82/* 84/*
83 * Testcase specific declarations 85 * Testcase specific declarations
84 */ 86 */
@@ -145,8 +147,8 @@ end ()
145 GNUNET_TRANSPORT_notify_transmit_ready_cancel (th); 147 GNUNET_TRANSPORT_notify_transmit_ready_cancel (th);
146 th = NULL; 148 th = NULL;
147 149
148 GNUNET_TRANSPORT_TESTING_stop_peer (p1); 150 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1);
149 GNUNET_TRANSPORT_TESTING_stop_peer (p2); 151 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2);
150} 152}
151 153
152static void 154static void
@@ -165,9 +167,11 @@ end_badly ()
165 th = NULL; 167 th = NULL;
166 168
167 if (p1 != NULL) 169 if (p1 != NULL)
168 GNUNET_TRANSPORT_TESTING_stop_peer (p1); 170 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1);
169 if (p2 != NULL) 171 if (p2 != NULL)
170 GNUNET_TRANSPORT_TESTING_stop_peer (p2); 172 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2);
173
174 GNUNET_TRANSPORT_TESTING_done (tth);
171 175
172 ok = GNUNET_SYSERR; 176 ok = GNUNET_SYSERR;
173} 177}
@@ -255,8 +259,7 @@ notify_receive (void *cls, const struct GNUNET_PeerIdentity *peer,
255 if (n == TOTAL_MSGS) 259 if (n == TOTAL_MSGS)
256 { 260 {
257 ok = 0; 261 ok = 0;
258 fprintf (stderr, "\n"); 262 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "\nAll messages received\n");
259 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "All messages received\n");
260 end (); 263 end ();
261 } 264 }
262} 265}
@@ -399,35 +402,22 @@ testing_connect_cb (struct PeerContext *p1, struct PeerContext *p2, void *cls)
399 p2->no, GNUNET_i2s (&p2->id)); 402 p2->no, GNUNET_i2s (&p2->id));
400 GNUNET_free (p1_c); 403 GNUNET_free (p1_c);
401 404
402 // FIXME: THIS IS REQUIRED! SEEMS TO BE A BUG! 405 GNUNET_SCHEDULER_add_now (&sendtask, NULL);
403 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &sendtask, NULL);
404} 406}
405 407
406static void 408void start_cb (struct PeerContext * p,
407run (void *cls, char *const *args, const char *cfgfile, 409 void *cls)
408 const struct GNUNET_CONFIGURATION_Handle *cfg)
409{ 410{
410 die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL); 411 static int started;
412 started++;
411 413
412 p1 = GNUNET_TRANSPORT_TESTING_start_peer (cfg_file_p1, 414 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u (`%s') started\n",
413 &notify_receive, 415 p->no,
414 &notify_connect, &notify_disconnect, 416 GNUNET_i2s (&p->id));
415 NULL);
416 p1->no = 1;
417 p2 = GNUNET_TRANSPORT_TESTING_start_peer (cfg_file_p2,
418 &notify_receive,
419 &notify_connect, &notify_disconnect,
420 NULL);
421 p2->no = 2;
422 417
423 if ((p1 == NULL) || (p2 == NULL)) 418 if (started != 2)
424 {
425 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Fail! Could not start peers!\n");
426 if (die_task != GNUNET_SCHEDULER_NO_TASK)
427 GNUNET_SCHEDULER_cancel (die_task);
428 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
429 return; 419 return;
430 } 420
431 test_connected = GNUNET_NO; 421 test_connected = GNUNET_NO;
432 422
433 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u: `%s' using configuration file `%s'\n", 423 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u: `%s' using configuration file `%s'\n",
@@ -445,7 +435,36 @@ run (void *cls, char *const *args, const char *cfgfile,
445 sender->no, sender_c, 435 sender->no, sender_c,
446 receiver->no, GNUNET_i2s (&receiver->id)); 436 receiver->no, GNUNET_i2s (&receiver->id));
447 437
448 GNUNET_TRANSPORT_TESTING_connect_peers (p1, p2, &testing_connect_cb, NULL); 438 GNUNET_TRANSPORT_TESTING_connect_peers (tth, p1, p2, &testing_connect_cb, NULL);
439
440}
441
442
443static void
444run (void *cls, char *const *args, const char *cfgfile,
445 const struct GNUNET_CONFIGURATION_Handle *cfg)
446{
447 die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL);
448
449 p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth, cfg_file_p1, 1,
450 &notify_receive,
451 &notify_connect, &notify_disconnect,
452 &start_cb,
453 NULL);
454 p2 = GNUNET_TRANSPORT_TESTING_start_peer (tth, cfg_file_p2, 2,
455 &notify_receive,
456 &notify_connect, &notify_disconnect,
457 &start_cb,
458 NULL);
459
460 if ((p1 == NULL) || (p2 == NULL))
461 {
462 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Fail! Could not start peers!\n");
463 if (die_task != GNUNET_SCHEDULER_NO_TASK)
464 GNUNET_SCHEDULER_cancel (die_task);
465 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
466 return;
467 }
449} 468}
450 469
451static int 470static int
@@ -479,6 +498,8 @@ main (int argc, char *argv[])
479 int ret; 498 int ret;
480 int nat_res; 499 int nat_res;
481 500
501 tth = GNUNET_TRANSPORT_TESTING_init ();
502
482 GNUNET_TRANSPORT_TESTING_get_test_source_name (__FILE__, &test_source); 503 GNUNET_TRANSPORT_TESTING_get_test_source_name (__FILE__, &test_source);
483 GNUNET_TRANSPORT_TESTING_get_test_plugin_name (argv[0], test_source, 504 GNUNET_TRANSPORT_TESTING_get_test_plugin_name (argv[0], test_source,
484 &test_plugin); 505 &test_plugin);
diff --git a/src/transport/test_transport_api_reliability_tcp_peer1.conf b/src/transport/test_transport_api_reliability_tcp_peer1.conf
index 1c770dd4f..755ef1dd4 100644
--- a/src/transport/test_transport_api_reliability_tcp_peer1.conf
+++ b/src/transport/test_transport_api_reliability_tcp_peer1.conf
@@ -28,4 +28,3 @@ UNIXPATH = /tmp/gnunet-p1-service-peerinfo.sock
28PORT = 12001 28PORT = 12001
29UNIXPATH = /tmp/gnunet-p1-service-transport.sock 29UNIXPATH = /tmp/gnunet-p1-service-transport.sock
30 30
31
diff --git a/src/transport/test_transport_api_reliability_tcp_peer2.conf b/src/transport/test_transport_api_reliability_tcp_peer2.conf
index f849dcaaa..e443b5a9a 100644
--- a/src/transport/test_transport_api_reliability_tcp_peer2.conf
+++ b/src/transport/test_transport_api_reliability_tcp_peer2.conf
@@ -27,4 +27,4 @@ UNIXPATH = /tmp/gnunet-p2-service-peerinfo.sock
27[transport] 27[transport]
28PORT = 12010 28PORT = 12010
29UNIXPATH = /tmp/gnunet-p2-service-transport.sock 29UNIXPATH = /tmp/gnunet-p2-service-transport.sock
30 30#DEBUG = YES
diff --git a/src/transport/test_transport_api_tcp_nat_peer2.conf b/src/transport/test_transport_api_tcp_nat_peer2.conf
index 1b5586c4f..9a068123e 100644
--- a/src/transport/test_transport_api_tcp_nat_peer2.conf
+++ b/src/transport/test_transport_api_tcp_nat_peer2.conf
@@ -31,5 +31,4 @@ UNIXPATH = /tmp/gnunet-p2-service-peerinfo.sock
31[transport] 31[transport]
32PORT = 45923 32PORT = 45923
33UNIXPATH = /tmp/gnunet-p2-service-transport.sock 33UNIXPATH = /tmp/gnunet-p2-service-transport.sock
34 34#DEBUG = YES
35
diff --git a/src/transport/test_transport_api_tcp_peer1.conf b/src/transport/test_transport_api_tcp_peer1.conf
index 1c770dd4f..7424f5e6f 100644
--- a/src/transport/test_transport_api_tcp_peer1.conf
+++ b/src/transport/test_transport_api_tcp_peer1.conf
@@ -27,5 +27,5 @@ UNIXPATH = /tmp/gnunet-p1-service-peerinfo.sock
27[transport] 27[transport]
28PORT = 12001 28PORT = 12001
29UNIXPATH = /tmp/gnunet-p1-service-transport.sock 29UNIXPATH = /tmp/gnunet-p1-service-transport.sock
30 30#DEBUG = YES
31 31
diff --git a/src/transport/test_transport_api_timeout.c b/src/transport/test_transport_api_timeout.c
index 84a8316bd..bb8ede313 100644
--- a/src/transport/test_transport_api_timeout.c
+++ b/src/transport/test_transport_api_timeout.c
@@ -65,6 +65,8 @@ static GNUNET_SCHEDULER_TaskIdentifier die_task;
65 65
66static GNUNET_SCHEDULER_TaskIdentifier timer_task; 66static GNUNET_SCHEDULER_TaskIdentifier timer_task;
67 67
68struct TransportTestingHandle * tth;
69
68struct PeerContext *p1; 70struct PeerContext *p1;
69 71
70struct PeerContext *p2; 72struct PeerContext *p2;
@@ -113,8 +115,8 @@ end ()
113 th = NULL; 115 th = NULL;
114 116
115 117
116 GNUNET_TRANSPORT_TESTING_stop_peer (p1); 118 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1);
117 GNUNET_TRANSPORT_TESTING_stop_peer (p2); 119 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2);
118 120
119 if (disconnects == 0) 121 if (disconnects == 0)
120 ok = 0; 122 ok = 0;
@@ -125,6 +127,8 @@ end ()
125 "Fail! Had %u disconnects while waiting %llu seconds \n", 127 "Fail! Had %u disconnects while waiting %llu seconds \n",
126 disconnects, WAIT.rel_value); 128 disconnects, WAIT.rel_value);
127 } 129 }
130
131 GNUNET_TRANSPORT_TESTING_done (tth);
128} 132}
129 133
130static void 134static void
@@ -139,21 +143,18 @@ end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
139 GNUNET_SCHEDULER_cancel (timer_task); 143 GNUNET_SCHEDULER_cancel (timer_task);
140 timer_task = GNUNET_SCHEDULER_NO_TASK; 144 timer_task = GNUNET_SCHEDULER_NO_TASK;
141 } 145 }
142 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "1\n");
143 if (cc != NULL) 146 if (cc != NULL)
144 GNUNET_TRANSPORT_TESTING_connect_peers_cancel (cc); 147 GNUNET_TRANSPORT_TESTING_connect_peers_cancel (tth, cc);
145 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "2\n");
146 if (th != NULL) 148 if (th != NULL)
147 GNUNET_TRANSPORT_notify_transmit_ready_cancel (th); 149 GNUNET_TRANSPORT_notify_transmit_ready_cancel (th);
148 th = NULL; 150 th = NULL;
149 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "3\n");
150 if (p1 != NULL) 151 if (p1 != NULL)
151 GNUNET_TRANSPORT_TESTING_stop_peer (p1); 152 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1);
152 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "4\n");
153 if (p2 != NULL) 153 if (p2 != NULL)
154 GNUNET_TRANSPORT_TESTING_stop_peer (p2); 154 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2);
155 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "5\n");
156 ok = GNUNET_SYSERR; 155 ok = GNUNET_SYSERR;
156
157 GNUNET_TRANSPORT_TESTING_done (tth);
157} 158}
158 159
159 160
@@ -236,10 +237,30 @@ testing_connect_cb (struct PeerContext *p1, struct PeerContext *p2, void *cls)
236 237
237 shutdown_flag = GNUNET_NO; 238 shutdown_flag = GNUNET_NO;
238 239
239 // FIXME: THIS IS REQUIRED! SEEMS TO BE A BUG! 240 timer_task = GNUNET_SCHEDULER_add_now (&timer, NULL);
240 timer_task = 241}
241 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_divide (WAIT, 10), 242
242 &timer, NULL); 243void start_cb (struct PeerContext * p,
244 void *cls)
245{
246 static int started;
247 started++;
248
249 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u (`%s') started\n",
250 p->no,
251 GNUNET_i2s (&p->id));
252
253 if (started != 2)
254 return;
255
256 char *sender_c = strdup (GNUNET_i2s (&p1->id));
257 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Test tries to connect peer %u (`%s') -> peer %u (`%s')\n",
258 p1->no, sender_c,
259 p2->no, GNUNET_i2s (&p2->id));
260
261 cc = GNUNET_TRANSPORT_TESTING_connect_peers (tth, p1, p2, &testing_connect_cb,
262 NULL);
263
243} 264}
244 265
245static void 266static void
@@ -248,11 +269,17 @@ run (void *cls, char *const *args, const char *cfgfile,
248{ 269{
249 die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL); 270 die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL);
250 271
251 p1 = GNUNET_TRANSPORT_TESTING_start_peer (cfg_file_p1, &notify_receive, 272 p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth, cfg_file_p1, 1,
252 &notify_connect, &notify_disconnect, 273 &notify_receive,
274 &notify_connect,
275 &notify_disconnect,
276 &start_cb,
253 NULL); 277 NULL);
254 p2 = GNUNET_TRANSPORT_TESTING_start_peer (cfg_file_p2, &notify_receive, 278 p2 = GNUNET_TRANSPORT_TESTING_start_peer (tth, cfg_file_p2, 2,
255 &notify_connect, &notify_disconnect, 279 &notify_receive,
280 &notify_connect,
281 &notify_disconnect,
282 &start_cb,
256 NULL); 283 NULL);
257 284
258 if ((p1 == NULL) || (p2 == NULL)) 285 if ((p1 == NULL) || (p2 == NULL))
@@ -263,15 +290,12 @@ run (void *cls, char *const *args, const char *cfgfile,
263 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); 290 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
264 return; 291 return;
265 } 292 }
266
267 cc = GNUNET_TRANSPORT_TESTING_connect_peers (p1, p2, &testing_connect_cb,
268 NULL);
269} 293}
270 294
271static int 295static int
272check () 296check ()
273{ 297{
274 static char *const argv[] = { "test-transport-api-multiaddress", 298 static char *const argv[] = { "test-transport-api-timeout",
275 "-c", 299 "-c",
276 "test_transport_api_data.conf", 300 "test_transport_api_data.conf",
277#if VERBOSE 301#if VERBOSE
@@ -290,7 +314,7 @@ check ()
290 314
291 ok = 1; 315 ok = 1;
292 GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, argv, 316 GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, argv,
293 "test-transport-api-multiaddress", "nohelp", options, 317 "test-transport-api-timeout", "nohelp", options,
294 &run, &ok); 318 &run, &ok);
295 319
296 return ok; 320 return ok;
@@ -302,6 +326,8 @@ main (int argc, char *argv[])
302 int ret; 326 int ret;
303 int nat_res; 327 int nat_res;
304 328
329 tth = GNUNET_TRANSPORT_TESTING_init ();
330
305 GNUNET_TRANSPORT_TESTING_get_test_source_name (__FILE__, &test_source); 331 GNUNET_TRANSPORT_TESTING_get_test_source_name (__FILE__, &test_source);
306 GNUNET_TRANSPORT_TESTING_get_test_plugin_name (argv[0], test_source, 332 GNUNET_TRANSPORT_TESTING_get_test_plugin_name (argv[0], test_source,
307 &test_plugin); 333 &test_plugin);
diff --git a/src/transport/test_transport_api_timeout_tcp_peer1.conf b/src/transport/test_transport_api_timeout_tcp_peer1.conf
index 974481fde..d724a6e8b 100644
--- a/src/transport/test_transport_api_timeout_tcp_peer1.conf
+++ b/src/transport/test_transport_api_timeout_tcp_peer1.conf
@@ -6,7 +6,6 @@ DEFAULTCONFIG = template_cfg_peer1.conf
6[transport-tcp] 6[transport-tcp]
7PORT = 12000 7PORT = 12000
8TIMEOUT = 5000 8TIMEOUT = 5000
9BINDTO = 127.0.0.1
10 9
11[arm] 10[arm]
12PORT = 12005 11PORT = 12005
@@ -28,6 +27,5 @@ UNIXPATH = /tmp/gnunet-p1-service-peerinfo.sock
28[transport] 27[transport]
29PORT = 12001 28PORT = 12001
30UNIXPATH = /tmp/gnunet-p1-service-transport.sock 29UNIXPATH = /tmp/gnunet-p1-service-transport.sock
31DEBUG = NO
32 30
33 31
diff --git a/src/transport/test_transport_api_timeout_tcp_peer2.conf b/src/transport/test_transport_api_timeout_tcp_peer2.conf
index 0d4869f77..87503f61c 100644
--- a/src/transport/test_transport_api_timeout_tcp_peer2.conf
+++ b/src/transport/test_transport_api_timeout_tcp_peer2.conf
@@ -7,9 +7,7 @@ DEFAULTCONFIG = template_cfg_peer2.conf
7ALLOW_NAT = NO 7ALLOW_NAT = NO
8 8
9[transport-tcp] 9[transport-tcp]
10PORT = 0 10PORT = 12100
11TIMEOUT = 5000
12BINDTO = 127.0.0.1
13 11
14[arm] 12[arm]
15PORT = 12014 13PORT = 12014
@@ -31,6 +29,5 @@ UNIXPATH = /tmp/gnunet-p2-service-peerinfo.sock
31[transport] 29[transport]
32PORT = 12010 30PORT = 12010
33UNIXPATH = /tmp/gnunet-p2-service-transport.sock 31UNIXPATH = /tmp/gnunet-p2-service-transport.sock
34DEBUG = NO
35 32
36 33
diff --git a/src/transport/test_transport_api_unreliability.c b/src/transport/test_transport_api_unreliability.c
index a8c8d14e9..20b05a50f 100644
--- a/src/transport/test_transport_api_unreliability.c
+++ b/src/transport/test_transport_api_unreliability.c
@@ -78,6 +78,8 @@ char *cfg_file_p2;
78uint32_t max_bps_p1; 78uint32_t max_bps_p1;
79uint32_t max_bps_p2; 79uint32_t max_bps_p2;
80 80
81struct TransportTestingHandle * tth;
82
81/* 83/*
82 * Testcase specific declarations 84 * Testcase specific declarations
83 */ 85 */
@@ -150,8 +152,10 @@ end ()
150 GNUNET_TRANSPORT_notify_transmit_ready_cancel (th); 152 GNUNET_TRANSPORT_notify_transmit_ready_cancel (th);
151 th = NULL; 153 th = NULL;
152 154
153 GNUNET_TRANSPORT_TESTING_stop_peer (p1); 155 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1);
154 GNUNET_TRANSPORT_TESTING_stop_peer (p2); 156 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2);
157
158 GNUNET_TRANSPORT_TESTING_done (tth);
155 159
156 ok = 0; 160 ok = 0;
157 161
@@ -190,9 +194,11 @@ end_badly ()
190 th = NULL; 194 th = NULL;
191 195
192 if (p1 != NULL) 196 if (p1 != NULL)
193 GNUNET_TRANSPORT_TESTING_stop_peer (p1); 197 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1);
194 if (p2 != NULL) 198 if (p2 != NULL)
195 GNUNET_TRANSPORT_TESTING_stop_peer (p2); 199 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2);
200
201 GNUNET_TRANSPORT_TESTING_done (tth);
196 202
197 ok = GNUNET_SYSERR; 203 ok = GNUNET_SYSERR;
198} 204}
@@ -456,19 +462,44 @@ testing_connect_cb (struct PeerContext *p1, struct PeerContext *p2, void *cls)
456 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &sendtask, NULL); 462 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &sendtask, NULL);
457} 463}
458 464
465void start_cb (struct PeerContext * p,
466 void *cls)
467{
468 static int started;
469 started++;
470
471 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u (`%s') started\n",
472 p->no,
473 GNUNET_i2s (&p->id));
474
475 if (started != 2)
476 return;
477
478 test_connected = GNUNET_NO;
479
480 test_connected = GNUNET_NO;
481 GNUNET_TRANSPORT_TESTING_connect_peers (tth, p1, p2, &testing_connect_cb, NULL);
482
483}
484
459static void 485static void
460run (void *cls, char *const *args, const char *cfgfile, 486run (void *cls, char *const *args, const char *cfgfile,
461 const struct GNUNET_CONFIGURATION_Handle *cfg) 487 const struct GNUNET_CONFIGURATION_Handle *cfg)
462{ 488{
463 die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL); 489 die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL);
464 490
465 p1 = GNUNET_TRANSPORT_TESTING_start_peer (cfg_file_p1, &notify_receive, 491 p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth, cfg_file_p1, 1,
492 &notify_receive,
466 &notify_connect, &notify_disconnect, 493 &notify_connect, &notify_disconnect,
494 &start_cb,
467 NULL); 495 NULL);
468 p2 = GNUNET_TRANSPORT_TESTING_start_peer (cfg_file_p2, &notify_receive, 496 p2 = GNUNET_TRANSPORT_TESTING_start_peer (tth, cfg_file_p2, 2,
497 &notify_receive,
469 &notify_connect, &notify_disconnect, 498 &notify_connect, &notify_disconnect,
499 &start_cb,
470 NULL); 500 NULL);
471 501
502
472 if ((p1 == NULL) || (p2 == NULL)) 503 if ((p1 == NULL) || (p2 == NULL))
473 { 504 {
474 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Fail! Could not start peers!\n"); 505 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Fail! Could not start peers!\n");
@@ -478,8 +509,7 @@ run (void *cls, char *const *args, const char *cfgfile,
478 return; 509 return;
479 } 510 }
480 511
481 test_connected = GNUNET_NO; 512
482 GNUNET_TRANSPORT_TESTING_connect_peers (p1, p2, &testing_connect_cb, NULL);
483} 513}
484 514
485static int 515static int
@@ -514,6 +544,8 @@ main (int argc, char *argv[])
514 int ret; 544 int ret;
515 int nat_res; 545 int nat_res;
516 546
547 tth = GNUNET_TRANSPORT_TESTING_init ();
548
517 GNUNET_TRANSPORT_TESTING_get_test_source_name (__FILE__, &test_source); 549 GNUNET_TRANSPORT_TESTING_get_test_source_name (__FILE__, &test_source);
518 GNUNET_TRANSPORT_TESTING_get_test_plugin_name (argv[0], test_source, 550 GNUNET_TRANSPORT_TESTING_get_test_plugin_name (argv[0], test_source,
519 &test_plugin); 551 &test_plugin);
@@ -557,6 +589,7 @@ main (int argc, char *argv[])
557 GNUNET_free (test_plugin); 589 GNUNET_free (test_plugin);
558 GNUNET_free (test_name); 590 GNUNET_free (test_name);
559 591
592
560 return ret; 593 return ret;
561} 594}
562 595
diff --git a/src/transport/test_transport_api_unreliability_constant.c b/src/transport/test_transport_api_unreliability_constant.c
index d7c70df83..670e34f7a 100644
--- a/src/transport/test_transport_api_unreliability_constant.c
+++ b/src/transport/test_transport_api_unreliability_constant.c
@@ -71,6 +71,8 @@ struct PeerContext *p2;
71 71
72struct GNUNET_TRANSPORT_TransmitHandle *th; 72struct GNUNET_TRANSPORT_TransmitHandle *th;
73 73
74struct TransportTestingHandle * tth;
75
74char *cfg_file_p1; 76char *cfg_file_p1;
75 77
76char *cfg_file_p2; 78char *cfg_file_p2;
@@ -149,8 +151,10 @@ end ()
149 GNUNET_TRANSPORT_notify_transmit_ready_cancel (th); 151 GNUNET_TRANSPORT_notify_transmit_ready_cancel (th);
150 th = NULL; 152 th = NULL;
151 153
152 GNUNET_TRANSPORT_TESTING_stop_peer (p1); 154 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1);
153 GNUNET_TRANSPORT_TESTING_stop_peer (p2); 155 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2);
156
157 GNUNET_TRANSPORT_TESTING_done (tth);
154 158
155 ok = 0; 159 ok = 0;
156 if (test_failed == GNUNET_NO) 160 if (test_failed == GNUNET_NO)
@@ -176,9 +180,11 @@ end_badly ()
176 th = NULL; 180 th = NULL;
177 181
178 if (p1 != NULL) 182 if (p1 != NULL)
179 GNUNET_TRANSPORT_TESTING_stop_peer (p1); 183 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1);
180 if (p2 != NULL) 184 if (p2 != NULL)
181 GNUNET_TRANSPORT_TESTING_stop_peer (p2); 185 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2);
186
187 GNUNET_TRANSPORT_TESTING_done (tth);
182 188
183 ok = GNUNET_SYSERR; 189 ok = GNUNET_SYSERR;
184} 190}
@@ -361,7 +367,7 @@ notify_connect (void *cls, const struct GNUNET_PeerIdentity *peer,
361 uint32_t ats_count) 367 uint32_t ats_count)
362{ 368{
363 369
364 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer `%4s' connected to us (%p)!\n", 370 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer `%4s' connected to us (GNUNET_TIME_UNIT_SECONDS%p)!\n",
365 GNUNET_i2s (peer), cls); 371 GNUNET_i2s (peer), cls);
366 372
367 if (cls == p1) 373 if (cls == p1)
@@ -409,8 +415,24 @@ testing_connect_cb (struct PeerContext *p1, struct PeerContext *p2, void *cls)
409 GNUNET_i2s (&p2->id)); 415 GNUNET_i2s (&p2->id));
410 GNUNET_free (p1_c); 416 GNUNET_free (p1_c);
411 417
412 // FIXME: THIS IS REQUIRED! SEEMS TO BE A BUG! 418 GNUNET_SCHEDULER_add_now (&sendtask, NULL);
413 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &sendtask, NULL); 419}
420
421void start_cb (struct PeerContext * p,
422 void *cls)
423{
424 static int started;
425 started++;
426
427 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u (`%s') started\n",
428 p->no,
429 GNUNET_i2s (&p->id));
430
431 if (started != 2)
432 return;
433
434 GNUNET_TRANSPORT_TESTING_connect_peers (tth, p1, p2, &testing_connect_cb, NULL);
435
414} 436}
415 437
416static void 438static void
@@ -419,11 +441,15 @@ run (void *cls, char *const *args, const char *cfgfile,
419{ 441{
420 die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL); 442 die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL);
421 443
422 p1 = GNUNET_TRANSPORT_TESTING_start_peer (cfg_file_p1, &notify_receive, 444 p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth, cfg_file_p1, 1,
445 &notify_receive,
423 &notify_connect, &notify_disconnect, 446 &notify_connect, &notify_disconnect,
447 &start_cb,
424 NULL); 448 NULL);
425 p2 = GNUNET_TRANSPORT_TESTING_start_peer (cfg_file_p2, &notify_receive, 449 p2 = GNUNET_TRANSPORT_TESTING_start_peer (tth, cfg_file_p2, 2,
450 &notify_receive,
426 &notify_connect, &notify_disconnect, 451 &notify_connect, &notify_disconnect,
452 &start_cb,
427 NULL); 453 NULL);
428 454
429 if ((p1 == NULL) || (p2 == NULL)) 455 if ((p1 == NULL) || (p2 == NULL))
@@ -434,8 +460,6 @@ run (void *cls, char *const *args, const char *cfgfile,
434 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); 460 die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
435 return; 461 return;
436 } 462 }
437
438 GNUNET_TRANSPORT_TESTING_connect_peers (p1, p2, &testing_connect_cb, NULL);
439} 463}
440 464
441static int 465static int
@@ -470,6 +494,8 @@ main (int argc, char *argv[])
470 int ret; 494 int ret;
471 int nat_res; 495 int nat_res;
472 496
497 tth = GNUNET_TRANSPORT_TESTING_init ();
498
473 GNUNET_TRANSPORT_TESTING_get_test_source_name (__FILE__, &test_source); 499 GNUNET_TRANSPORT_TESTING_get_test_source_name (__FILE__, &test_source);
474 GNUNET_TRANSPORT_TESTING_get_test_plugin_name (argv[0], test_source, 500 GNUNET_TRANSPORT_TESTING_get_test_plugin_name (argv[0], test_source,
475 &test_plugin); 501 &test_plugin);
diff --git a/src/transport/test_transport_startonly.c b/src/transport/test_transport_startonly.c
index 89ada4c01..730d7946c 100644
--- a/src/transport/test_transport_startonly.c
+++ b/src/transport/test_transport_startonly.c
@@ -54,6 +54,8 @@ GNUNET_SCHEDULER_TaskIdentifier timeout_task;
54 54
55static struct PeerContext *p1; 55static struct PeerContext *p1;
56 56
57struct TransportTestingHandle * tth;
58
57static int connected = GNUNET_NO; 59static int connected = GNUNET_NO;
58 60
59static int ret = 0; 61static int ret = 0;
@@ -83,7 +85,7 @@ end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
83 return; 85 return;
84 86
85 if (p1 != NULL) 87 if (p1 != NULL)
86 GNUNET_TRANSPORT_TESTING_stop_peer (p1); 88 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1);
87 89
88 ret = GNUNET_SYSERR; 90 ret = GNUNET_SYSERR;
89} 91}
@@ -119,6 +121,8 @@ static void
119run (void *cls, char *const *args, const char *cfgfile, 121run (void *cls, char *const *args, const char *cfgfile,
120 const struct GNUNET_CONFIGURATION_Handle *cfg) 122 const struct GNUNET_CONFIGURATION_Handle *cfg)
121{ 123{
124 tth = GNUNET_TRANSPORT_TESTING_init ();
125
122 timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL); 126 timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL);
123 127
124 i = 1; 128 i = 1;
@@ -126,9 +130,9 @@ run (void *cls, char *const *args, const char *cfgfile,
126 while (i <= ITERATIONS) 130 while (i <= ITERATIONS)
127 { 131 {
128 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Starting peer\n"); 132 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Starting peer\n");
129 p1 = GNUNET_TRANSPORT_TESTING_start_peer ("test_transport_startonly.conf", 133 p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth, "test_transport_startonly.conf", 1,
130 &notify_receive, &notify_connect, 134 &notify_receive, &notify_connect,
131 &notify_disconnect, p1); 135 &notify_disconnect, NULL, p1);
132 136
133 137
134 if (p1 != NULL) 138 if (p1 != NULL)
@@ -139,14 +143,15 @@ run (void *cls, char *const *args, const char *cfgfile,
139 GNUNET_assert (p1 != NULL); 143 GNUNET_assert (p1 != NULL);
140 GNUNET_assert (p1->th != NULL); 144 GNUNET_assert (p1->th != NULL);
141 145
142 //sleep (5); 146 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1);
143
144 GNUNET_TRANSPORT_TESTING_stop_peer (p1);
145 147
146 i++; 148 i++;
147 if (i <= ITERATIONS) 149 if (i <= ITERATIONS)
148 fprintf (stderr, "..%i", i); 150 fprintf (stderr, "..%i", i);
149 } 151 }
152
153 GNUNET_TRANSPORT_TESTING_init (tth);
154
150 fprintf (stderr, "\n"); 155 fprintf (stderr, "\n");
151 end (); 156 end ();
152} 157}
diff --git a/src/transport/test_transport_testing.c b/src/transport/test_transport_testing.c
index db9f528d6..066e56d5b 100644
--- a/src/transport/test_transport_testing.c
+++ b/src/transport/test_transport_testing.c
@@ -53,6 +53,10 @@ GNUNET_SCHEDULER_TaskIdentifier timeout_task;
53static struct PeerContext *p1; 53static struct PeerContext *p1;
54static struct PeerContext *p2; 54static struct PeerContext *p2;
55 55
56static GNUNET_TRANSPORT_TESTING_ConnectRequest cc;
57
58struct TransportTestingHandle * tth;
59
56static int connected = GNUNET_NO; 60static int connected = GNUNET_NO;
57 61
58static int ret = 0; 62static int ret = 0;
@@ -65,8 +69,10 @@ end ()
65 if (timeout_task != GNUNET_SCHEDULER_NO_TASK) 69 if (timeout_task != GNUNET_SCHEDULER_NO_TASK)
66 GNUNET_SCHEDULER_cancel (timeout_task); 70 GNUNET_SCHEDULER_cancel (timeout_task);
67 71
68 GNUNET_TRANSPORT_TESTING_stop_peer (p1); 72 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1);
69 GNUNET_TRANSPORT_TESTING_stop_peer (p2); 73 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2);
74
75 GNUNET_TRANSPORT_TESTING_done (tth);
70} 76}
71 77
72static void 78static void
@@ -75,8 +81,12 @@ end_badly ()
75 timeout_task = GNUNET_SCHEDULER_NO_TASK; 81 timeout_task = GNUNET_SCHEDULER_NO_TASK;
76 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Fail! Stopping peers\n"); 82 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Fail! Stopping peers\n");
77 83
78 GNUNET_TRANSPORT_TESTING_stop_peer (p1); 84 if (p1 != NULL)
79 GNUNET_TRANSPORT_TESTING_stop_peer (p2); 85 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1);
86 if (p2 != NULL)
87 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2);
88
89 GNUNET_TRANSPORT_TESTING_done (tth);
80 90
81 ret = GNUNET_SYSERR; 91 ret = GNUNET_SYSERR;
82} 92}
@@ -84,12 +94,12 @@ end_badly ()
84static void 94static void
85testing_connect_cb (struct PeerContext *p1, struct PeerContext *p2, void *cls) 95testing_connect_cb (struct PeerContext *p1, struct PeerContext *p2, void *cls)
86{ 96{
87 char *p1_c = strdup (GNUNET_i2s (&p1->id)); 97 char * ps = strdup (GNUNET_i2s(&p1->id));
88 98 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u (`%4s') connected to peer %u (`%s')!\n",
89 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Peers connected: %s <-> %s\n", p1_c, 99 p1->no, ps,
90 GNUNET_i2s (&p2->id)); 100 p2->no, GNUNET_i2s (&p2->id));
91 GNUNET_free (p1_c); 101 GNUNET_free (ps);
92 end (); 102 GNUNET_SCHEDULER_add_now (&end, NULL);
93} 103}
94 104
95static void 105static void
@@ -118,42 +128,68 @@ notify_receive (void *cls, const struct GNUNET_PeerIdentity *peer,
118 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Receiving\n"); 128 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Receiving\n");
119} 129}
120 130
131void start_cb (struct PeerContext * p,
132 void *cls)
133{
134 static int started;
135 started++;
136
137 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u (`%s') started\n",
138 p->no,
139 GNUNET_i2s (&p->id));
140
141 if (started != 2)
142 return;
143
144 char *sender_c = strdup (GNUNET_i2s (&p1->id));
145 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Test tries to connect peer %u (`%s') -> peer %u (`%s')\n",
146 p1->no, sender_c,
147 p2->no, GNUNET_i2s (&p2->id));
148
149 cc = GNUNET_TRANSPORT_TESTING_connect_peers (tth, p1, p2, &testing_connect_cb,
150 NULL);
151
152}
121 153
122static void 154static void
123run (void *cls, char *const *args, const char *cfgfile, 155run (void *cls, char *const *args, const char *cfgfile,
124 const struct GNUNET_CONFIGURATION_Handle *cfg) 156 const struct GNUNET_CONFIGURATION_Handle *cfg)
125{ 157{
158 tth = GNUNET_TRANSPORT_TESTING_init ();
159
126 timeout_task = 160 timeout_task =
127 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES, &end_badly, NULL); 161 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES, &end_badly, NULL);
128 162
129 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Starting peer\n"); 163 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Starting peer\n");
130 p1 = GNUNET_TRANSPORT_TESTING_start_peer ("test_transport_api_tcp_peer1.conf", 164 p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth, "test_transport_api_tcp_peer1.conf",
165 1,
131 &notify_receive, &notify_connect, 166 &notify_receive, &notify_connect,
132 &notify_disconnect, p1); 167 &notify_disconnect,
133 168 &start_cb,
134 p2 = GNUNET_TRANSPORT_TESTING_start_peer ("test_transport_api_tcp_peer2.conf", 169 p1);
170 p2 = GNUNET_TRANSPORT_TESTING_start_peer (tth, "test_transport_api_tcp_peer2.conf",
171 2,
135 &notify_receive, &notify_connect, 172 &notify_receive, &notify_connect,
136 &notify_disconnect, p2); 173 &notify_disconnect,
137 174 &start_cb,
138 if (p1 != NULL) 175 p2);
139 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer1 was successfully started\n"); 176
140 else 177 if (p1 == NULL)
141 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 178 {
142 "Peer1 was not started successfully\n"); 179 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer1 was not started successfully\n");
143 GNUNET_assert (p1 != NULL); 180 if (timeout_task != GNUNET_SCHEDULER_NO_TASK)
144 GNUNET_assert (p1->th != NULL); 181 GNUNET_SCHEDULER_cancel(timeout_task);
145 182 timeout_task =
146 if (p2 != NULL) 183 GNUNET_SCHEDULER_add_now (&end_badly, NULL);
147 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer2 was successfully started\n"); 184 }
148 else 185 if (p2 == NULL)
149 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 186 {
150 "Peer2 was not started successfully\n"); 187 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer2 was not started successfully\n");
151 GNUNET_assert (p2 != NULL); 188 if (timeout_task != GNUNET_SCHEDULER_NO_TASK)
152 GNUNET_assert (p2->th != NULL); 189 GNUNET_SCHEDULER_cancel(timeout_task);
153 190 timeout_task =
154 191 GNUNET_SCHEDULER_add_now (&end_badly, NULL);
155 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Connecting peers\n"); 192 }
156 GNUNET_TRANSPORT_TESTING_connect_peers (p1, p2, &testing_connect_cb, NULL);
157} 193}
158 194
159int 195int
diff --git a/src/transport/transport-testing.c b/src/transport/transport-testing.c
index 08bcd5c4e..036fff9e4 100644
--- a/src/transport/transport-testing.c
+++ b/src/transport/transport-testing.c
@@ -27,67 +27,58 @@
27 27
28#include "transport-testing.h" 28#include "transport-testing.h"
29 29
30struct ConnectingContext 30#define VERBOSE GNUNET_EXTRA_LOGGING
31{
32 struct PeerContext *p1;
33 struct PeerContext *p2;
34 GNUNET_SCHEDULER_TaskIdentifier tct;
35 GNUNET_TRANSPORT_TESTING_connect_cb cb;
36 void *cb_cls;
37 struct GNUNET_TRANSPORT_Handle *th_p1;
38 struct GNUNET_TRANSPORT_Handle *th_p2;
39 int p1_c;
40 int p2_c;
41};
42 31
43static void 32struct PeerContext *
44exchange_hello_last (void *cb_cls, const struct GNUNET_MessageHeader *message); 33find_peer_context_by_pc ( struct TransportTestingHandle *tth,
45static void 34 struct PeerContext *p)
46exchange_hello (void *cb_cls, const struct GNUNET_MessageHeader *message);
47
48static void
49notify_connect_internal (void *cls, const struct GNUNET_PeerIdentity *peer,
50 const struct GNUNET_TRANSPORT_ATS_Information *ats,
51 uint32_t ats_count)
52{ 35{
53 struct ConnectingContext *cc = cls; 36 struct PeerContext * t = tth->p_head;
54
55 GNUNET_assert (cc != NULL);
56 37
57 if (0 == 38 while (t != NULL)
58 memcmp (&(*peer).hashPubKey, &cc->p1->id.hashPubKey,
59 sizeof (GNUNET_HashCode)))
60 {
61 if (cc->p1_c == GNUNET_NO)
62 cc->p1_c = GNUNET_YES;
63 }
64 if (0 ==
65 memcmp (&(*peer).hashPubKey, &cc->p2->id.hashPubKey,
66 sizeof (GNUNET_HashCode)))
67 { 39 {
68 if (cc->p2_c == GNUNET_NO) 40 if (p == t)
69 cc->p2_c = GNUNET_YES; 41 break;
42 t = t->next;
70 } 43 }
71 44
72 if ((cc->p2_c == GNUNET_YES) && (cc->p2_c == GNUNET_YES)) 45 return t;
73 { 46}
74 /* clean up */
75 GNUNET_TRANSPORT_get_hello_cancel (cc->p1->ghh);
76 GNUNET_TRANSPORT_get_hello_cancel (cc->p2->ghh);
77 47
78 if (cc->tct != GNUNET_SCHEDULER_NO_TASK)
79 GNUNET_SCHEDULER_cancel (cc->tct);
80 48
81 cc->tct = GNUNET_SCHEDULER_NO_TASK; 49struct PeerContext *
50find_peer_context ( struct TransportTestingHandle *tth,
51 const struct GNUNET_PeerIdentity *peer)
52{
53 struct PeerContext * t = tth->p_head;
54
55 while (t != NULL)
56 {
57 if (0 == memcmp (&t->id, peer, sizeof (struct GNUNET_PeerIdentity)))
58 break;
59 t = t->next;
60 }
82 61
83 GNUNET_TRANSPORT_disconnect (cc->th_p1); 62 return t;
84 GNUNET_TRANSPORT_disconnect (cc->th_p2); 63}
85 64
86 if (cc->cb != NULL) 65struct ConnectingContext *
87 cc->cb (cc->p1, cc->p2, cc->cb_cls); 66find_connecting_context ( struct TransportTestingHandle *tth,
67 struct PeerContext *p1,
68 struct PeerContext * p2)
69{
70 struct ConnectingContext * cc = tth->cc_head;
88 71
89 GNUNET_free (cc); 72 while (cc != NULL)
73 {
74 if ((cc->p1 == p1) && (cc->p2 == p2))
75 break;
76 if ((cc->p1 == p2) && (cc->p2 == p1))
77 break;
78 cc = cc->next;
90 } 79 }
80
81 return cc;
91} 82}
92 83
93static void 84static void
@@ -96,17 +87,63 @@ notify_connect (void *cls, const struct GNUNET_PeerIdentity *peer,
96 uint32_t ats_count) 87 uint32_t ats_count)
97{ 88{
98 struct PeerContext *p = cls; 89 struct PeerContext *p = cls;
90 /* Find PeerContext */
91 struct PeerContext * p2 = find_peer_context (p->tth, peer);
99 92
100 if (p == NULL) 93 if (p == NULL)
101 return; 94 return;
102 if (p->nc != NULL) 95 if (p->nc != NULL)
103 p->nc (p->cb_cls, peer, ats, ats_count); 96 p->nc (p->cb_cls, peer, ats, ats_count);
97
98#if VERBOSE
99 char * p2_s;
100 if (p2 != NULL)
101 GNUNET_asprintf(&p2_s, "%u (`%s')", p2->no, GNUNET_i2s (&p2->id));
102 else
103 GNUNET_asprintf(&p2_s, "`%s'", GNUNET_i2s (peer));
104 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-testing",
105 "Peers %s connected to peer %u (`%s')\n",
106 p2_s,
107 p->no, GNUNET_i2s (&p->id));
108 GNUNET_free (p2_s);
109#endif
110
111
112 /* Find ConnectingContext */
113 struct ConnectingContext * cc = find_connecting_context(p->tth, p, p2);
114 if (cc == NULL)
115 return;
116
117 if (p == cc->p1)
118 cc->p1_c = GNUNET_YES;
119
120 if (p == cc->p2)
121 cc->p2_c = GNUNET_YES;
122
123 if ((cc->p1_c == GNUNET_YES) && (cc->p2_c == GNUNET_YES))
124 {
125 cc->cb (cc->p1, cc->p2, cc->cb_cls);
126 GNUNET_TRANSPORT_TESTING_connect_peers_cancel(p->tth, cc);
127 }
104} 128}
105 129
106static void 130static void
107notify_disconnect (void *cls, const struct GNUNET_PeerIdentity *peer) 131notify_disconnect (void *cls, const struct GNUNET_PeerIdentity *peer)
108{ 132{
109 struct PeerContext *p = cls; 133 struct PeerContext *p = cls;
134 /* Find PeerContext */
135 struct PeerContext * p2 = find_peer_context (p->tth, peer);
136
137 char * p2_s;
138 if (p2 != NULL)
139 GNUNET_asprintf(&p2_s, "%u (`%s')", p2->no, GNUNET_i2s (&p2->id));
140 else
141 GNUNET_asprintf(&p2_s, "`%s'", GNUNET_i2s (peer));
142 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-testing",
143 "Peers %s disconnected from peer %u (`%s')\n",
144 p2_s,
145 p->no, GNUNET_i2s (&p->id));
146 GNUNET_free (p2_s);
110 147
111 if (p == NULL) 148 if (p == NULL)
112 return; 149 return;
@@ -128,46 +165,38 @@ notify_receive (void *cls, const struct GNUNET_PeerIdentity *peer,
128 p->rec (p->cb_cls, peer, message, ats, ats_count); 165 p->rec (p->cb_cls, peer, message, ats, ats_count);
129} 166}
130 167
131
132static void 168static void
133exchange_hello_last (void *cb_cls, const struct GNUNET_MessageHeader *message) 169get_hello (void *cb_cls, const struct GNUNET_MessageHeader *message)
134{ 170{
135 struct ConnectingContext *cc = cb_cls; 171 struct PeerContext *p = cb_cls;
136 struct PeerContext *me = cc->p2;
137
138 //struct PeerContext *p1 = cc->p1;
139 172
140 GNUNET_assert (message != NULL); 173 GNUNET_assert (message != NULL);
141 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
142 "Exchanging HELLO of size %d with peer (%s)!\n",
143 (int) GNUNET_HELLO_size ((const struct GNUNET_HELLO_Message *)
144 message), GNUNET_i2s (&me->id));
145 GNUNET_assert (GNUNET_OK == 174 GNUNET_assert (GNUNET_OK ==
146 GNUNET_HELLO_get_id ((const struct GNUNET_HELLO_Message *) 175 GNUNET_HELLO_get_id ((const struct GNUNET_HELLO_Message *)
147 message, &me->id)); 176 message, &p->id));
148 GNUNET_TRANSPORT_offer_hello (cc->th_p1, message, NULL, NULL);
149}
150 177
178 if (p->hello != NULL)
179 GNUNET_free (p->hello);
151 180
152static void 181 size_t size = GNUNET_HELLO_size((const struct GNUNET_HELLO_Message *) message);
153exchange_hello (void *cb_cls, const struct GNUNET_MessageHeader *message) 182 p->hello = GNUNET_malloc (size);
154{ 183 memcpy (p->hello,
155 struct ConnectingContext *cc = cb_cls; 184 (const struct GNUNET_HELLO_Message *) message,
156 struct PeerContext *me = cc->p1; 185 size);
157
158 //struct PeerContext *p2 = cc->p2;
159 186
160 GNUNET_assert (message != NULL); 187 if (p->start_cb != NULL)
161 GNUNET_assert (GNUNET_OK == 188 {
162 GNUNET_HELLO_get_id ((const struct GNUNET_HELLO_Message *) 189#if VERBOSE
163 message, &me->id)); 190 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-testing",
164 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 191 "Peer %u (`%s') successfully started\n",
165 "Exchanging HELLO of size %d from peer %s!\n", 192 p->no, GNUNET_i2s (&p->id), size);
166 (int) GNUNET_HELLO_size ((const struct GNUNET_HELLO_Message *) 193#endif
167 message), GNUNET_i2s (&me->id)); 194 p->start_cb(p, p->cb_cls);
168 GNUNET_TRANSPORT_offer_hello (cc->th_p2, message, NULL, NULL); 195 p->start_cb = NULL;
196 }
169} 197}
170 198
199
171static void 200static void
172try_connect (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) 201try_connect (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
173{ 202{
@@ -179,10 +208,15 @@ try_connect (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
179 if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0) 208 if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
180 return; 209 return;
181 210
182 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Asking peers to connect...\n"); 211 char * p2_s = strdup(GNUNET_i2s (&p2->id));
183 /* FIXME: 'pX.id' may still be all-zeros here... */ 212 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-testing",
213 "Asking peers %u (`%s') to connect peer %u (`%s')\n",
214 p1->no, GNUNET_i2s (&p1->id), p2->no, p2_s);
215 GNUNET_free (p2_s);
216
217 GNUNET_TRANSPORT_offer_hello (cc->th_p1,
218 (const struct GNUNET_MessageHeader *) cc->p2->hello, NULL, NULL);
184 GNUNET_TRANSPORT_try_connect (cc->th_p1, &p2->id); 219 GNUNET_TRANSPORT_try_connect (cc->th_p1, &p2->id);
185 GNUNET_TRANSPORT_try_connect (cc->th_p2, &p1->id);
186 220
187 cc->tct = 221 cc->tct =
188 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &try_connect, cc); 222 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &try_connect, cc);
@@ -198,15 +232,19 @@ try_connect (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
198 * @return the peer context 232 * @return the peer context
199 */ 233 */
200struct PeerContext * 234struct PeerContext *
201GNUNET_TRANSPORT_TESTING_start_peer (const char *cfgname, 235GNUNET_TRANSPORT_TESTING_start_peer (struct TransportTestingHandle * tth,
236 const char *cfgname,
237 int peer_id,
202 GNUNET_TRANSPORT_ReceiveCallback rec, 238 GNUNET_TRANSPORT_ReceiveCallback rec,
203 GNUNET_TRANSPORT_NotifyConnect nc, 239 GNUNET_TRANSPORT_NotifyConnect nc,
204 GNUNET_TRANSPORT_NotifyDisconnect nd, 240 GNUNET_TRANSPORT_NotifyDisconnect nd,
241 GNUNET_TRANSPORT_TESTING_start_cb start_cb,
205 void *cb_cls) 242 void *cb_cls)
206{ 243{
207 if (GNUNET_DISK_file_test (cfgname) == GNUNET_NO) 244 if (GNUNET_DISK_file_test (cfgname) == GNUNET_NO)
208 { 245 {
209 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "File not found: `%s' \n", cfgname); 246 GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "transport-testing",
247 "File not found: `%s' \n", cfgname);
210 return NULL; 248 return NULL;
211 } 249 }
212 250
@@ -229,9 +267,13 @@ GNUNET_TRANSPORT_TESTING_start_peer (const char *cfgname,
229 "-L", "ERROR", 267 "-L", "ERROR",
230#endif 268#endif
231 NULL); 269 NULL);
270
271 p->no = peer_id;
272 p->tth = tth;
232 p->nc = nc; 273 p->nc = nc;
233 p->nd = nd; 274 p->nd = nd;
234 p->rec = rec; 275 p->rec = rec;
276 p->start_cb = start_cb;
235 if (cb_cls != NULL) 277 if (cb_cls != NULL)
236 p->cb_cls = cb_cls; 278 p->cb_cls = cb_cls;
237 else 279 else
@@ -241,6 +283,12 @@ GNUNET_TRANSPORT_TESTING_start_peer (const char *cfgname,
241 GNUNET_TRANSPORT_connect (p->cfg, NULL, p, &notify_receive, 283 GNUNET_TRANSPORT_connect (p->cfg, NULL, p, &notify_receive,
242 &notify_connect, &notify_disconnect); 284 &notify_connect, &notify_disconnect);
243 GNUNET_assert (p->th != NULL); 285 GNUNET_assert (p->th != NULL);
286
287 p->ghh = GNUNET_TRANSPORT_get_hello (p->th, &get_hello, p);
288 GNUNET_assert (p->ghh != NULL);
289
290 GNUNET_CONTAINER_DLL_insert(tth->p_head, tth->p_tail, p);
291
244 return p; 292 return p;
245} 293}
246 294
@@ -249,9 +297,15 @@ GNUNET_TRANSPORT_TESTING_start_peer (const char *cfgname,
249 * @param p the peer 297 * @param p the peer
250 */ 298 */
251void 299void
252GNUNET_TRANSPORT_TESTING_stop_peer (struct PeerContext *p) 300GNUNET_TRANSPORT_TESTING_stop_peer (struct TransportTestingHandle * tth,
301 struct PeerContext *p)
253{ 302{
254 GNUNET_assert (p != NULL); 303 GNUNET_assert (p != NULL);
304
305 if (p->ghh != NULL)
306 GNUNET_TRANSPORT_get_hello_cancel (p->ghh);
307 p->ghh = NULL;
308
255 if (p->th != NULL) 309 if (p->th != NULL)
256 GNUNET_TRANSPORT_disconnect (p->th); 310 GNUNET_TRANSPORT_disconnect (p->th);
257 311
@@ -263,22 +317,29 @@ GNUNET_TRANSPORT_TESTING_stop_peer (struct PeerContext *p)
263 GNUNET_OS_process_close (p->arm_proc); 317 GNUNET_OS_process_close (p->arm_proc);
264 p->arm_proc = NULL; 318 p->arm_proc = NULL;
265 } 319 }
320
266 if (p->servicehome != NULL) 321 if (p->servicehome != NULL)
267 { 322 {
268 GNUNET_DISK_directory_remove (p->servicehome); 323 GNUNET_DISK_directory_remove (p->servicehome);
269 GNUNET_free (p->servicehome); 324 GNUNET_free (p->servicehome);
270 } 325 }
271 326
327 if (p->hello != NULL)
328 GNUNET_free (p->hello);
329
272 if (p->cfg != NULL) 330 if (p->cfg != NULL)
273 GNUNET_CONFIGURATION_destroy (p->cfg); 331 GNUNET_CONFIGURATION_destroy (p->cfg);
332
333 GNUNET_CONTAINER_DLL_remove (tth->p_head, tth->p_tail, p);
334
274 GNUNET_free (p); 335 GNUNET_free (p);
275 p = NULL; 336 p = NULL;
276} 337}
277 338
278/** 339/**
279 * Connect the two given peers and call the callback when both peers report the 340 * Initiate peer p1 to connect to peer p2
280 * inbound connect. Remarks: start_peer's notify_connect callback can be called 341 * Get peer p2's HELLO and offer it to p1
281 * before. 342 * p1 then tries to connect to p2
282 * @param p1 peer 1 343 * @param p1 peer 1
283 * @param p2 peer 2 344 * @param p2 peer 2
284 * @param cb the callback to call 345 * @param cb the callback to call
@@ -286,10 +347,12 @@ GNUNET_TRANSPORT_TESTING_stop_peer (struct PeerContext *p)
286 * @return connect context 347 * @return connect context
287 */ 348 */
288GNUNET_TRANSPORT_TESTING_ConnectRequest 349GNUNET_TRANSPORT_TESTING_ConnectRequest
289GNUNET_TRANSPORT_TESTING_connect_peers (struct PeerContext *p1, 350GNUNET_TRANSPORT_TESTING_connect_peers (struct TransportTestingHandle * tth,
351 struct PeerContext *p1,
290 struct PeerContext *p2, 352 struct PeerContext *p2,
291 GNUNET_TRANSPORT_TESTING_connect_cb cb, 353 GNUNET_TRANSPORT_TESTING_connect_cb cb,
292 void *cb_cls) 354 void *cb_cls)
355
293{ 356{
294 struct ConnectingContext *cc = 357 struct ConnectingContext *cc =
295 GNUNET_malloc (sizeof (struct ConnectingContext)); 358 GNUNET_malloc (sizeof (struct ConnectingContext));
@@ -303,22 +366,23 @@ GNUNET_TRANSPORT_TESTING_connect_peers (struct PeerContext *p1,
303 cc->cb = cb; 366 cc->cb = cb;
304 cc->cb_cls = cb_cls; 367 cc->cb_cls = cb_cls;
305 368
306 cc->th_p1 = 369 cc->th_p1 = p1->th;
307 GNUNET_TRANSPORT_connect (cc->p1->cfg, NULL, cc, NULL, 370 /* GNUNET_TRANSPORT_connect (cc->p1->cfg, NULL, cc, NULL,
308 &notify_connect_internal, NULL); 371 &notify_connect_internal, NULL);*/
309 372
310 cc->th_p2 = 373 cc->th_p2 = p2->th;
311 GNUNET_TRANSPORT_connect (cc->p2->cfg, NULL, cc, NULL, 374 /* GNUNET_TRANSPORT_connect (cc->p2->cfg, NULL, cc, NULL,
312 &notify_connect_internal, NULL); 375 &notify_connect_internal, NULL);*/
313 376
314 GNUNET_assert (cc->th_p1 != NULL); 377 GNUNET_assert (cc->th_p1 != NULL);
315 GNUNET_assert (cc->th_p2 != NULL); 378 GNUNET_assert (cc->th_p2 != NULL);
316 379
317 p1->ghh = GNUNET_TRANSPORT_get_hello (cc->th_p1, &exchange_hello, cc); 380 GNUNET_CONTAINER_DLL_insert (tth->cc_head, tth->cc_tail, cc);
318 p2->ghh = GNUNET_TRANSPORT_get_hello (cc->th_p2, &exchange_hello_last, cc);
319 381
320 cc->tct = GNUNET_SCHEDULER_add_now (&try_connect, cc); 382 cc->tct = GNUNET_SCHEDULER_add_now (&try_connect, cc);
321 return cc; 383 return cc;
384
385
322} 386}
323 387
324/** 388/**
@@ -327,25 +391,57 @@ GNUNET_TRANSPORT_TESTING_connect_peers (struct PeerContext *p1,
327 * @param cc a connect request handle 391 * @param cc a connect request handle
328 */ 392 */
329void GNUNET_TRANSPORT_TESTING_connect_peers_cancel 393void GNUNET_TRANSPORT_TESTING_connect_peers_cancel
330 (GNUNET_TRANSPORT_TESTING_ConnectRequest ccr) 394 (struct TransportTestingHandle * tth,
395 GNUNET_TRANSPORT_TESTING_ConnectRequest ccr)
331{ 396{
332 struct ConnectingContext *cc = ccr; 397 struct ConnectingContext *cc = ccr;
333 398
334 /* clean up */
335 GNUNET_TRANSPORT_get_hello_cancel (cc->p1->ghh);
336 GNUNET_TRANSPORT_get_hello_cancel (cc->p2->ghh);
337
338 if (cc->tct != GNUNET_SCHEDULER_NO_TASK) 399 if (cc->tct != GNUNET_SCHEDULER_NO_TASK)
339 GNUNET_SCHEDULER_cancel (cc->tct); 400 GNUNET_SCHEDULER_cancel (cc->tct);
340 401
341 cc->tct = GNUNET_SCHEDULER_NO_TASK; 402 cc->tct = GNUNET_SCHEDULER_NO_TASK;
342 403
343 GNUNET_TRANSPORT_disconnect (cc->th_p1); 404 GNUNET_CONTAINER_DLL_remove (tth->cc_head, tth->cc_tail, cc);
344 GNUNET_TRANSPORT_disconnect (cc->th_p2);
345 405
346 GNUNET_free (cc); 406 GNUNET_free (cc);
347} 407}
348 408
409void
410GNUNET_TRANSPORT_TESTING_done (struct TransportTestingHandle * tth)
411{
412 struct ConnectingContext *cc = tth->cc_head;
413 struct ConnectingContext *ct = NULL;
414 struct PeerContext *p = tth->p_head;
415 struct PeerContext *t = NULL;
416 while (cc != NULL)
417 {
418 ct = cc->next;
419 GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "transport-testing",
420 "Developer forgot to cancel connect request!\n");
421 GNUNET_TRANSPORT_TESTING_connect_peers_cancel(tth, cc);
422 cc = ct;
423 }
424
425 while (p != NULL)
426 {
427 t = p->next;
428 GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "transport-testing",
429 "Developer forgot to stop peer!\n");
430 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p);
431 p = t;
432 }
433
434 GNUNET_free (tth);
435}
436
437struct TransportTestingHandle *
438GNUNET_TRANSPORT_TESTING_init ()
439{
440 struct TransportTestingHandle * tth = GNUNET_malloc (sizeof (struct TransportTestingHandle));
441
442 return tth;
443}
444
349 445
350/* 446/*
351 * Some utility functions 447 * Some utility functions
diff --git a/src/transport/transport-testing.h b/src/transport/transport-testing.h
index 75a568cf7..2aaff26b0 100644
--- a/src/transport/transport-testing.h
+++ b/src/transport/transport-testing.h
@@ -31,15 +31,45 @@
31#include "gnunet_hello_lib.h" 31#include "gnunet_hello_lib.h"
32#include "gnunet_os_lib.h" 32#include "gnunet_os_lib.h"
33#include "gnunet_program_lib.h" 33#include "gnunet_program_lib.h"
34#include "gnunet_container_lib.h"
34#include "gnunet_transport_service.h" 35#include "gnunet_transport_service.h"
35 36
36#define GNUNET_TRANSPORT_TESTING_ConnectRequest void * 37#define GNUNET_TRANSPORT_TESTING_ConnectRequest void *
37 38
39
40/**
41 * Context for a single peer
42 */
43struct PeerContext;
44
45/**
46 * Callback when two peers are connected and both have called the connect callback
47 * to notify clients about a new peer
48 */
49typedef void (*GNUNET_TRANSPORT_TESTING_start_cb) (struct PeerContext * p,
50 void *cls);
51
52/**
53 * Callback when two peers are connected and both have called the connect callback
54 * to notify clients about a new peer
55 */
56typedef void (*GNUNET_TRANSPORT_TESTING_connect_cb) (struct PeerContext * p1,
57 struct PeerContext * p2,
58 void *cls);
59
60
61struct TransportTestingHandle;
62
38/** 63/**
39 * Context for a single peer 64 * Context for a single peer
40 */ 65 */
41struct PeerContext 66struct PeerContext
42{ 67{
68 struct PeerContext * next;
69 struct PeerContext * prev;
70
71 struct TransportTestingHandle * tth;
72
43 struct GNUNET_CONFIGURATION_Handle *cfg; 73 struct GNUNET_CONFIGURATION_Handle *cfg;
44 74
45 struct GNUNET_TRANSPORT_Handle *th; 75 struct GNUNET_TRANSPORT_Handle *th;
@@ -56,6 +86,10 @@ struct PeerContext
56 86
57 GNUNET_TRANSPORT_NotifyDisconnect nd; 87 GNUNET_TRANSPORT_NotifyDisconnect nd;
58 88
89 GNUNET_TRANSPORT_TESTING_start_cb start_cb;
90
91 struct GNUNET_HELLO_Message *hello;
92
59 void *cb_cls; 93 void *cb_cls;
60 94
61 char *servicehome; 95 char *servicehome;
@@ -63,13 +97,31 @@ struct PeerContext
63 unsigned int no; 97 unsigned int no;
64}; 98};
65 99
66/** 100
67 * Callback when two peers are connected and both have called the connect callback 101struct ConnectingContext
68 * to notify clients about a new peer 102{
69 */ 103 struct ConnectingContext * next;
70typedef void (*GNUNET_TRANSPORT_TESTING_connect_cb) (struct PeerContext * p1, 104 struct ConnectingContext * prev;
71 struct PeerContext * p2, 105 struct PeerContext *p1;
72 void *cls); 106 struct PeerContext *p2;
107 GNUNET_SCHEDULER_TaskIdentifier tct;
108 GNUNET_TRANSPORT_TESTING_connect_cb cb;
109 void *cb_cls;
110 struct GNUNET_TRANSPORT_Handle *th_p1;
111 struct GNUNET_TRANSPORT_Handle *th_p2;
112 int p1_c;
113 int p2_c;
114};
115
116struct TransportTestingHandle
117{
118 struct ConnectingContext * cc_head;
119 struct ConnectingContext * cc_tail;
120
121 struct PeerContext * p_head;
122 struct PeerContext * p_tail;
123};
124
73 125
74 126
75/** 127/**
@@ -82,10 +134,13 @@ typedef void (*GNUNET_TRANSPORT_TESTING_connect_cb) (struct PeerContext * p1,
82 * @return the peer context 134 * @return the peer context
83 */ 135 */
84struct PeerContext * 136struct PeerContext *
85GNUNET_TRANSPORT_TESTING_start_peer (const char *cfgname, 137GNUNET_TRANSPORT_TESTING_start_peer (struct TransportTestingHandle * tth,
138 const char *cfgname,
139 int peer_id,
86 GNUNET_TRANSPORT_ReceiveCallback rec, 140 GNUNET_TRANSPORT_ReceiveCallback rec,
87 GNUNET_TRANSPORT_NotifyConnect nc, 141 GNUNET_TRANSPORT_NotifyConnect nc,
88 GNUNET_TRANSPORT_NotifyDisconnect nd, 142 GNUNET_TRANSPORT_NotifyDisconnect nd,
143 GNUNET_TRANSPORT_TESTING_start_cb start_cb,
89 void *cb_cls); 144 void *cb_cls);
90 145
91 146
@@ -95,7 +150,8 @@ GNUNET_TRANSPORT_TESTING_start_peer (const char *cfgname,
95 */ 150 */
96 151
97void 152void
98GNUNET_TRANSPORT_TESTING_stop_peer (struct PeerContext *pc); 153GNUNET_TRANSPORT_TESTING_stop_peer (struct TransportTestingHandle * tth,
154 struct PeerContext *pc);
99 155
100 156
101/** 157/**
@@ -109,7 +165,8 @@ GNUNET_TRANSPORT_TESTING_stop_peer (struct PeerContext *pc);
109 * @return a connect request handle 165 * @return a connect request handle
110 */ 166 */
111GNUNET_TRANSPORT_TESTING_ConnectRequest 167GNUNET_TRANSPORT_TESTING_ConnectRequest
112GNUNET_TRANSPORT_TESTING_connect_peers (struct PeerContext *p1, 168GNUNET_TRANSPORT_TESTING_connect_peers (struct TransportTestingHandle * tth,
169 struct PeerContext *p1,
113 struct PeerContext *p2, 170 struct PeerContext *p2,
114 GNUNET_TRANSPORT_TESTING_connect_cb cb, 171 GNUNET_TRANSPORT_TESTING_connect_cb cb,
115 void *cls); 172 void *cls);
@@ -120,7 +177,15 @@ GNUNET_TRANSPORT_TESTING_connect_peers (struct PeerContext *p1,
120 * @param cc a connect request handle 177 * @param cc a connect request handle
121 */ 178 */
122void 179void
123GNUNET_TRANSPORT_TESTING_connect_peers_cancel (void *cc); 180GNUNET_TRANSPORT_TESTING_connect_peers_cancel (struct TransportTestingHandle *,
181 void *cc);
182
183
184void
185GNUNET_TRANSPORT_TESTING_done (struct TransportTestingHandle * tth);
186
187struct TransportTestingHandle *
188GNUNET_TRANSPORT_TESTING_init ();
124 189
125/* 190/*
126 * Some utility functions 191 * Some utility functions