summaryrefslogtreecommitdiff
path: root/src/transport/transport_api2_monitor.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/transport/transport_api2_monitor.c')
-rw-r--r--src/transport/transport_api2_monitor.c127
1 files changed, 63 insertions, 64 deletions
diff --git a/src/transport/transport_api2_monitor.c b/src/transport/transport_api2_monitor.c
index 97812ff89..74624326c 100644
--- a/src/transport/transport_api2_monitor.c
+++ b/src/transport/transport_api2_monitor.c
@@ -16,7 +16,7 @@
16 along with this program. If not, see <http://www.gnu.org/licenses/>. 16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17 17
18 SPDX-License-Identifier: AGPL3.0-or-later 18 SPDX-License-Identifier: AGPL3.0-or-later
19*/ 19 */
20 20
21/** 21/**
22 * @file transport/transport_api2_monitor.c 22 * @file transport/transport_api2_monitor.c
@@ -33,8 +33,7 @@
33/** 33/**
34 * Opaque handle to the transport service for monitors. 34 * Opaque handle to the transport service for monitors.
35 */ 35 */
36struct GNUNET_TRANSPORT_MonitorContext 36struct GNUNET_TRANSPORT_MonitorContext {
37{
38 /** 37 /**
39 * Our configuration. 38 * Our configuration.
40 */ 39 */
@@ -73,7 +72,7 @@ struct GNUNET_TRANSPORT_MonitorContext
73 * @param mc handle to reconnect 72 * @param mc handle to reconnect
74 */ 73 */
75static void 74static void
76reconnect (struct GNUNET_TRANSPORT_MonitorContext *mc); 75reconnect(struct GNUNET_TRANSPORT_MonitorContext *mc);
77 76
78 77
79/** 78/**
@@ -83,17 +82,17 @@ reconnect (struct GNUNET_TRANSPORT_MonitorContext *mc);
83 * @param ai address to delete 82 * @param ai address to delete
84 */ 83 */
85static void 84static void
86send_start_monitor (struct GNUNET_TRANSPORT_MonitorContext *mc) 85send_start_monitor(struct GNUNET_TRANSPORT_MonitorContext *mc)
87{ 86{
88 struct GNUNET_MQ_Envelope *env; 87 struct GNUNET_MQ_Envelope *env;
89 struct GNUNET_TRANSPORT_MonitorStart *smm; 88 struct GNUNET_TRANSPORT_MonitorStart *smm;
90 89
91 if (NULL == mc->mq) 90 if (NULL == mc->mq)
92 return; 91 return;
93 env = GNUNET_MQ_msg (smm, GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_START); 92 env = GNUNET_MQ_msg(smm, GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_START);
94 smm->one_shot = htonl ((uint32_t) mc->one_shot); 93 smm->one_shot = htonl((uint32_t)mc->one_shot);
95 smm->peer = mc->peer; 94 smm->peer = mc->peer;
96 GNUNET_MQ_send (mc->mq, env); 95 GNUNET_MQ_send(mc->mq, env);
97} 96}
98 97
99 98
@@ -103,11 +102,11 @@ send_start_monitor (struct GNUNET_TRANSPORT_MonitorContext *mc)
103 * @param mc service to disconnect from 102 * @param mc service to disconnect from
104 */ 103 */
105static void 104static void
106disconnect (struct GNUNET_TRANSPORT_MonitorContext *mc) 105disconnect(struct GNUNET_TRANSPORT_MonitorContext *mc)
107{ 106{
108 if (NULL == mc->mq) 107 if (NULL == mc->mq)
109 return; 108 return;
110 GNUNET_MQ_destroy (mc->mq); 109 GNUNET_MQ_destroy(mc->mq);
111 mc->mq = NULL; 110 mc->mq = NULL;
112} 111}
113 112
@@ -119,16 +118,16 @@ disconnect (struct GNUNET_TRANSPORT_MonitorContext *mc)
119 * @param error what error happened? 118 * @param error what error happened?
120 */ 119 */
121static void 120static void
122error_handler (void *cls, enum GNUNET_MQ_Error error) 121error_handler(void *cls, enum GNUNET_MQ_Error error)
123{ 122{
124 struct GNUNET_TRANSPORT_MonitorContext *mc = cls; 123 struct GNUNET_TRANSPORT_MonitorContext *mc = cls;
125 124
126 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 125 GNUNET_log(GNUNET_ERROR_TYPE_INFO,
127 "MQ failure %d, reconnecting to transport service.\n", 126 "MQ failure %d, reconnecting to transport service.\n",
128 error); 127 error);
129 disconnect (mc); 128 disconnect(mc);
130 /* TODO: maybe do this with exponential backoff/delay */ 129 /* TODO: maybe do this with exponential backoff/delay */
131 reconnect (mc); 130 reconnect(mc);
132} 131}
133 132
134 133
@@ -141,10 +140,10 @@ error_handler (void *cls, enum GNUNET_MQ_Error error)
141 * @return #GNUNET_OK if @a smt is well-formed 140 * @return #GNUNET_OK if @a smt is well-formed
142 */ 141 */
143static int 142static int
144check_monitor_data (void *cls, const struct GNUNET_TRANSPORT_MonitorData *md) 143check_monitor_data(void *cls, const struct GNUNET_TRANSPORT_MonitorData *md)
145{ 144{
146 (void) cls; 145 (void)cls;
147 GNUNET_MQ_check_zero_termination (md); 146 GNUNET_MQ_check_zero_termination(md);
148 return GNUNET_OK; 147 return GNUNET_OK;
149} 148}
150 149
@@ -156,21 +155,21 @@ check_monitor_data (void *cls, const struct GNUNET_TRANSPORT_MonitorData *md)
156 * @param md monitor data 155 * @param md monitor data
157 */ 156 */
158static void 157static void
159handle_monitor_data (void *cls, const struct GNUNET_TRANSPORT_MonitorData *md) 158handle_monitor_data(void *cls, const struct GNUNET_TRANSPORT_MonitorData *md)
160{ 159{
161 struct GNUNET_TRANSPORT_MonitorContext *mc = cls; 160 struct GNUNET_TRANSPORT_MonitorContext *mc = cls;
162 struct GNUNET_TRANSPORT_MonitorInformation mi; 161 struct GNUNET_TRANSPORT_MonitorInformation mi;
163 162
164 mi.address = (const char *) &md[1]; 163 mi.address = (const char *)&md[1];
165 mi.nt = (enum GNUNET_NetworkType) ntohl (md->nt); 164 mi.nt = (enum GNUNET_NetworkType)ntohl(md->nt);
166 mi.cs = (enum GNUNET_TRANSPORT_ConnectionStatus) ntohl (md->cs); 165 mi.cs = (enum GNUNET_TRANSPORT_ConnectionStatus)ntohl(md->cs);
167 mi.num_msg_pending = ntohl (md->num_msg_pending); 166 mi.num_msg_pending = ntohl(md->num_msg_pending);
168 mi.num_bytes_pending = ntohl (md->num_bytes_pending); 167 mi.num_bytes_pending = ntohl(md->num_bytes_pending);
169 mi.last_validation = GNUNET_TIME_absolute_ntoh (md->last_validation); 168 mi.last_validation = GNUNET_TIME_absolute_ntoh(md->last_validation);
170 mi.valid_until = GNUNET_TIME_absolute_ntoh (md->valid_until); 169 mi.valid_until = GNUNET_TIME_absolute_ntoh(md->valid_until);
171 mi.next_validation = GNUNET_TIME_absolute_ntoh (md->next_validation); 170 mi.next_validation = GNUNET_TIME_absolute_ntoh(md->next_validation);
172 mi.rtt = GNUNET_TIME_relative_ntoh (md->rtt); 171 mi.rtt = GNUNET_TIME_relative_ntoh(md->rtt);
173 mc->cb (mc->cb_cls, &md->peer, &mi); 172 mc->cb(mc->cb_cls, &md->peer, &mi);
174} 173}
175 174
176 175
@@ -181,19 +180,19 @@ handle_monitor_data (void *cls, const struct GNUNET_TRANSPORT_MonitorData *md)
181 * @param me end message 180 * @param me end message
182 */ 181 */
183static void 182static void
184handle_monitor_end (void *cls, const struct GNUNET_MessageHeader *me) 183handle_monitor_end(void *cls, const struct GNUNET_MessageHeader *me)
185{ 184{
186 struct GNUNET_TRANSPORT_MonitorContext *mc = cls; 185 struct GNUNET_TRANSPORT_MonitorContext *mc = cls;
187 186
188 if (GNUNET_YES != mc->one_shot) 187 if (GNUNET_YES != mc->one_shot)
189 { 188 {
190 GNUNET_break (0); 189 GNUNET_break(0);
191 disconnect (mc); 190 disconnect(mc);
192 reconnect (mc); 191 reconnect(mc);
193 return; 192 return;
194 } 193 }
195 mc->cb (mc->cb_cls, NULL, NULL); 194 mc->cb(mc->cb_cls, NULL, NULL);
196 GNUNET_TRANSPORT_monitor_cancel (mc); 195 GNUNET_TRANSPORT_monitor_cancel(mc);
197} 196}
198 197
199 198
@@ -203,24 +202,24 @@ handle_monitor_end (void *cls, const struct GNUNET_MessageHeader *me)
203 * @param mc handle to reconnect 202 * @param mc handle to reconnect
204 */ 203 */
205static void 204static void
206reconnect (struct GNUNET_TRANSPORT_MonitorContext *mc) 205reconnect(struct GNUNET_TRANSPORT_MonitorContext *mc)
207{ 206{
208 struct GNUNET_MQ_MessageHandler handlers[] = 207 struct GNUNET_MQ_MessageHandler handlers[] =
209 {GNUNET_MQ_hd_var_size (monitor_data, 208 { GNUNET_MQ_hd_var_size(monitor_data,
210 GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_DATA, 209 GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_DATA,
211 struct GNUNET_TRANSPORT_MonitorData, 210 struct GNUNET_TRANSPORT_MonitorData,
211 mc),
212 GNUNET_MQ_hd_fixed_size(monitor_end,
213 GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_END,
214 struct GNUNET_MessageHeader,
212 mc), 215 mc),
213 GNUNET_MQ_hd_fixed_size (monitor_end, 216 GNUNET_MQ_handler_end() };
214 GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_END,
215 struct GNUNET_MessageHeader,
216 mc),
217 GNUNET_MQ_handler_end ()};
218 217
219 mc->mq = 218 mc->mq =
220 GNUNET_CLIENT_connect (mc->cfg, "transport", handlers, &error_handler, mc); 219 GNUNET_CLIENT_connect(mc->cfg, "transport", handlers, &error_handler, mc);
221 if (NULL == mc->mq) 220 if (NULL == mc->mq)
222 return; 221 return;
223 send_start_monitor (mc); 222 send_start_monitor(mc);
224} 223}
225 224
226 225
@@ -251,27 +250,27 @@ reconnect (struct GNUNET_TRANSPORT_MonitorContext *mc)
251 * @param cb_cls closure for @a mc 250 * @param cb_cls closure for @a mc
252 */ 251 */
253struct GNUNET_TRANSPORT_MonitorContext * 252struct GNUNET_TRANSPORT_MonitorContext *
254GNUNET_TRANSPORT_monitor (const struct GNUNET_CONFIGURATION_Handle *cfg, 253GNUNET_TRANSPORT_monitor(const struct GNUNET_CONFIGURATION_Handle *cfg,
255 const struct GNUNET_PeerIdentity *peer, 254 const struct GNUNET_PeerIdentity *peer,
256 int one_shot, 255 int one_shot,
257 GNUNET_TRANSPORT_MonitorCallback cb, 256 GNUNET_TRANSPORT_MonitorCallback cb,
258 void *cb_cls) 257 void *cb_cls)
259{ 258{
260 struct GNUNET_TRANSPORT_MonitorContext *mc; 259 struct GNUNET_TRANSPORT_MonitorContext *mc;
261 260
262 mc = GNUNET_new (struct GNUNET_TRANSPORT_MonitorContext); 261 mc = GNUNET_new(struct GNUNET_TRANSPORT_MonitorContext);
263 mc->cfg = cfg; 262 mc->cfg = cfg;
264 if (NULL != peer) 263 if (NULL != peer)
265 mc->peer = *peer; 264 mc->peer = *peer;
266 mc->one_shot = one_shot; 265 mc->one_shot = one_shot;
267 mc->cb = cb; 266 mc->cb = cb;
268 mc->cb_cls = cb_cls; 267 mc->cb_cls = cb_cls;
269 reconnect (mc); 268 reconnect(mc);
270 if (NULL == mc->mq) 269 if (NULL == mc->mq)
271 { 270 {
272 GNUNET_free (mc); 271 GNUNET_free(mc);
273 return NULL; 272 return NULL;
274 } 273 }
275 return mc; 274 return mc;
276} 275}
277 276
@@ -282,10 +281,10 @@ GNUNET_TRANSPORT_monitor (const struct GNUNET_CONFIGURATION_Handle *cfg,
282 * @param pmc handle for the request to cancel 281 * @param pmc handle for the request to cancel
283 */ 282 */
284void 283void
285GNUNET_TRANSPORT_monitor_cancel (struct GNUNET_TRANSPORT_MonitorContext *mc) 284GNUNET_TRANSPORT_monitor_cancel(struct GNUNET_TRANSPORT_MonitorContext *mc)
286{ 285{
287 disconnect (mc); 286 disconnect(mc);
288 GNUNET_free (mc); 287 GNUNET_free(mc);
289} 288}
290 289
291/* end of transport_api2_monitor.c */ 290/* end of transport_api2_monitor.c */