aboutsummaryrefslogtreecommitdiff
path: root/src/transport
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2011-08-11 22:04:27 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2011-08-11 22:04:27 +0000
commitcb11932b64344bc9bde5f5163eefdfc059946c9a (patch)
treeb7f02a55d2ba78322a190617d809733527d21194 /src/transport
parentc34cc2e767ce2e48787148694c810602f19f7d5e (diff)
downloadgnunet-cb11932b64344bc9bde5f5163eefdfc059946c9a.tar.gz
gnunet-cb11932b64344bc9bde5f5163eefdfc059946c9a.zip
cb wrapper for connecting peers
Diffstat (limited to 'src/transport')
-rw-r--r--src/transport/test_transport_testing.c21
-rw-r--r--src/transport/transport-testing.c66
-rw-r--r--src/transport/transport-testing.h12
3 files changed, 83 insertions, 16 deletions
diff --git a/src/transport/test_transport_testing.c b/src/transport/test_transport_testing.c
index 1a176c129..c67d1b27e 100644
--- a/src/transport/test_transport_testing.c
+++ b/src/transport/test_transport_testing.c
@@ -84,31 +84,24 @@ run (void *cls,
84 const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg) 84 const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg)
85{ 85{
86 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Starting peer\n"); 86 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Starting peer\n");
87 p = GNUNET_TRANSPORT_TESTING_start_peer("test_quota_compliance_tcp_peer1.conf"); 87 p = GNUNET_TRANSPORT_TESTING_start_peer("test_quota_compliance_tcp_peer1.conf",
88 &notify_receive,
89 &notify_connect,
90 &notify_disconnect,
91 NULL);
88 92
89 if (p != NULL) 93 if (p != NULL)
90 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer was successfully started\n"); 94 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer was successfully started\n");
91 else 95 else
92 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer was not started successfully\n"); 96 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer was not started successfully\n");
93 GNUNET_assert (p != NULL); 97 GNUNET_assert (p != NULL);
94
95
96 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "\tConnecting to transport service\n");
97 GNUNET_assert (p->th == NULL);
98 p->th = GNUNET_TRANSPORT_connect(p->cfg, NULL,
99 NULL,
100 &notify_receive,
101 &notify_connect,
102 &notify_disconnect);
103 GNUNET_assert (p->th != NULL); 98 GNUNET_assert (p->th != NULL);
104 99
105 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "\tDisconnecting to transport service\n");
106 GNUNET_TRANSPORT_disconnect(p->th);
107
108 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stopping peer\n"); 100 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stopping peer\n");
101
109 GNUNET_TRANSPORT_TESTING_stop_peer(p); 102 GNUNET_TRANSPORT_TESTING_stop_peer(p);
110 103
111 GNUNET_free (p); 104
112} 105}
113 106
114int 107int
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
37static void
38notify_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
53static void
54notify_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
66static void
67notify_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
38static void 83static void
39exchange_hello_last (void *cls, 84exchange_hello_last (void *cls,
@@ -95,7 +140,11 @@ try_connect (void *cls,
95} 140}
96 141
97struct PeerContext * 142struct PeerContext *
98GNUNET_TRANSPORT_TESTING_start_peer (const char * cfgname) 143GNUNET_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 &notify_receive,
169 &notify_connect,
170 &notify_disconnect);
171 GNUNET_assert (p->th != NULL);
112 return p; 172 return p;
113} 173}
114 174
115void 175void
116GNUNET_TRANSPORT_TESTING_stop_peer (struct PeerContext * p) 176GNUNET_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
134void 198void
diff --git a/src/transport/transport-testing.h b/src/transport/transport-testing.h
index 2c45ca67c..8e67944ba 100644
--- a/src/transport/transport-testing.h
+++ b/src/transport/transport-testing.h
@@ -41,13 +41,23 @@ struct PeerContext
41 struct GNUNET_TRANSPORT_Handle *th; 41 struct GNUNET_TRANSPORT_Handle *th;
42 struct GNUNET_PeerIdentity id; 42 struct GNUNET_PeerIdentity id;
43 struct GNUNET_OS_Process *arm_proc; 43 struct GNUNET_OS_Process *arm_proc;
44
45 GNUNET_TRANSPORT_ReceiveCallback rec;
46 GNUNET_TRANSPORT_NotifyConnect nc;
47 GNUNET_TRANSPORT_NotifyDisconnect nd;
48 void * cb_cls;
49
44 char * servicehome; 50 char * servicehome;
45}; 51};
46 52
47typedef void (*GNUNET_TRANSPORT_TESTING_connect_cb) (struct PeerContext * p1, struct PeerContext * p2, void *cls); 53typedef void (*GNUNET_TRANSPORT_TESTING_connect_cb) (struct PeerContext * p1, struct PeerContext * p2, void *cls);
48 54
49struct PeerContext * 55struct PeerContext *
50GNUNET_TRANSPORT_TESTING_start_peer (const char * cfgname); 56GNUNET_TRANSPORT_TESTING_start_peer (const char * cfgname,
57 GNUNET_TRANSPORT_ReceiveCallback rec,
58 GNUNET_TRANSPORT_NotifyConnect nc,
59 GNUNET_TRANSPORT_NotifyDisconnect nd,
60 void * cb_cls);
51 61
52void 62void
53GNUNET_TRANSPORT_TESTING_stop_peer (struct PeerContext * pc); 63GNUNET_TRANSPORT_TESTING_stop_peer (struct PeerContext * pc);