diff options
Diffstat (limited to 'src/transport/test_transport_api_multiaddress.c')
-rw-r--r-- | src/transport/test_transport_api_multiaddress.c | 185 |
1 files changed, 85 insertions, 100 deletions
diff --git a/src/transport/test_transport_api_multiaddress.c b/src/transport/test_transport_api_multiaddress.c index b2ac507d2..63ef28862 100644 --- a/src/transport/test_transport_api_multiaddress.c +++ b/src/transport/test_transport_api_multiaddress.c | |||
@@ -63,9 +63,9 @@ static int ok; | |||
63 | 63 | ||
64 | static int is_tcp; | 64 | static int is_tcp; |
65 | 65 | ||
66 | static GNUNET_SCHEDULER_TaskIdentifier die_task; | 66 | static GNUNET_SCHEDULER_TaskIdentifier die_task; |
67 | 67 | ||
68 | static GNUNET_SCHEDULER_TaskIdentifier tct; | 68 | static GNUNET_SCHEDULER_TaskIdentifier tct; |
69 | 69 | ||
70 | 70 | ||
71 | #if VERBOSE | 71 | #if VERBOSE |
@@ -81,13 +81,13 @@ stop_arm (struct PeerContext *p) | |||
81 | { | 81 | { |
82 | #if START_ARM | 82 | #if START_ARM |
83 | if (NULL != p->arm_proc) | 83 | if (NULL != p->arm_proc) |
84 | { | 84 | { |
85 | if (0 != GNUNET_OS_process_kill (p->arm_proc, SIGTERM)) | 85 | if (0 != GNUNET_OS_process_kill (p->arm_proc, SIGTERM)) |
86 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill"); | 86 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill"); |
87 | GNUNET_OS_process_wait (p->arm_proc); | 87 | GNUNET_OS_process_wait (p->arm_proc); |
88 | GNUNET_OS_process_close (p->arm_proc); | 88 | GNUNET_OS_process_close (p->arm_proc); |
89 | p->arm_proc = NULL; | 89 | p->arm_proc = NULL; |
90 | } | 90 | } |
91 | #endif | 91 | #endif |
92 | GNUNET_CONFIGURATION_destroy (p->cfg); | 92 | GNUNET_CONFIGURATION_destroy (p->cfg); |
93 | } | 93 | } |
@@ -96,16 +96,15 @@ stop_arm (struct PeerContext *p) | |||
96 | 96 | ||
97 | 97 | ||
98 | static void | 98 | static void |
99 | exchange_hello_last (void *cls, | 99 | exchange_hello_last (void *cls, const struct GNUNET_MessageHeader *message) |
100 | const struct GNUNET_MessageHeader *message) | ||
101 | { | 100 | { |
102 | struct PeerContext *me = cls; | 101 | struct PeerContext *me = cls; |
103 | 102 | ||
104 | GNUNET_assert (message != NULL); | 103 | GNUNET_assert (message != NULL); |
105 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 104 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
106 | "Exchanging HELLO of size %d with peer (%s)!\n", | 105 | "Exchanging HELLO of size %d with peer (%s)!\n", |
107 | (int) GNUNET_HELLO_size((const struct GNUNET_HELLO_Message *)message), | 106 | (int) GNUNET_HELLO_size ((const struct GNUNET_HELLO_Message *) |
108 | GNUNET_i2s (&me->id)); | 107 | message), GNUNET_i2s (&me->id)); |
109 | GNUNET_assert (GNUNET_OK == | 108 | GNUNET_assert (GNUNET_OK == |
110 | GNUNET_HELLO_get_id ((const struct GNUNET_HELLO_Message *) | 109 | GNUNET_HELLO_get_id ((const struct GNUNET_HELLO_Message *) |
111 | message, &me->id)); | 110 | message, &me->id)); |
@@ -114,8 +113,7 @@ exchange_hello_last (void *cls, | |||
114 | 113 | ||
115 | 114 | ||
116 | static void | 115 | static void |
117 | exchange_hello (void *cls, | 116 | exchange_hello (void *cls, const struct GNUNET_MessageHeader *message) |
118 | const struct GNUNET_MessageHeader *message) | ||
119 | { | 117 | { |
120 | struct PeerContext *me = cls; | 118 | struct PeerContext *me = cls; |
121 | 119 | ||
@@ -124,9 +122,9 @@ exchange_hello (void *cls, | |||
124 | GNUNET_HELLO_get_id ((const struct GNUNET_HELLO_Message *) | 122 | GNUNET_HELLO_get_id ((const struct GNUNET_HELLO_Message *) |
125 | message, &me->id)); | 123 | message, &me->id)); |
126 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 124 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
127 | "Exchanging HELLO of size %d from peer %s!\n", | 125 | "Exchanging HELLO of size %d from peer %s!\n", |
128 | (int) GNUNET_HELLO_size((const struct GNUNET_HELLO_Message *)message), | 126 | (int) GNUNET_HELLO_size ((const struct GNUNET_HELLO_Message *) |
129 | GNUNET_i2s (&me->id)); | 127 | message), GNUNET_i2s (&me->id)); |
130 | GNUNET_TRANSPORT_offer_hello (p2.th, message, NULL, NULL); | 128 | GNUNET_TRANSPORT_offer_hello (p2.th, message, NULL, NULL); |
131 | } | 129 | } |
132 | 130 | ||
@@ -142,10 +140,10 @@ end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
142 | GNUNET_TRANSPORT_disconnect (p1.th); | 140 | GNUNET_TRANSPORT_disconnect (p1.th); |
143 | GNUNET_TRANSPORT_disconnect (p2.th); | 141 | GNUNET_TRANSPORT_disconnect (p2.th); |
144 | if (GNUNET_SCHEDULER_NO_TASK != tct) | 142 | if (GNUNET_SCHEDULER_NO_TASK != tct) |
145 | { | 143 | { |
146 | GNUNET_SCHEDULER_cancel (tct); | 144 | GNUNET_SCHEDULER_cancel (tct); |
147 | tct = GNUNET_SCHEDULER_NO_TASK; | 145 | tct = GNUNET_SCHEDULER_NO_TASK; |
148 | } | 146 | } |
149 | ok = 1; | 147 | ok = 1; |
150 | } | 148 | } |
151 | 149 | ||
@@ -159,10 +157,10 @@ end_normally (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
159 | GNUNET_TRANSPORT_disconnect (p1.th); | 157 | GNUNET_TRANSPORT_disconnect (p1.th); |
160 | GNUNET_TRANSPORT_disconnect (p2.th); | 158 | GNUNET_TRANSPORT_disconnect (p2.th); |
161 | if (GNUNET_SCHEDULER_NO_TASK != tct) | 159 | if (GNUNET_SCHEDULER_NO_TASK != tct) |
162 | { | 160 | { |
163 | GNUNET_SCHEDULER_cancel (tct); | 161 | GNUNET_SCHEDULER_cancel (tct); |
164 | tct = GNUNET_SCHEDULER_NO_TASK; | 162 | tct = GNUNET_SCHEDULER_NO_TASK; |
165 | } | 163 | } |
166 | ok = 0; | 164 | ok = 0; |
167 | } | 165 | } |
168 | 166 | ||
@@ -173,87 +171,76 @@ notify_connect (void *cls, | |||
173 | uint32_t ats_count) | 171 | uint32_t ats_count) |
174 | { | 172 | { |
175 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 173 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
176 | "Peer `%4s' connected to us (%p)!\n", | 174 | "Peer `%4s' connected to us (%p)!\n", GNUNET_i2s (peer), cls); |
177 | GNUNET_i2s (peer), | ||
178 | cls); | ||
179 | if (cls == &p1) | 175 | if (cls == &p1) |
180 | { | 176 | { |
181 | GNUNET_assert (ok >= 2); | 177 | GNUNET_assert (ok >= 2); |
182 | OKPP; | 178 | OKPP; |
183 | OKPP; | 179 | OKPP; |
184 | if (GNUNET_SCHEDULER_NO_TASK != die_task) | 180 | if (GNUNET_SCHEDULER_NO_TASK != die_task) |
185 | GNUNET_SCHEDULER_cancel (die_task); | 181 | GNUNET_SCHEDULER_cancel (die_task); |
186 | if (GNUNET_SCHEDULER_NO_TASK != tct) | 182 | if (GNUNET_SCHEDULER_NO_TASK != tct) |
187 | GNUNET_SCHEDULER_cancel (tct); | 183 | GNUNET_SCHEDULER_cancel (tct); |
188 | tct = GNUNET_SCHEDULER_NO_TASK; | 184 | tct = GNUNET_SCHEDULER_NO_TASK; |
189 | die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT_TRANSMIT, | 185 | die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT_TRANSMIT, |
190 | &end_normally, NULL); | 186 | &end_normally, NULL); |
191 | } | 187 | } |
192 | } | 188 | } |
193 | 189 | ||
194 | 190 | ||
195 | static void | 191 | static void |
196 | notify_disconnect (void *cls, | 192 | notify_disconnect (void *cls, const struct GNUNET_PeerIdentity *peer) |
197 | const struct GNUNET_PeerIdentity *peer) | ||
198 | { | 193 | { |
199 | if ( (ok != 60) && | 194 | if ((ok != 60) && (GNUNET_SCHEDULER_NO_TASK != die_task)) |
200 | (GNUNET_SCHEDULER_NO_TASK != die_task) ) | 195 | { |
201 | { | 196 | GNUNET_SCHEDULER_cancel (die_task); |
202 | GNUNET_SCHEDULER_cancel (die_task); | 197 | die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); |
203 | die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); | 198 | } |
204 | } | ||
205 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 199 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
206 | "Peer `%4s' disconnected (%p)!\n", | 200 | "Peer `%4s' disconnected (%p)!\n", GNUNET_i2s (peer), cls); |
207 | GNUNET_i2s (peer), cls); | ||
208 | } | 201 | } |
209 | 202 | ||
210 | 203 | ||
211 | static void | 204 | static void |
212 | setup_peer (struct PeerContext *p, | 205 | setup_peer (struct PeerContext *p, const char *cfgname) |
213 | const char *cfgname) | ||
214 | { | 206 | { |
215 | p->cfg = GNUNET_CONFIGURATION_create (); | 207 | p->cfg = GNUNET_CONFIGURATION_create (); |
216 | 208 | ||
217 | GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname)); | 209 | GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname)); |
218 | if (GNUNET_CONFIGURATION_have_value (p->cfg,"PATHS", "SERVICEHOME")) | 210 | if (GNUNET_CONFIGURATION_have_value (p->cfg, "PATHS", "SERVICEHOME")) |
219 | { | 211 | { |
220 | GNUNET_assert (GNUNET_OK == | 212 | GNUNET_assert (GNUNET_OK == |
221 | GNUNET_CONFIGURATION_get_value_string (p->cfg, | 213 | GNUNET_CONFIGURATION_get_value_string (p->cfg, |
222 | "PATHS", "SERVICEHOME", | 214 | "PATHS", |
223 | &p->servicehome)); | 215 | "SERVICEHOME", |
224 | GNUNET_DISK_directory_remove (p->servicehome); | 216 | &p->servicehome)); |
225 | } | 217 | GNUNET_DISK_directory_remove (p->servicehome); |
218 | } | ||
226 | 219 | ||
227 | #if START_ARM | 220 | #if START_ARM |
228 | p->arm_proc = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm", | 221 | p->arm_proc = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm", |
229 | "gnunet-service-arm", | 222 | "gnunet-service-arm", |
230 | #if VERBOSE_ARM | 223 | #if VERBOSE_ARM |
231 | "-L", "DEBUG", | 224 | "-L", "DEBUG", |
232 | #endif | 225 | #endif |
233 | "-c", cfgname, NULL); | 226 | "-c", cfgname, NULL); |
234 | #endif | 227 | #endif |
235 | p->th = GNUNET_TRANSPORT_connect (p->cfg, | 228 | p->th = GNUNET_TRANSPORT_connect (p->cfg, |
236 | NULL, p, | 229 | NULL, p, |
237 | NULL, | 230 | NULL, ¬ify_connect, ¬ify_disconnect); |
238 | ¬ify_connect, ¬ify_disconnect); | ||
239 | GNUNET_assert (p->th != NULL); | 231 | GNUNET_assert (p->th != NULL); |
240 | } | 232 | } |
241 | 233 | ||
242 | 234 | ||
243 | static void | 235 | static void |
244 | try_connect (void *cls, | 236 | try_connect (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) |
245 | const struct GNUNET_SCHEDULER_TaskContext *tc) | ||
246 | { | 237 | { |
247 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 238 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Asking peers to connect...\n"); |
248 | "Asking peers to connect...\n"); | ||
249 | /* FIXME: 'pX.id' may still be all-zeros here... */ | 239 | /* FIXME: 'pX.id' may still be all-zeros here... */ |
250 | GNUNET_TRANSPORT_try_connect (p2.th, | 240 | GNUNET_TRANSPORT_try_connect (p2.th, &p1.id); |
251 | &p1.id); | 241 | GNUNET_TRANSPORT_try_connect (p1.th, &p2.id); |
252 | GNUNET_TRANSPORT_try_connect (p1.th, | ||
253 | &p2.id); | ||
254 | tct = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, | 242 | tct = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, |
255 | &try_connect, | 243 | &try_connect, NULL); |
256 | NULL); | ||
257 | } | 244 | } |
258 | 245 | ||
259 | 246 | ||
@@ -264,15 +251,14 @@ run (void *cls, | |||
264 | { | 251 | { |
265 | GNUNET_assert (ok == 1); | 252 | GNUNET_assert (ok == 1); |
266 | OKPP; | 253 | OKPP; |
267 | die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, | 254 | die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL); |
268 | &end_badly, NULL); | ||
269 | if (is_tcp) | 255 | if (is_tcp) |
270 | { | 256 | { |
271 | setup_peer (&p1, "test_transport_api_multiaddress_tcp_peer1.conf"); | 257 | setup_peer (&p1, "test_transport_api_multiaddress_tcp_peer1.conf"); |
272 | setup_peer (&p2, "test_transport_api_multiaddress_tcp_peer2.conf"); | 258 | setup_peer (&p2, "test_transport_api_multiaddress_tcp_peer2.conf"); |
273 | } | 259 | } |
274 | GNUNET_assert(p1.th != NULL); | 260 | GNUNET_assert (p1.th != NULL); |
275 | GNUNET_assert(p2.th != NULL); | 261 | GNUNET_assert (p2.th != NULL); |
276 | 262 | ||
277 | GNUNET_TRANSPORT_get_hello (p1.th, &exchange_hello, &p1); | 263 | GNUNET_TRANSPORT_get_hello (p1.th, &exchange_hello, &p1); |
278 | GNUNET_TRANSPORT_get_hello (p2.th, &exchange_hello_last, &p2); | 264 | GNUNET_TRANSPORT_get_hello (p2.th, &exchange_hello_last, &p2); |
@@ -295,25 +281,24 @@ check () | |||
295 | }; | 281 | }; |
296 | 282 | ||
297 | #if WRITECONFIG | 283 | #if WRITECONFIG |
298 | setTransportOptions("test_transport_api_data.conf"); | 284 | setTransportOptions ("test_transport_api_data.conf"); |
299 | #endif | 285 | #endif |
300 | ok = 1; | 286 | ok = 1; |
301 | GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, | 287 | GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, |
302 | argv, "test-transport-api", "nohelp", | 288 | argv, "test-transport-api", "nohelp", options, &run, &ok); |
303 | options, &run, &ok); | ||
304 | stop_arm (&p1); | 289 | stop_arm (&p1); |
305 | stop_arm (&p2); | 290 | stop_arm (&p2); |
306 | 291 | ||
307 | if (p1.servicehome != NULL) | 292 | if (p1.servicehome != NULL) |
308 | { | 293 | { |
309 | GNUNET_DISK_directory_remove (p1.servicehome); | 294 | GNUNET_DISK_directory_remove (p1.servicehome); |
310 | GNUNET_free(p1.servicehome); | 295 | GNUNET_free (p1.servicehome); |
311 | } | 296 | } |
312 | if (p2.servicehome != NULL) | 297 | if (p2.servicehome != NULL) |
313 | { | 298 | { |
314 | GNUNET_DISK_directory_remove (p2.servicehome); | 299 | GNUNET_DISK_directory_remove (p2.servicehome); |
315 | GNUNET_free(p2.servicehome); | 300 | GNUNET_free (p2.servicehome); |
316 | } | 301 | } |
317 | return ok; | 302 | return ok; |
318 | } | 303 | } |
319 | 304 | ||
@@ -331,10 +316,10 @@ main (int argc, char *argv[]) | |||
331 | #endif | 316 | #endif |
332 | NULL); | 317 | NULL); |
333 | 318 | ||
334 | if (strstr(argv[0], "tcp") != NULL) | 319 | if (strstr (argv[0], "tcp") != NULL) |
335 | { | 320 | { |
336 | is_tcp = GNUNET_YES; | 321 | is_tcp = GNUNET_YES; |
337 | } | 322 | } |
338 | 323 | ||
339 | ret = check (); | 324 | ret = check (); |
340 | 325 | ||