aboutsummaryrefslogtreecommitdiff
path: root/src/transport/test_transport_blacklisting.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/transport/test_transport_blacklisting.c')
-rw-r--r--src/transport/test_transport_blacklisting.c333
1 files changed, 172 insertions, 161 deletions
diff --git a/src/transport/test_transport_blacklisting.c b/src/transport/test_transport_blacklisting.c
index f0f5a2b63..d6961d8d0 100644
--- a/src/transport/test_transport_blacklisting.c
+++ b/src/transport/test_transport_blacklisting.c
@@ -50,7 +50,6 @@ struct GNUNET_TRANSPORT_TESTING_handle *tth;
50 50
51#define CONNECT_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10) 51#define CONNECT_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10)
52 52
53
54static int stage; 53static int stage;
55static int ok; 54static int ok;
56static int connected; 55static int connected;
@@ -68,43 +67,43 @@ static GNUNET_SCHEDULER_TaskIdentifier stage_task;
68#endif 67#endif
69 68
70static void 69static void
71run_stage (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc); 70run_stage(void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc);
72 71
73static void 72static void
74end (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) 73end(void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
75{ 74{
76 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stopping\n"); 75 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Stopping\n");
77 76
78 if (die_task != GNUNET_SCHEDULER_NO_TASK) 77 if (die_task != GNUNET_SCHEDULER_NO_TASK )
79 { 78 {
80 GNUNET_SCHEDULER_cancel (die_task); 79 GNUNET_SCHEDULER_cancel (die_task);
81 die_task = GNUNET_SCHEDULER_NO_TASK; 80 die_task = GNUNET_SCHEDULER_NO_TASK;
82 } 81 }
83 82
84 if (timeout_task != GNUNET_SCHEDULER_NO_TASK) 83 if (timeout_task != GNUNET_SCHEDULER_NO_TASK )
85 { 84 {
86 GNUNET_SCHEDULER_cancel (timeout_task); 85 GNUNET_SCHEDULER_cancel (timeout_task);
87 timeout_task = GNUNET_SCHEDULER_NO_TASK; 86 timeout_task = GNUNET_SCHEDULER_NO_TASK;
88 } 87 }
89 88
90 if (stage_task != GNUNET_SCHEDULER_NO_TASK) 89 if (stage_task != GNUNET_SCHEDULER_NO_TASK )
91 { 90 {
92 GNUNET_SCHEDULER_cancel (stage_task); 91 GNUNET_SCHEDULER_cancel (stage_task);
93 stage_task = GNUNET_SCHEDULER_NO_TASK; 92 stage_task = GNUNET_SCHEDULER_NO_TASK;
94 } 93 }
95 94
96 if (cc != NULL) 95 if (cc != NULL )
97 { 96 {
98 GNUNET_TRANSPORT_TESTING_connect_peers_cancel(tth, cc); 97 GNUNET_TRANSPORT_TESTING_connect_peers_cancel (tth, cc);
99 cc = NULL; 98 cc = NULL;
100 } 99 }
101 100
102 if (p1 != NULL) 101 if (p1 != NULL )
103 { 102 {
104 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1); 103 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1);
105 p1 = NULL; 104 p1 = NULL;
106 } 105 }
107 if (p2 != NULL) 106 if (p2 != NULL )
108 { 107 {
109 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2); 108 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2);
110 p2 = NULL; 109 p2 = NULL;
@@ -112,240 +111,252 @@ end (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
112} 111}
113 112
114static void 113static void
115end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) 114end_badly(void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
116{ 115{
117 die_task = GNUNET_SCHEDULER_NO_TASK; 116 die_task = GNUNET_SCHEDULER_NO_TASK;
118 117
119 if (timeout_task != GNUNET_SCHEDULER_NO_TASK) 118 if (timeout_task != GNUNET_SCHEDULER_NO_TASK )
120 { 119 {
121 GNUNET_SCHEDULER_cancel (timeout_task); 120 GNUNET_SCHEDULER_cancel (timeout_task);
122 timeout_task = GNUNET_SCHEDULER_NO_TASK; 121 timeout_task = GNUNET_SCHEDULER_NO_TASK;
123 } 122 }
124 123
125 if (stage_task != GNUNET_SCHEDULER_NO_TASK) 124 if (stage_task != GNUNET_SCHEDULER_NO_TASK )
126 { 125 {
127 GNUNET_SCHEDULER_cancel (stage_task); 126 GNUNET_SCHEDULER_cancel (stage_task);
128 stage_task = GNUNET_SCHEDULER_NO_TASK; 127 stage_task = GNUNET_SCHEDULER_NO_TASK;
129 } 128 }
130 129
131 130 if (cc != NULL )
132 if (cc != NULL)
133 { 131 {
134 GNUNET_TRANSPORT_TESTING_connect_peers_cancel(tth, cc); 132 GNUNET_TRANSPORT_TESTING_connect_peers_cancel (tth, cc);
135 cc = NULL; 133 cc = NULL;
136 } 134 }
137 if (p1 != NULL) 135 if (p1 != NULL )
138 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1); 136 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1);
139 if (p2 != NULL) 137 if (p2 != NULL )
140 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2); 138 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2);
141 139
142 ok = GNUNET_SYSERR; 140 ok = GNUNET_SYSERR;
143} 141}
144 142
145static void 143static void
146testing_connect_cb (struct PeerContext *p1, struct PeerContext *p2, void *cls) 144testing_connect_cb(struct PeerContext *p1, struct PeerContext *p2, void *cls)
147{ 145{
148 cc = NULL; 146 cc = NULL;
149 char *p1_c = GNUNET_strdup (GNUNET_i2s (&p1->id)); 147 char *p1_c = GNUNET_strdup (GNUNET_i2s (&p1->id));
150 148
151 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Peers connected: %u (%s) <-> %u (%s)\n", 149 GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Peers connected: %u (%s) <-> %u (%s)\n",
152 p1->no, p1_c, p2->no, GNUNET_i2s (&p2->id)); 150 p1->no, p1_c, p2->no, GNUNET_i2s (&p2->id));
153 GNUNET_free (p1_c); 151 GNUNET_free(p1_c);
154 connected = GNUNET_YES; 152 connected = GNUNET_YES;
155 stage_task = GNUNET_SCHEDULER_add_now (&run_stage, NULL); 153 stage_task = GNUNET_SCHEDULER_add_now (&run_stage, NULL );
156} 154}
157 155
158static void 156static void
159connect_timeout (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) 157connect_timeout(void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
160{ 158{
161 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Peers not connected, next stage\n"); 159 GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Peers not connected, next stage\n");
162 timeout_task = GNUNET_SCHEDULER_NO_TASK; 160 timeout_task = GNUNET_SCHEDULER_NO_TASK;
163 stage_task = GNUNET_SCHEDULER_add_now (&run_stage, NULL); 161 stage_task = GNUNET_SCHEDULER_add_now (&run_stage, NULL );
164} 162}
165 163
166static int started; 164static int started;
167 165
168void 166void
169start_cb (struct PeerContext *p, void *cls) 167start_cb(struct PeerContext *p, void *cls)
170{ 168{
171 169
172 started++; 170 started++;
173 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u (`%s') started\n", p->no, 171 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Peer %u (`%s') started\n", p->no,
174 GNUNET_i2s (&p->id)); 172 GNUNET_i2s (&p->id));
175 173
176 if (started != 2) 174 if (started != 2)
177 return; 175 return;
178 176
179 char *sender_c = GNUNET_strdup (GNUNET_i2s (&p1->id)); 177 char *sender_c = GNUNET_strdup (GNUNET_i2s (&p1->id));
180 178
181 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 179 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
182 "Test tries to connect peer %u (`%s') -> peer %u (`%s')\n", 180 "Test tries to connect peer %u (`%s') -> peer %u (`%s')\n", p1->no,
183 p1->no, sender_c, p2->no, GNUNET_i2s (&p2->id)); 181 sender_c, p2->no, GNUNET_i2s (&p2->id));
184 GNUNET_free (sender_c); 182 GNUNET_free(sender_c);
185 183
186 cc = GNUNET_TRANSPORT_TESTING_connect_peers (tth, p1, p2, &testing_connect_cb, 184 cc = GNUNET_TRANSPORT_TESTING_connect_peers (tth, p1, p2, &testing_connect_cb,
187 NULL); 185 NULL );
188 186
189} 187}
190 188
191static void 189static void
192run_stage (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) 190run_stage(void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
193{ 191{
194 stage_task = GNUNET_SCHEDULER_NO_TASK; 192 stage_task = GNUNET_SCHEDULER_NO_TASK;
195 if (GNUNET_SCHEDULER_NO_TASK != die_task) 193 if (GNUNET_SCHEDULER_NO_TASK != die_task)
196 GNUNET_SCHEDULER_cancel (die_task); 194 GNUNET_SCHEDULER_cancel (die_task);
197 die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL); 195 die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL );
198 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Running stage %u\n", stage); 196 GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Running stage %u\n", stage);
199 197
200 if (0 == stage) 198 if (0 == stage)
201 { 199 {
202 started = GNUNET_NO; 200 started = GNUNET_NO;
203 connected = GNUNET_NO; 201 connected = GNUNET_NO;
204 if (0 == strcmp(test_name, "test_transport_blacklisting_no_bl")) 202 if (0 == strcmp (test_name, "test_transport_blacklisting_no_bl"))
205 { 203 {
206 /* Try to connect peers successfully */ 204 /* Try to connect peers successfully */
207 p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth, "test_transport_blacklisting_cfg_peer1.conf", 1, 205 p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth,
208 NULL, NULL, NULL, &start_cb, NULL); 206 "test_transport_blacklisting_cfg_peer1.conf", 1, NULL, NULL, NULL,
209 207 &start_cb, NULL );
210 p2 = GNUNET_TRANSPORT_TESTING_start_peer (tth, "test_transport_blacklisting_cfg_peer2.conf", 2, 208
211 NULL, NULL, NULL, &start_cb, NULL); 209 p2 = GNUNET_TRANSPORT_TESTING_start_peer (tth,
212 } 210 "test_transport_blacklisting_cfg_peer2.conf", 2, NULL, NULL, NULL,
213 else if (0 == strcmp(test_name, "test_transport_blacklisting_outbound_bl_full")) 211 &start_cb, NULL );
214 { 212 }
215 p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth, "test_transport_blacklisting_cfg_blp_peer1_full.conf", 1, 213 else if (0
216 NULL, NULL, NULL, &start_cb, NULL); 214 == strcmp (test_name, "test_transport_blacklisting_outbound_bl_full"))
217 215 {
218 p2 = GNUNET_TRANSPORT_TESTING_start_peer (tth, "test_transport_blacklisting_cfg_peer2.conf", 2, 216 p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth,
219 NULL, NULL, NULL, &start_cb, NULL); 217 "test_transport_blacklisting_cfg_blp_peer1_full.conf", 1, NULL, NULL,
220 } 218 NULL, &start_cb, NULL );
221 else if (0 == strcmp(test_name, "test_transport_blacklisting_outbound_bl_plugin")) 219
222 { 220 p2 = GNUNET_TRANSPORT_TESTING_start_peer (tth,
223 p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth, "test_transport_blacklisting_cfg_blp_peer1_plugin.conf", 1, 221 "test_transport_blacklisting_cfg_peer2.conf", 2, NULL, NULL, NULL,
224 NULL, NULL, NULL, &start_cb, NULL); 222 &start_cb, NULL );
225 223 }
226 p2 = GNUNET_TRANSPORT_TESTING_start_peer (tth, "test_transport_blacklisting_cfg_peer2.conf", 2, 224 else if (0
227 NULL, NULL, NULL, &start_cb, NULL); 225 == strcmp (test_name, "test_transport_blacklisting_outbound_bl_plugin"))
228 } 226 {
229 else if (0 == strcmp(test_name, "test_transport_blacklisting_inbound_bl_full")) 227 p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth,
230 { 228 "test_transport_blacklisting_cfg_blp_peer1_plugin.conf", 1, NULL,
231 p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth, "test_transport_blacklisting_cfg_peer1.conf", 1, 229 NULL, NULL, &start_cb, NULL );
232 NULL, NULL, NULL, &start_cb, NULL); 230
233 231 p2 = GNUNET_TRANSPORT_TESTING_start_peer (tth,
234 p2 = GNUNET_TRANSPORT_TESTING_start_peer (tth, "test_transport_blacklisting_cfg_blp_peer2_full.conf", 2, 232 "test_transport_blacklisting_cfg_peer2.conf", 2, NULL, NULL, NULL,
235 NULL, NULL, NULL, &start_cb, NULL); 233 &start_cb, NULL );
236 } 234 }
237 else if (0 == strcmp(test_name, "test_transport_blacklisting_inbound_bl_plugin")) 235 else if (0
238 { 236 == strcmp (test_name, "test_transport_blacklisting_inbound_bl_full"))
239 p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth, "test_transport_blacklisting_cfg_peer1.conf", 1, 237 {
240 NULL, NULL, NULL, &start_cb, NULL); 238 p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth,
241 239 "test_transport_blacklisting_cfg_peer1.conf", 1, NULL, NULL, NULL,
242 p2 = GNUNET_TRANSPORT_TESTING_start_peer (tth, "test_transport_blacklisting_cfg_blp_peer2_plugin.conf", 2, 240 &start_cb, NULL );
243 NULL, NULL, NULL, &start_cb, NULL); 241
244 } 242 p2 = GNUNET_TRANSPORT_TESTING_start_peer (tth,
245 else if (0 == strcmp(test_name, "test_transport_blacklisting_multiple_plugins")) 243 "test_transport_blacklisting_cfg_blp_peer2_full.conf", 2, NULL, NULL,
246 { 244 NULL, &start_cb, NULL );
247 p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth, "test_transport_blacklisting_cfg_blp_peer1_multiple_plugins.conf", 1, 245 }
248 NULL, NULL, NULL, &start_cb, NULL); 246 else if (0
249 247 == strcmp (test_name, "test_transport_blacklisting_inbound_bl_plugin"))
250 p2 = GNUNET_TRANSPORT_TESTING_start_peer (tth, "test_transport_blacklisting_cfg_blp_peer2_multiple_plugins.conf", 2, 248 {
251 NULL, NULL, NULL, &start_cb, NULL); 249 p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth,
252 } 250 "test_transport_blacklisting_cfg_peer1.conf", 1, NULL, NULL, NULL,
253 251 &start_cb, NULL );
254 252
255 if ((NULL == p1) || (NULL == p2)) 253 p2 = GNUNET_TRANSPORT_TESTING_start_peer (tth,
256 { 254 "test_transport_blacklisting_cfg_blp_peer2_plugin.conf", 2, NULL,
257 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to start peers\n"); 255 NULL, NULL, &start_cb, NULL );
258 ok = 1; 256 }
259 GNUNET_SCHEDULER_add_now (&end, NULL); 257 else if (0
260 } 258 == strcmp (test_name, "test_transport_blacklisting_multiple_plugins"))
261 259 {
262 timeout_task = GNUNET_SCHEDULER_add_delayed (CONNECT_TIMEOUT, &connect_timeout, NULL); 260 p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth,
263 stage ++; 261 "test_transport_blacklisting_cfg_blp_peer1_multiple_plugins.conf", 1,
264 return; 262 NULL, NULL, NULL, &start_cb, NULL );
265 } 263
266 264 p2 = GNUNET_TRANSPORT_TESTING_start_peer (tth,
267 265 "test_transport_blacklisting_cfg_blp_peer2_multiple_plugins.conf", 2,
268 if (cc != NULL) 266 NULL, NULL, NULL, &start_cb, NULL );
267 }
268 else
269 {
270 GNUNET_break (0);
271 GNUNET_SCHEDULER_add_now (&end, NULL );
272 }
273
274 if ((NULL == p1) || (NULL == p2))
275 {
276 GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Failed to start peers\n");
277 ok = 1;
278 GNUNET_SCHEDULER_add_now (&end, NULL );
279 }
280
281 timeout_task = GNUNET_SCHEDULER_add_delayed (CONNECT_TIMEOUT,
282 &connect_timeout, NULL );
283 stage++;
284 return;
285 }
286
287 if (cc != NULL )
269 { 288 {
270 GNUNET_TRANSPORT_TESTING_connect_peers_cancel(tth, cc); 289 GNUNET_TRANSPORT_TESTING_connect_peers_cancel (tth, cc);
271 cc = NULL; 290 cc = NULL;
272 } 291 }
273 292
274 if (p1 != NULL) 293 if (p1 != NULL )
275 { 294 {
276 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1); 295 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1);
277 p1 = NULL; 296 p1 = NULL;
278 } 297 }
279 if (p2 != NULL) 298 if (p2 != NULL )
280 { 299 {
281 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2); 300 GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2);
282 p2 = NULL; 301 p2 = NULL;
283 } 302 }
284 303
285 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Done in stage %u: Peers %s and %s!\n", stage, 304 GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Done in stage %u: Peers %s and %s!\n",
286 (GNUNET_NO == started) ? "NOT STARTED" : "STARTED", 305 stage, (GNUNET_NO == started) ? "NOT STARTED" : "STARTED",
287 (GNUNET_YES == connected) ? "CONNECTED" : "NOT CONNECTED"); 306 (GNUNET_YES == connected) ? "CONNECTED" : "NOT CONNECTED");
288 307
289 if ((0 == strcmp(test_name, "test_transport_blacklisting_no_bl")) || 308 if ((0 == strcmp (test_name, "test_transport_blacklisting_no_bl"))
290 (0 == strcmp(test_name, "test_transport_blacklisting_multiple_plugins"))) 309 || (0
291 { 310 == strcmp (test_name, "test_transport_blacklisting_multiple_plugins")))
292 if ((GNUNET_NO != started) && (GNUNET_YES == connected)) 311 {
293 ok = 0; 312 if ((GNUNET_NO != started) && (GNUNET_YES == connected))
294 else 313 ok = 0;
295 { 314 else
296 GNUNET_break (0); 315 {
297 ok = 1; 316 GNUNET_break(0);
298 } 317 ok = 1;
299 } 318 }
300 else 319 }
301 { 320 else
302 if ((GNUNET_NO != started) && (GNUNET_YES != connected)) 321 {
303 ok = 0; 322 if ((GNUNET_NO != started) && (GNUNET_YES != connected))
304 else 323 ok = 0;
305 { 324 else
306 ok = 1; 325 {
307 } 326 ok = 1;
308 } 327 }
309 GNUNET_SCHEDULER_add_now (&end, NULL); 328 }
329 GNUNET_SCHEDULER_add_now (&end, NULL );
310} 330}
311 331
312static void 332static void
313run (void *cls, char *const *args, const char *cfgfile, 333run(void *cls, char * const *args, const char *cfgfile,
314 const struct GNUNET_CONFIGURATION_Handle *cfg) 334 const struct GNUNET_CONFIGURATION_Handle *cfg)
315{ 335{
316 connected = GNUNET_NO; 336 connected = GNUNET_NO;
317 stage = 0; 337 stage = 0;
318 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Running test `%s'!\n", test_name); 338 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Running test `%s'!\n", test_name);
319 stage_task = GNUNET_SCHEDULER_add_now (&run_stage, NULL); 339 stage_task = GNUNET_SCHEDULER_add_now (&run_stage, NULL );
320} 340}
321 341
322
323int 342int
324main (int argc, char *argv0[]) 343main(int argc, char *argv0[])
325{ 344{
326 ok = 1; 345 ok = 1;
327 346
328 GNUNET_TRANSPORT_TESTING_get_test_name (argv0[0], &test_name); 347 GNUNET_TRANSPORT_TESTING_get_test_name (argv0[0], &test_name);
329 348
330 GNUNET_log_setup ("test-transport-api-blacklisting", 349 GNUNET_log_setup ("test-transport-api-blacklisting", "WARNING", NULL );
331 "WARNING",
332 NULL);
333 350
334 static char *const argv[] = { "date", 351 static char * const argv[] =
335 "-c", 352 { "date", "-c", "test_transport_api_data.conf", NULL };
336 "test_transport_api_data.conf", 353 static struct GNUNET_GETOPT_CommandLineOption options[] =
337 NULL 354 { GNUNET_GETOPT_OPTION_END };
338 };
339 static struct GNUNET_GETOPT_CommandLineOption options[] = {
340 GNUNET_GETOPT_OPTION_END
341 };
342 355
343 tth = GNUNET_TRANSPORT_TESTING_init (); 356 tth = GNUNET_TRANSPORT_TESTING_init ();
344 357
345 GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, argv, 358 GNUNET_PROGRAM_run ((sizeof(argv) / sizeof(char *)) - 1, argv,
346 "test-transport-api-blacklisting", 359 "test-transport-api-blacklisting", "nohelp", options, &run, NULL );
347 "nohelp", options, &run, NULL);
348
349 360
350 GNUNET_TRANSPORT_TESTING_done (tth); 361 GNUNET_TRANSPORT_TESTING_done (tth);
351 362