diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2011-08-12 00:42:16 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2011-08-12 00:42:16 +0000 |
commit | 202d53014183b98b27cdc88fef11b5f9f6b97f00 (patch) | |
tree | bbc982cbe7f46d695e639e623f2aebbb10d5a874 /src/transport | |
parent | 96c4f70b09d1413e2fedba83b2dcbeba13c9b1f7 (diff) | |
download | gnunet-202d53014183b98b27cdc88fef11b5f9f6b97f00.tar.gz gnunet-202d53014183b98b27cdc88fef11b5f9f6b97f00.zip |
connecting peers fully implemented ... time for PIIZZA!
Diffstat (limited to 'src/transport')
-rw-r--r-- | src/transport/test_transport_testing.c | 10 | ||||
-rw-r--r-- | src/transport/transport-testing.c | 102 | ||||
-rw-r--r-- | src/transport/transport-testing.h | 2 |
3 files changed, 91 insertions, 23 deletions
diff --git a/src/transport/test_transport_testing.c b/src/transport/test_transport_testing.c index d9789d980..514dd2b6e 100644 --- a/src/transport/test_transport_testing.c +++ b/src/transport/test_transport_testing.c | |||
@@ -84,6 +84,11 @@ end_badly () | |||
84 | static void | 84 | static void |
85 | testing_connect_cb (struct PeerContext * p1, struct PeerContext * p2, void *cls) | 85 | testing_connect_cb (struct PeerContext * p1, struct PeerContext * p2, void *cls) |
86 | { | 86 | { |
87 | char * p1_c = strdup (GNUNET_i2s(&p1->id)); | ||
88 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Peers connected: %s <-> %s\n", | ||
89 | p1_c, | ||
90 | GNUNET_i2s (&p2->id)); | ||
91 | GNUNET_free(p1_c); | ||
87 | end(); | 92 | end(); |
88 | } | 93 | } |
89 | 94 | ||
@@ -96,9 +101,6 @@ notify_connect (void *cls, | |||
96 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer `%s' connected \n", | 101 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer `%s' connected \n", |
97 | GNUNET_i2s (peer)); | 102 | GNUNET_i2s (peer)); |
98 | connected++; | 103 | connected++; |
99 | |||
100 | if (connected == 2) | ||
101 | end (); | ||
102 | } | 104 | } |
103 | 105 | ||
104 | static void | 106 | static void |
@@ -155,7 +157,7 @@ run (void *cls, | |||
155 | 157 | ||
156 | 158 | ||
157 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Connecting peers\n"); | 159 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Connecting peers\n"); |
158 | GNUNET_TRANSPORT_TESTING_connect_peers(p1, p2, NULL, NULL); | 160 | GNUNET_TRANSPORT_TESTING_connect_peers(p1, p2, &testing_connect_cb, NULL); |
159 | } | 161 | } |
160 | 162 | ||
161 | int | 163 | int |
diff --git a/src/transport/transport-testing.c b/src/transport/transport-testing.c index 25e173b4a..24e4e8797 100644 --- a/src/transport/transport-testing.c +++ b/src/transport/transport-testing.c | |||
@@ -32,9 +32,56 @@ struct ConnectingContext | |||
32 | struct PeerContext * p1; | 32 | struct PeerContext * p1; |
33 | struct PeerContext * p2; | 33 | struct PeerContext * p2; |
34 | GNUNET_SCHEDULER_TaskIdentifier tct; | 34 | GNUNET_SCHEDULER_TaskIdentifier tct; |
35 | GNUNET_TRANSPORT_TESTING_connect_cb cb; | ||
36 | void * cb_cls; | ||
37 | |||
38 | struct GNUNET_TRANSPORT_Handle *th_p1; | ||
39 | struct GNUNET_TRANSPORT_Handle *th_p2; | ||
40 | int c; | ||
35 | }; | 41 | }; |
36 | 42 | ||
37 | static void | 43 | static void |
44 | exchange_hello_last (void *cls, | ||
45 | const struct GNUNET_MessageHeader *message); | ||
46 | static void | ||
47 | exchange_hello (void *cls, | ||
48 | const struct GNUNET_MessageHeader *message); | ||
49 | |||
50 | static void | ||
51 | notify_connect_internal (void *cls, | ||
52 | const struct GNUNET_PeerIdentity *peer, | ||
53 | const struct GNUNET_TRANSPORT_ATS_Information *ats, | ||
54 | uint32_t ats_count) | ||
55 | { | ||
56 | struct ConnectingContext * cc = cls; | ||
57 | // /void * cb_cls = cc->cb_cls; | ||
58 | |||
59 | GNUNET_assert(cc != NULL); | ||
60 | cc->c++; | ||
61 | |||
62 | if (cc->c == 2) | ||
63 | { | ||
64 | /* clean up */ | ||
65 | GNUNET_TRANSPORT_get_hello_cancel (cc->th_p2, &exchange_hello_last, cc); | ||
66 | GNUNET_TRANSPORT_get_hello_cancel (cc->th_p1, &exchange_hello, cc); | ||
67 | |||
68 | if (cc->tct != GNUNET_SCHEDULER_NO_TASK) | ||
69 | GNUNET_SCHEDULER_cancel(cc->tct); | ||
70 | |||
71 | cc->tct = GNUNET_SCHEDULER_NO_TASK; | ||
72 | |||
73 | GNUNET_TRANSPORT_disconnect( cc->th_p1); | ||
74 | GNUNET_TRANSPORT_disconnect( cc->th_p2); | ||
75 | |||
76 | if (cc->cb != NULL) | ||
77 | cc->cb (cc->p1, cc->p2, cc->cb_cls); | ||
78 | |||
79 | GNUNET_free(cc); | ||
80 | } | ||
81 | |||
82 | } | ||
83 | |||
84 | static void | ||
38 | notify_connect (void *cls, | 85 | notify_connect (void *cls, |
39 | const struct GNUNET_PeerIdentity *peer, | 86 | const struct GNUNET_PeerIdentity *peer, |
40 | const struct GNUNET_TRANSPORT_ATS_Information *ats, | 87 | const struct GNUNET_TRANSPORT_ATS_Information *ats, |
@@ -78,7 +125,7 @@ exchange_hello_last (void *cls, | |||
78 | { | 125 | { |
79 | struct ConnectingContext * cc = cls; | 126 | struct ConnectingContext * cc = cls; |
80 | struct PeerContext *me = cc->p2; | 127 | struct PeerContext *me = cc->p2; |
81 | struct PeerContext *p1 = cc->p1; | 128 | //struct PeerContext *p1 = cc->p1; |
82 | 129 | ||
83 | GNUNET_assert (message != NULL); | 130 | GNUNET_assert (message != NULL); |
84 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 131 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
@@ -88,8 +135,7 @@ exchange_hello_last (void *cls, | |||
88 | GNUNET_assert (GNUNET_OK == | 135 | GNUNET_assert (GNUNET_OK == |
89 | GNUNET_HELLO_get_id ((const struct GNUNET_HELLO_Message *) | 136 | GNUNET_HELLO_get_id ((const struct GNUNET_HELLO_Message *) |
90 | message, &me->id)); | 137 | message, &me->id)); |
91 | GNUNET_TRANSPORT_offer_hello (p1->th, message, NULL, NULL); | 138 | GNUNET_TRANSPORT_offer_hello (cc->th_p1, message, NULL, NULL); |
92 | GNUNET_TRANSPORT_get_hello_cancel (me->th, &exchange_hello_last, cc); | ||
93 | } | 139 | } |
94 | 140 | ||
95 | 141 | ||
@@ -99,7 +145,7 @@ exchange_hello (void *cls, | |||
99 | { | 145 | { |
100 | struct ConnectingContext * cc = cls; | 146 | struct ConnectingContext * cc = cls; |
101 | struct PeerContext *me = cc->p1; | 147 | struct PeerContext *me = cc->p1; |
102 | struct PeerContext *p2 = cc->p2; | 148 | //struct PeerContext *p2 = cc->p2; |
103 | 149 | ||
104 | GNUNET_assert (message != NULL); | 150 | GNUNET_assert (message != NULL); |
105 | GNUNET_assert (GNUNET_OK == | 151 | GNUNET_assert (GNUNET_OK == |
@@ -109,8 +155,7 @@ exchange_hello (void *cls, | |||
109 | "Exchanging HELLO of size %d from peer %s!\n", | 155 | "Exchanging HELLO of size %d from peer %s!\n", |
110 | (int) GNUNET_HELLO_size((const struct GNUNET_HELLO_Message *)message), | 156 | (int) GNUNET_HELLO_size((const struct GNUNET_HELLO_Message *)message), |
111 | GNUNET_i2s (&me->id)); | 157 | GNUNET_i2s (&me->id)); |
112 | GNUNET_TRANSPORT_offer_hello (p2->th, message, NULL, NULL); | 158 | GNUNET_TRANSPORT_offer_hello (cc->th_p2, message, NULL, NULL); |
113 | GNUNET_TRANSPORT_get_hello_cancel (me->th, &exchange_hello, cc); | ||
114 | } | 159 | } |
115 | 160 | ||
116 | static void | 161 | static void |
@@ -121,16 +166,21 @@ try_connect (void *cls, | |||
121 | struct PeerContext *p1 = cc->p1; | 166 | struct PeerContext *p1 = cc->p1; |
122 | struct PeerContext *p2 = cc->p2; | 167 | struct PeerContext *p2 = cc->p2; |
123 | 168 | ||
169 | cc->tct = GNUNET_SCHEDULER_NO_TASK; | ||
170 | if ( (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0) | ||
171 | return; | ||
172 | |||
124 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 173 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
125 | "Asking peers to connect...\n"); | 174 | "Asking peers to connect...\n"); |
126 | /* FIXME: 'pX.id' may still be all-zeros here... */ | 175 | /* FIXME: 'pX.id' may still be all-zeros here... */ |
127 | GNUNET_TRANSPORT_try_connect (p2->th, | 176 | GNUNET_TRANSPORT_try_connect (cc->th_p1, |
128 | &p1->id); | ||
129 | GNUNET_TRANSPORT_try_connect (p1->th, | ||
130 | &p2->id); | 177 | &p2->id); |
131 | // cc->tct = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, | 178 | GNUNET_TRANSPORT_try_connect (cc->th_p2, |
132 | // &try_connect, | 179 | &p1->id); |
133 | // cc); | 180 | |
181 | cc->tct = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, | ||
182 | &try_connect, | ||
183 | cc); | ||
134 | } | 184 | } |
135 | 185 | ||
136 | struct PeerContext * | 186 | struct PeerContext * |
@@ -198,21 +248,37 @@ GNUNET_TRANSPORT_TESTING_stop_peer (struct PeerContext * p) | |||
198 | void | 248 | void |
199 | GNUNET_TRANSPORT_TESTING_connect_peers (struct PeerContext * p1, | 249 | GNUNET_TRANSPORT_TESTING_connect_peers (struct PeerContext * p1, |
200 | struct PeerContext * p2, | 250 | struct PeerContext * p2, |
201 | GNUNET_TRANSPORT_TESTING_connect_cb * cb, | 251 | GNUNET_TRANSPORT_TESTING_connect_cb cb, |
202 | void * cls) | 252 | void * cls) |
203 | { | 253 | { |
204 | struct ConnectingContext * cc = GNUNET_malloc (sizeof (struct ConnectingContext)); | 254 | struct ConnectingContext * cc = GNUNET_malloc (sizeof (struct ConnectingContext)); |
205 | 255 | ||
206 | GNUNET_assert (p1 != NULL); | 256 | GNUNET_assert (p1 != NULL); |
207 | GNUNET_assert (p1->th != NULL); | ||
208 | |||
209 | GNUNET_assert (p2 != NULL); | 257 | GNUNET_assert (p2 != NULL); |
210 | GNUNET_assert (p2->th != NULL); | ||
211 | 258 | ||
212 | cc->p1 = p1; | 259 | cc->p1 = p1; |
213 | cc->p2 = p2; | 260 | cc->p2 = p2; |
214 | GNUNET_TRANSPORT_get_hello (p1->th, &exchange_hello, cc); | 261 | |
215 | GNUNET_TRANSPORT_get_hello (p2->th, &exchange_hello_last, cc); | 262 | cc->cb = cb; |
263 | cc->cb_cls = cls; | ||
264 | |||
265 | cc->th_p1 = GNUNET_TRANSPORT_connect(cc->p1->cfg, NULL, | ||
266 | cc, | ||
267 | NULL, | ||
268 | ¬ify_connect_internal, | ||
269 | NULL); | ||
270 | |||
271 | cc->th_p2 = GNUNET_TRANSPORT_connect(cc->p2->cfg, NULL, | ||
272 | cc, | ||
273 | NULL, | ||
274 | ¬ify_connect_internal, | ||
275 | NULL); | ||
276 | |||
277 | GNUNET_assert (cc->th_p1 != NULL); | ||
278 | GNUNET_assert (cc->th_p2 != NULL); | ||
279 | |||
280 | GNUNET_TRANSPORT_get_hello (cc->th_p1, &exchange_hello, cc); | ||
281 | GNUNET_TRANSPORT_get_hello (cc->th_p2, &exchange_hello_last, cc); | ||
216 | 282 | ||
217 | cc->tct = GNUNET_SCHEDULER_add_now (&try_connect, cc); | 283 | cc->tct = GNUNET_SCHEDULER_add_now (&try_connect, cc); |
218 | } | 284 | } |
diff --git a/src/transport/transport-testing.h b/src/transport/transport-testing.h index 8e67944ba..cfcffaff6 100644 --- a/src/transport/transport-testing.h +++ b/src/transport/transport-testing.h | |||
@@ -65,7 +65,7 @@ GNUNET_TRANSPORT_TESTING_stop_peer (struct PeerContext * pc); | |||
65 | void | 65 | void |
66 | GNUNET_TRANSPORT_TESTING_connect_peers (struct PeerContext * p1, | 66 | GNUNET_TRANSPORT_TESTING_connect_peers (struct PeerContext * p1, |
67 | struct PeerContext * p2, | 67 | struct PeerContext * p2, |
68 | GNUNET_TRANSPORT_TESTING_connect_cb * cb, | 68 | GNUNET_TRANSPORT_TESTING_connect_cb cb, |
69 | void * cls); | 69 | void * cls); |
70 | 70 | ||
71 | /* end of transport_testing.h */ | 71 | /* end of transport_testing.h */ |