aboutsummaryrefslogtreecommitdiff
path: root/src/social/gnunet-social.c
diff options
context:
space:
mode:
authorGabor X Toth <*@tg-x.net>2016-05-11 20:12:08 +0000
committerGabor X Toth <*@tg-x.net>2016-05-11 20:12:08 +0000
commitdf87fe209a93062875caa4ea78a601bed0777db0 (patch)
treeed1c39bd21ddf74eb1b4003bb3671c8767a63d80 /src/social/gnunet-social.c
parent641c9c191ec41b1725d9df01af4101c3423772bb (diff)
downloadgnunet-df87fe209a93062875caa4ea78a601bed0777db0.tar.gz
gnunet-df87fe209a93062875caa4ea78a601bed0777db0.zip
social cli: transmit fix, sig handlers
Diffstat (limited to 'src/social/gnunet-social.c')
-rw-r--r--src/social/gnunet-social.c58
1 files changed, 40 insertions, 18 deletions
diff --git a/src/social/gnunet-social.c b/src/social/gnunet-social.c
index 0d236b2ff..97c6d7bda 100644
--- a/src/social/gnunet-social.c
+++ b/src/social/gnunet-social.c
@@ -155,20 +155,38 @@ struct GNUNET_SOCIAL_Place *plc;
155 155
156 156
157static void 157static void
158disconnect () 158disconnected (void *cls)
159{
160 GNUNET_SCHEDULER_shutdown ();
161}
162
163
164static void
165app_disconnected (void *cls)
159{ 166{
160 if (hst) 167 if (hst || gst)
161 { 168 {
162 GNUNET_SOCIAL_host_disconnect (hst, NULL, NULL); 169 if (hst)
170 {
171 GNUNET_SOCIAL_host_disconnect (hst, disconnected, NULL);
172 }
173 if (gst)
174 {
175 GNUNET_SOCIAL_guest_disconnect (gst, disconnected, NULL);
176 }
163 } 177 }
164 if (gst) 178 else
165 { 179 {
166 GNUNET_SOCIAL_guest_disconnect (gst, NULL, NULL); 180 GNUNET_SCHEDULER_shutdown ();
167 } 181 }
182}
183
168 184
169 GNUNET_SOCIAL_app_disconnect (app); 185static void
186disconnect ()
187{
170 GNUNET_CORE_disconnect (core); 188 GNUNET_CORE_disconnect (core);
171 GNUNET_SCHEDULER_shutdown (); 189 GNUNET_SOCIAL_app_disconnect (app, app_disconnected, NULL);
172} 190}
173 191
174/** 192/**
@@ -206,7 +224,7 @@ exit_success ()
206 GNUNET_SCHEDULER_cancel (timeout_task); 224 GNUNET_SCHEDULER_cancel (timeout_task);
207 timeout_task = NULL; 225 timeout_task = NULL;
208 } 226 }
209 GNUNET_SCHEDULER_add_now (&schedule_success, NULL); 227 GNUNET_SCHEDULER_add_now (schedule_success, NULL);
210} 228}
211 229
212 230
@@ -218,7 +236,7 @@ exit_fail ()
218 GNUNET_SCHEDULER_cancel (timeout_task); 236 GNUNET_SCHEDULER_cancel (timeout_task);
219 timeout_task = NULL; 237 timeout_task = NULL;
220 } 238 }
221 GNUNET_SCHEDULER_add_now (&schedule_fail, NULL); 239 GNUNET_SCHEDULER_add_now (schedule_fail, NULL);
222} 240}
223 241
224 242
@@ -237,7 +255,7 @@ host_left ()
237static void 255static void
238host_leave () 256host_leave ()
239{ 257{
240 GNUNET_SOCIAL_host_leave (hst, NULL, &host_left, NULL); 258 GNUNET_SOCIAL_host_leave (hst, NULL, host_left, NULL);
241 hst = NULL; 259 hst = NULL;
242 plc = NULL; 260 plc = NULL;
243} 261}
@@ -258,7 +276,7 @@ guest_leave ()
258 // method in the middle of vars? FIXME 276 // method in the middle of vars? FIXME
259 GNUNET_PSYC_env_add (env, GNUNET_PSYC_OP_SET, 277 GNUNET_PSYC_env_add (env, GNUNET_PSYC_OP_SET,
260 "_notice_place_leave", DATA2ARG ("Leaving.")); 278 "_notice_place_leave", DATA2ARG ("Leaving."));
261 GNUNET_SOCIAL_guest_leave (gst, env, &guest_left, NULL); 279 GNUNET_SOCIAL_guest_leave (gst, env, guest_left, NULL);
262 GNUNET_PSYC_env_destroy (env); 280 GNUNET_PSYC_env_destroy (env);
263 gst = NULL; 281 gst = NULL;
264 plc = NULL; 282 plc = NULL;
@@ -296,11 +314,11 @@ notify_data (void *cls, uint16_t *data_size, void *data)
296 { 314 {
297 exit_success (); 315 exit_success ();
298 } 316 }
299 return GNUNET_NO; 317 return GNUNET_YES;
300 } 318 }
301 else 319 else
302 { 320 {
303 return GNUNET_YES; 321 return GNUNET_NO;
304 } 322 }
305} 323}
306 324
@@ -317,7 +335,7 @@ host_announce (const char *method, const char *data, size_t data_size)
317 tmit.size = data_size; 335 tmit.size = data_size;
318 336
319 GNUNET_SOCIAL_host_announce (hst, method, env, 337 GNUNET_SOCIAL_host_announce (hst, method, env,
320 &notify_data, &tmit, 338 notify_data, &tmit,
321 GNUNET_SOCIAL_ANNOUNCE_NONE); 339 GNUNET_SOCIAL_ANNOUNCE_NONE);
322} 340}
323 341
@@ -335,7 +353,7 @@ guest_talk (const char *method,
335 tmit.size = data_size; 353 tmit.size = data_size;
336 354
337 GNUNET_SOCIAL_guest_talk (gst, method, env, 355 GNUNET_SOCIAL_guest_talk (gst, method, env,
338 &notify_data, &tmit, 356 notify_data, &tmit,
339 GNUNET_SOCIAL_TALK_NONE); 357 GNUNET_SOCIAL_TALK_NONE);
340} 358}
341 359
@@ -365,7 +383,7 @@ history_replay (uint64_t start, uint64_t end, const char *prefix)
365 GNUNET_SOCIAL_place_history_replay (plc, start, end, prefix, 383 GNUNET_SOCIAL_place_history_replay (plc, start, end, prefix,
366 GNUNET_PSYC_HISTORY_REPLAY_LOCAL, 384 GNUNET_PSYC_HISTORY_REPLAY_LOCAL,
367 slicer, 385 slicer,
368 &recv_history_replay_result, 386 recv_history_replay_result,
369 NULL); 387 NULL);
370} 388}
371 389
@@ -376,7 +394,7 @@ history_replay_latest (uint64_t limit, const char *prefix)
376 GNUNET_SOCIAL_place_history_replay_latest (plc, limit, prefix, 394 GNUNET_SOCIAL_place_history_replay_latest (plc, limit, prefix,
377 GNUNET_PSYC_HISTORY_REPLAY_LOCAL, 395 GNUNET_PSYC_HISTORY_REPLAY_LOCAL,
378 slicer, 396 slicer,
379 &recv_history_replay_result, 397 recv_history_replay_result,
380 NULL); 398 NULL);
381} 399}
382 400
@@ -916,6 +934,10 @@ static void
916run (void *cls, char *const *args, const char *cfgfile, 934run (void *cls, char *const *args, const char *cfgfile,
917 const struct GNUNET_CONFIGURATION_Handle *c) 935 const struct GNUNET_CONFIGURATION_Handle *c)
918{ 936{
937 GNUNET_SIGNAL_handler_install (SIGINT, disconnect);
938 GNUNET_SIGNAL_handler_install (SIGTERM, disconnect);
939 GNUNET_SIGNAL_handler_install (SIGKILL, disconnect);
940
919 cfg = c; 941 cfg = c;
920 942
921 if (!opt_method) 943 if (!opt_method)
@@ -936,7 +958,7 @@ run (void *cls, char *const *args, const char *cfgfile,
936 958
937 if (!opt_follow) 959 if (!opt_follow)
938 { 960 {
939 timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &timeout, NULL); 961 timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, timeout, NULL);
940 } 962 }
941 963
942 if ((op_host_reconnect || op_host_leave || op_host_announce 964 if ((op_host_reconnect || op_host_leave || op_host_announce