aboutsummaryrefslogtreecommitdiff
path: root/src/transport
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2011-08-12 00:42:16 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2011-08-12 00:42:16 +0000
commit202d53014183b98b27cdc88fef11b5f9f6b97f00 (patch)
treebbc982cbe7f46d695e639e623f2aebbb10d5a874 /src/transport
parent96c4f70b09d1413e2fedba83b2dcbeba13c9b1f7 (diff)
downloadgnunet-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.c10
-rw-r--r--src/transport/transport-testing.c102
-rw-r--r--src/transport/transport-testing.h2
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 ()
84static void 84static void
85testing_connect_cb (struct PeerContext * p1, struct PeerContext * p2, void *cls) 85testing_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
104static void 106static 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
161int 163int
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
37static void 43static void
44exchange_hello_last (void *cls,
45 const struct GNUNET_MessageHeader *message);
46static void
47exchange_hello (void *cls,
48 const struct GNUNET_MessageHeader *message);
49
50static void
51notify_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
84static void
38notify_connect (void *cls, 85notify_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
116static void 161static 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
136struct PeerContext * 186struct PeerContext *
@@ -198,21 +248,37 @@ GNUNET_TRANSPORT_TESTING_stop_peer (struct PeerContext * p)
198void 248void
199GNUNET_TRANSPORT_TESTING_connect_peers (struct PeerContext * p1, 249GNUNET_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 &notify_connect_internal,
269 NULL);
270
271 cc->th_p2 = GNUNET_TRANSPORT_connect(cc->p2->cfg, NULL,
272 cc,
273 NULL,
274 &notify_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);
65void 65void
66GNUNET_TRANSPORT_TESTING_connect_peers (struct PeerContext * p1, 66GNUNET_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 */