From c40c2799e81677e21238e7936dc9bd423c6b844a Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Tue, 5 Jun 2018 10:29:45 +0300 Subject: [PATCH] implemented menu module module functionality in baresip.c --- app/src/main/assets/config | 4 ++-- app/src/main/cpp/baresip.c | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/app/src/main/assets/config b/app/src/main/assets/config index afb87ce4..e9b6fe12 100644 --- a/app/src/main/assets/config +++ b/app/src/main/assets/config @@ -140,11 +140,11 @@ module_app contact.so module_app debug_cmd.so #module_app dtmfio.so #module_app echo.so -module_app menu.so +#module_app menu.so #module_app mwi.so #module_app natbd.so #module_app presence.so -module_app vidloop.so +#module_app vidloop.so #------------------------------------------------------------------------------ diff --git a/app/src/main/cpp/baresip.c b/app/src/main/cpp/baresip.c index 19a40b70..5b28e98f 100644 --- a/app/src/main/cpp/baresip.c +++ b/app/src/main/cpp/baresip.c @@ -30,6 +30,8 @@ typedef struct update_context { UpdateContext g_ctx; +struct play *play = NULL; + static int vprintf_null(const char *p, size_t size, void *arg) { (void)p; @@ -72,6 +74,17 @@ static const char *ua_event_reg_str(enum ua_event ev) } } +static const char *translate_errorcode(uint16_t scode) +{ + switch (scode) { + + case 404: return "notfound.wav"; + case 486: return "busy.wav"; + case 487: return NULL; /* ignore */ + default: return "error.wav"; + } +} + static void ua_event_handler(struct ua *ua, enum ua_event ev, struct call *call, const char *prm, void *arg) { @@ -80,6 +93,8 @@ static void ua_event_handler(struct ua *ua, enum ua_event ev, char ua_buf[256]; char call_buf[256]; + struct player *player = baresip_player(); + LOGD("ua event (%s) %s\n", uag_event_str(ev), prm); switch (ev) { @@ -90,15 +105,26 @@ static void ua_event_handler(struct ua *ua, enum ua_event ev, re_snprintf(event_buf, sizeof event_buf, "%s", ua_event_reg_str(ev)); break; case UA_EVENT_CALL_RINGING: + play = mem_deref(play); + (void)play_file(&play, player, "ringback.wav", -1); re_snprintf(event_buf, sizeof event_buf, "%s", "call ringing"); break; case UA_EVENT_CALL_PROGRESS: re_snprintf(event_buf, sizeof event_buf, "%s", "call progress"); break; case UA_EVENT_CALL_ESTABLISHED: + play = mem_deref(play); re_snprintf(event_buf, sizeof event_buf, "%s", "call established"); break; case UA_EVENT_CALL_INCOMING: + uag_current_set(ua); + play = mem_deref(play); + if (list_count(ua_calls(ua)) > 1) { + (void)play_file(&play, player, "callwaiting.wav", 3); + } + else { + (void)play_file(&play, player, "ring.wav", -1); + } re_snprintf(event_buf, sizeof event_buf, "%s", "call incoming"); break; case UA_EVENT_CALL_MENC: @@ -110,6 +136,14 @@ static void ua_event_handler(struct ua *ua, enum ua_event ev, re_snprintf(event_buf, sizeof event_buf, "%s", "unknown menc event"); break; case UA_EVENT_CALL_CLOSED: + play = mem_deref(play); + if (call_scode(call)) { + const char *tone; + tone = translate_errorcode(call_scode(call)); + if (tone) { + (void)play_file(&play, player, tone, 1); + } + } re_snprintf(event_buf, sizeof event_buf, "%s", "call closed"); break; case UA_EVENT_EXIT: