diff options
author | Alfred E. Heggestad <alfred.heggestad@gmail.com> | 2017-02-23 19:21:50 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-23 19:21:50 +0100 |
commit | fb6bf93a7816516247523bd004737b2d1f3bba86 (patch) | |
tree | 334abf16f49890e6825c815a5b889f675c2033fb /modules | |
parent | 39ff942fa874ff0d698d3ac938a6c8c741afb107 (diff) |
Message reentrant (#214)
* message: make it re-entrant
* clean up message test-code
Diffstat (limited to 'modules')
-rw-r--r-- | modules/contact/contact.c | 19 | ||||
-rw-r--r-- | modules/gtk/gtk_mod.c | 6 | ||||
-rw-r--r-- | modules/menu/menu.c | 12 |
3 files changed, 31 insertions, 6 deletions
diff --git a/modules/contact/contact.c b/modules/contact/contact.c index 8b25652..2bb506d 100644 --- a/modules/contact/contact.c +++ b/modules/contact/contact.c @@ -110,6 +110,22 @@ static int print_contacts(struct re_printf *pf, void *unused) } +static void send_resp_handler(int err, const struct sip_msg *msg, void *arg) +{ + (void)arg; + + if (err) { + (void)re_fprintf(stderr, " \x1b[31m%m\x1b[;m\n", err); + return; + } + + if (msg->scode >= 300) { + (void)re_fprintf(stderr, " \x1b[31m%u %r\x1b[;m\n", + msg->scode, &msg->reason); + } +} + + static int cmd_message(struct re_printf *pf, void *arg) { const struct cmd_arg *carg = arg; @@ -119,7 +135,8 @@ static int cmd_message(struct re_printf *pf, void *arg) return re_hprintf(pf, "contact: chat peer is not set\n"); } - err = message_send(uag_current(), chat_peer, carg->prm); + err = message_send(uag_current(), chat_peer, carg->prm, + send_resp_handler, NULL); if (err) { (void)re_hprintf(pf, "contact: message_send() failed (%m)\n", err); diff --git a/modules/gtk/gtk_mod.c b/modules/gtk/gtk_mod.c index 63e30d0..279446c 100644 --- a/modules/gtk/gtk_mod.c +++ b/modules/gtk/gtk_mod.c @@ -40,6 +40,7 @@ struct gtk_mod { bool run; bool contacts_inited; bool accounts_inited; + struct message_lsnr *message; struct mqueue *mq; GApplication *app; GtkStatusIcon *status_icon; @@ -988,7 +989,8 @@ static int module_init(void) aufilt_register(&vumeter); #ifdef USE_NOTIFICATIONS - err = message_init(message_handler, &mod_obj); + err = message_listen(&mod_obj.message, baresip_message(), + message_handler, &mod_obj); if (err) { warning("gtk: message_init failed (%m)\n", err); return err; @@ -1021,7 +1023,7 @@ static int module_close(void) pthread_join(mod_obj.thread, NULL); mod_obj.mq = mem_deref(mod_obj.mq); aufilt_unregister(&vumeter); - message_close(); + mod_obj.message = mem_deref(mod_obj.message); #ifdef USE_LIBNOTIFY if (notify_is_initted()) diff --git a/modules/menu/menu.c b/modules/menu/menu.c index 1ee4e73..1765558 100644 --- a/modules/menu/menu.c +++ b/modules/menu/menu.c @@ -35,6 +35,7 @@ static struct le *le_cur; /**< Current User-Agent (struct ua) */ static struct { struct play *play; + struct message_lsnr *message; bool bell; struct tmr tmr_redial; /**< Timer for auto-reconnect */ @@ -1077,9 +1078,14 @@ static int module_init(void) if (err) return err; - err |= uag_event_register(ua_event_handler, NULL); + err = uag_event_register(ua_event_handler, NULL); + if (err) + return err; - err |= message_init(message_handler, NULL); + err = message_listen(&menu.message, baresip_message(), + message_handler, NULL); + if (err) + return err; return err; } @@ -1090,7 +1096,7 @@ static int module_close(void) debug("menu: close (redial current_attempts=%d)\n", menu.current_attempts); - message_close(); + menu.message = mem_deref(menu.message); uag_event_unregister(ua_event_handler); cmd_unregister(baresip_commands(), cmdv); cmd_unregister(baresip_commands(), dialcmdv); |