summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorAlfred E. Heggestad <alfred.heggestad@gmail.com>2017-02-23 19:21:50 +0100
committerGitHub <noreply@github.com>2017-02-23 19:21:50 +0100
commitfb6bf93a7816516247523bd004737b2d1f3bba86 (patch)
tree334abf16f49890e6825c815a5b889f675c2033fb /modules
parent39ff942fa874ff0d698d3ac938a6c8c741afb107 (diff)
Message reentrant (#214)
* message: make it re-entrant * clean up message test-code
Diffstat (limited to 'modules')
-rw-r--r--modules/contact/contact.c19
-rw-r--r--modules/gtk/gtk_mod.c6
-rw-r--r--modules/menu/menu.c12
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);