diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2011-08-11 22:04:27 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2011-08-11 22:04:27 +0000 |
commit | cb11932b64344bc9bde5f5163eefdfc059946c9a (patch) | |
tree | b7f02a55d2ba78322a190617d809733527d21194 /src/transport/transport-testing.c | |
parent | c34cc2e767ce2e48787148694c810602f19f7d5e (diff) | |
download | gnunet-cb11932b64344bc9bde5f5163eefdfc059946c9a.tar.gz gnunet-cb11932b64344bc9bde5f5163eefdfc059946c9a.zip |
cb wrapper for connecting peers
Diffstat (limited to 'src/transport/transport-testing.c')
-rw-r--r-- | src/transport/transport-testing.c | 66 |
1 files changed, 65 insertions, 1 deletions
diff --git a/src/transport/transport-testing.c b/src/transport/transport-testing.c index 24cf8a829..910d9a6d8 100644 --- a/src/transport/transport-testing.c +++ b/src/transport/transport-testing.c | |||
@@ -34,6 +34,51 @@ struct ConnectingContext | |||
34 | GNUNET_SCHEDULER_TaskIdentifier tct; | 34 | GNUNET_SCHEDULER_TaskIdentifier tct; |
35 | }; | 35 | }; |
36 | 36 | ||
37 | static void | ||
38 | notify_connect (void *cls, | ||
39 | const struct GNUNET_PeerIdentity *peer, | ||
40 | const struct GNUNET_TRANSPORT_ATS_Information *ats, | ||
41 | uint32_t ats_count) | ||
42 | { | ||
43 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer `%s' connected \n", | ||
44 | GNUNET_i2s (peer)); | ||
45 | |||
46 | struct PeerContext * p = cls; | ||
47 | if (p == NULL) | ||
48 | return; | ||
49 | if (p->nc != NULL) | ||
50 | p->nc (p->cb_cls, peer, ats, ats_count); | ||
51 | } | ||
52 | |||
53 | static void | ||
54 | notify_disconnect (void *cls, const struct GNUNET_PeerIdentity *peer) | ||
55 | { | ||
56 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer `%s' disconnected \n", | ||
57 | GNUNET_i2s (peer)); | ||
58 | |||
59 | struct PeerContext * p = cls; | ||
60 | if (p == NULL) | ||
61 | return; | ||
62 | if (p->nd != NULL) | ||
63 | p->nd (p->cb_cls, peer); | ||
64 | } | ||
65 | |||
66 | static void | ||
67 | notify_receive (void *cls, | ||
68 | const struct GNUNET_PeerIdentity *peer, | ||
69 | const struct GNUNET_MessageHeader *message, | ||
70 | const struct GNUNET_TRANSPORT_ATS_Information *ats, | ||
71 | uint32_t ats_count) | ||
72 | { | ||
73 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Receiving\n"); | ||
74 | |||
75 | struct PeerContext * p = cls; | ||
76 | if (p == NULL) | ||
77 | return; | ||
78 | if (p->rec != NULL) | ||
79 | p->rec (p->cb_cls, peer, message, ats, ats_count); | ||
80 | } | ||
81 | |||
37 | 82 | ||
38 | static void | 83 | static void |
39 | exchange_hello_last (void *cls, | 84 | exchange_hello_last (void *cls, |
@@ -95,7 +140,11 @@ try_connect (void *cls, | |||
95 | } | 140 | } |
96 | 141 | ||
97 | struct PeerContext * | 142 | struct PeerContext * |
98 | GNUNET_TRANSPORT_TESTING_start_peer (const char * cfgname) | 143 | GNUNET_TRANSPORT_TESTING_start_peer (const char * cfgname, |
144 | GNUNET_TRANSPORT_ReceiveCallback rec, | ||
145 | GNUNET_TRANSPORT_NotifyConnect nc, | ||
146 | GNUNET_TRANSPORT_NotifyDisconnect nd, | ||
147 | void * cb_cls) | ||
99 | { | 148 | { |
100 | struct PeerContext * p = GNUNET_malloc (sizeof (struct PeerContext)); | 149 | struct PeerContext * p = GNUNET_malloc (sizeof (struct PeerContext)); |
101 | 150 | ||
@@ -109,12 +158,26 @@ GNUNET_TRANSPORT_TESTING_start_peer (const char * cfgname) | |||
109 | p->arm_proc = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm", | 158 | p->arm_proc = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm", |
110 | "gnunet-service-arm", | 159 | "gnunet-service-arm", |
111 | "-c", cfgname, NULL); | 160 | "-c", cfgname, NULL); |
161 | p->nc = nc; | ||
162 | p->nd = nd; | ||
163 | p->rec = rec; | ||
164 | p->cb_cls = cb_cls; | ||
165 | |||
166 | p->th = GNUNET_TRANSPORT_connect(p->cfg, NULL, | ||
167 | p, | ||
168 | ¬ify_receive, | ||
169 | ¬ify_connect, | ||
170 | ¬ify_disconnect); | ||
171 | GNUNET_assert (p->th != NULL); | ||
112 | return p; | 172 | return p; |
113 | } | 173 | } |
114 | 174 | ||
115 | void | 175 | void |
116 | GNUNET_TRANSPORT_TESTING_stop_peer (struct PeerContext * p) | 176 | GNUNET_TRANSPORT_TESTING_stop_peer (struct PeerContext * p) |
117 | { | 177 | { |
178 | if (p->th != NULL) | ||
179 | GNUNET_TRANSPORT_disconnect(p->th); | ||
180 | |||
118 | if (NULL != p->arm_proc) | 181 | if (NULL != p->arm_proc) |
119 | { | 182 | { |
120 | if (0 != GNUNET_OS_process_kill (p->arm_proc, SIGTERM)) | 183 | if (0 != GNUNET_OS_process_kill (p->arm_proc, SIGTERM)) |
@@ -129,6 +192,7 @@ GNUNET_TRANSPORT_TESTING_stop_peer (struct PeerContext * p) | |||
129 | GNUNET_DISK_directory_remove (p->servicehome); | 192 | GNUNET_DISK_directory_remove (p->servicehome); |
130 | GNUNET_free(p->servicehome); | 193 | GNUNET_free(p->servicehome); |
131 | } | 194 | } |
195 | GNUNET_free (p); | ||
132 | } | 196 | } |
133 | 197 | ||
134 | void | 198 | void |