From e338d74070efd3fd7af2bb9c254b65f88c9dd246 Mon Sep 17 00:00:00 2001 From: Sebastian Reimers Date: Wed, 29 Dec 2021 10:04:35 +0100 Subject: [PATCH] webapp: add auto contact connect --- src/modules/webapp/contact.c | 35 ++++++++++++++++++++++++++++++++++- src/modules/webapp/webapp.c | 10 +++++----- src/modules/webapp/webapp.h | 1 + 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/src/modules/webapp/contact.c b/src/modules/webapp/contact.c index ebf51321..01586cb2 100644 --- a/src/modules/webapp/contact.c +++ b/src/modules/webapp/contact.c @@ -32,7 +32,7 @@ static int contact_register(const struct odict_entry *o) le = (void *)&o->le; } - for (le=le; le; le=le->next) { + for (; le; le=le->next) { const struct odict_entry *e = le->data; if (e->type != ODICT_STRING) { @@ -66,6 +66,9 @@ static int contact_register(const struct odict_entry *o) void webapp_contact_add(const struct odict_entry *contact) { + if (!contact) + return; + contact_register(contact); webapp_odict_add(contacts, contact); webapp_write_file_json(contacts, filename); @@ -75,6 +78,10 @@ void webapp_contact_add(const struct odict_entry *contact) void webapp_contact_delete(const char *sip) { struct le *le; + + if (!sip) + return; + for (le = contacts->lst.head; le; le = le->next) { char o_sip[100]; const struct odict_entry *o = le->data; @@ -98,6 +105,32 @@ void webapp_contact_delete(const char *sip) } +bool webapp_contact_exists(const char *sip) +{ + struct le *le; + + if (!sip) + return false; + + for (le = contacts->lst.head; le; le = le->next) { + char o_sip[100]; + const struct odict_entry *o = le->data; + const struct odict_entry *e; + + e = odict_lookup(o->u.odict, "sip"); + if (!e) + continue; + re_snprintf(o_sip, sizeof(o_sip), "sip:%s", e->u.str); + warning("cmp %s == %s\n", o_sip, sip); + if (!str_cmp(o_sip, sip)) { + return true; + } + } + + return false; +} + + int webapp_contacts_init(void) { char path[256] = ""; diff --git a/src/modules/webapp/webapp.c b/src/modules/webapp/webapp.c index 2541774b..82ea91ea 100644 --- a/src/modules/webapp/webapp.c +++ b/src/modules/webapp/webapp.c @@ -200,17 +200,17 @@ static void ua_event_handler(struct ua *ua, enum ua_event ev, if (!key) return; - if (!auto_answer) { + if (webapp_contact_exists(call_peeruri(call))) { + debug("auto answering call\n"); + ua_answer(call_get_ua(call), call, VIDMODE_OFF); + } + else { re_snprintf(webapp_call_json, sizeof(webapp_call_json), "{ \"callback\": \"INCOMING\",\ \"peeruri\": \"%s\",\ \"key\": \"%d\" }", call_peeruri(call), key); } - else { - debug("auto answering call\n"); - ua_answer(call_get_ua(call), call, VIDMODE_OFF); - } ws_send_all(WS_CALLS, webapp_call_json); break; diff --git a/src/modules/webapp/webapp.h b/src/modules/webapp/webapp.h index c8e9f62d..4d0a0a01 100644 --- a/src/modules/webapp/webapp.h +++ b/src/modules/webapp/webapp.h @@ -132,6 +132,7 @@ int webapp_contacts_init(void); void webapp_contacts_close(void); void webapp_contact_add(const struct odict_entry *contact); void webapp_contact_delete(const char *sip); +bool webapp_contact_exists(const char *sip); const struct odict* webapp_contacts_get(void); /*