From: Daniel Golle <daniel@makrotopia.org> Date: Wed, 21 Jul 2021 13:17:09 +0000 (+0100) Subject: asterisk: update to version 18.5.0 and backport patch X-Git-Url: http://git.openwrt.org/?a=commitdiff_plain;h=20e8c3b2d9150ed0bba02cfeb2e22e7c43e366c8;p=feed%2Ftelephony.git asterisk: update to version 18.5.0 and backport patch Update to upstream version 18.5.0 and backport commit[1] completing the announcements in Dial command to behave like it is stated in the documenation[2]. [1]: https://github.com/asterisk/asterisk/commit/1e5a2cfe3037823b17dd4ac47b071f02d6f9825f [2]: https://wiki.asterisk.org/wiki/display/AST/Asterisk+18+Application_Dial Signed-off-by: Daniel Golle <daniel@makrotopia.org> --- diff --git a/net/asterisk/Makefile b/net/asterisk/Makefile index 269cd25..9348c8b 100644 --- a/net/asterisk/Makefile +++ b/net/asterisk/Makefile @@ -8,12 +8,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=asterisk -PKG_VERSION:=18.4.0 +PKG_VERSION:=18.5.0 PKG_RELEASE:=1 PKG_SOURCE:=asterisk-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://downloads.asterisk.org/pub/telephony/asterisk/releases -PKG_HASH:=91c0c35a0c53097647ab3e7b29d34dd0861fed0a8d52e3617408e9eced404db1 +PKG_HASH:=6266a2542ae50225fadf0a3eebb1d11e74b1d1d5cd767cd7b4ff4e65568e8f35 PKG_BUILD_DEPENDS:=libxml2/host diff --git a/net/asterisk/patches/090-app_dial-expanded-A-option-to-add-caller-announcement.patch b/net/asterisk/patches/090-app_dial-expanded-A-option-to-add-caller-announcement.patch new file mode 100644 index 0000000..bd20730 --- /dev/null +++ b/net/asterisk/patches/090-app_dial-expanded-A-option-to-add-caller-announcement.patch @@ -0,0 +1,147 @@ +From 1e5a2cfe3037823b17dd4ac47b071f02d6f9825f Mon Sep 17 00:00:00 2001 +From: Naveen Albert <mail@interlinked.x10host.com> +Date: Fri, 21 May 2021 20:08:58 -0400 +Subject: [PATCH] app_dial: Expanded A option to add caller announcement + +Hitherto, the A option has made it possible to play +audio upon answer to the called party only. This option +is expanded to allow for playback of an audio file to +the caller instead of or in addition to the audio +played to the answerer. + +ASTERISK-29442 + +Change-Id: If6eed3ff5c341dc8c588c8210987f2571e891e5e +--- + apps/app_dial.c | 79 +++++++++++++++---- + doc/CHANGES-staging/app_dial_announcement.txt | 6 ++ + 2 files changed, 68 insertions(+), 17 deletions(-) + create mode 100644 doc/CHANGES-staging/app_dial_announcement.txt + +--- a/apps/app_dial.c ++++ b/apps/app_dial.c +@@ -93,11 +93,17 @@ + </parameter> + <parameter name="options" required="false"> + <optionlist> +- <option name="A"> +- <argument name="x" required="true"> ++ <option name="A" argsep=":"> ++ <argument name="x"> + <para>The file to play to the called party</para> + </argument> +- <para>Play an announcement to the called party, where <replaceable>x</replaceable> is the prompt to be played</para> ++ <argument name="y"> ++ <para>The file to play to the calling party</para> ++ </argument> ++ <para>Play an announcement to the called and/or calling parties, where <replaceable>x</replaceable> ++ is the prompt to be played to the called party and <replaceable>y</replaceable> is the prompt ++ to be played to the caller. The files may be different and will be played to each party ++ simultaneously.</para> + </option> + <option name="a"> + <para>Immediately answer the calling channel when the called channel answers in +@@ -2941,33 +2947,71 @@ static int dial_exec_full(struct ast_cha + int digit = 0; + struct ast_channel *chans[2]; + struct ast_channel *active_chan; ++ char *calledfile = NULL, *callerfile = NULL; ++ int calledstream = 0, callerstream = 0; + + chans[0] = chan; + chans[1] = peer; + +- /* we need to stream the announcement to the called party when the OPT_ARG_ANNOUNCE (-A) is setted */ +- +- /* stream the file */ +- res = ast_streamfile(peer, opt_args[OPT_ARG_ANNOUNCE], ast_channel_language(peer)); +- if (res) { +- res = 0; +- ast_log(LOG_ERROR, "error streaming file '%s' to callee\n", opt_args[OPT_ARG_ANNOUNCE]); ++ /* we need to stream the announcement(s) when the OPT_ARG_ANNOUNCE (-A) is set */ ++ callerfile = opt_args[OPT_ARG_ANNOUNCE]; ++ calledfile = strsep(&callerfile, ":"); ++ ++ /* stream the file(s) */ ++ if (!ast_strlen_zero(calledfile)) { ++ res = ast_streamfile(peer, calledfile, ast_channel_language(peer)); ++ if (res) { ++ res = 0; ++ ast_log(LOG_ERROR, "error streaming file '%s' to callee\n", calledfile); ++ } else { ++ calledstream = 1; ++ } ++ } ++ if (!ast_strlen_zero(callerfile)) { ++ res = ast_streamfile(chan, callerfile, ast_channel_language(chan)); ++ if (res) { ++ res = 0; ++ ast_log(LOG_ERROR, "error streaming file '%s' to caller\n", callerfile); ++ } else { ++ callerstream = 1; ++ } + } + ++ /* can't use ast_waitstream, because we're streaming two files at once, and can't block ++ We'll need to handle both channels at once. */ ++ + ast_channel_set_flag(peer, AST_FLAG_END_DTMF_ONLY); +- while (ast_channel_stream(peer)) { +- int ms; ++ while (ast_channel_stream(peer) || ast_channel_stream(chan)) { ++ int mspeer, mschan; + +- ms = ast_sched_wait(ast_channel_sched(peer)); ++ mspeer = ast_sched_wait(ast_channel_sched(peer)); ++ mschan = ast_sched_wait(ast_channel_sched(chan)); + +- if (ms < 0 && !ast_channel_timingfunc(peer)) { +- ast_stopstream(peer); ++ if (calledstream) { ++ if (mspeer < 0 && !ast_channel_timingfunc(peer)) { ++ ast_stopstream(peer); ++ calledstream = 0; ++ } ++ } ++ if (callerstream) { ++ if (mschan < 0 && !ast_channel_timingfunc(chan)) { ++ ast_stopstream(chan); ++ callerstream = 0; ++ } ++ } ++ ++ if (!calledstream && !callerstream) { + break; + } +- if (ms < 0) +- ms = 1000; + +- active_chan = ast_waitfor_n(chans, 2, &ms); ++ if (mspeer < 0) ++ mspeer = 1000; ++ ++ if (mschan < 0) ++ mschan = 1000; ++ ++ /* wait for the lowest maximum of the two */ ++ active_chan = ast_waitfor_n(chans, 2, (mspeer > mschan ? &mschan : &mspeer)); + if (active_chan) { + struct ast_channel *other_chan; + struct ast_frame *fr = ast_read(active_chan); +@@ -3017,6 +3061,7 @@ static int dial_exec_full(struct ast_cha + ast_frfree(fr); + } + ast_sched_runq(ast_channel_sched(peer)); ++ ast_sched_runq(ast_channel_sched(chan)); + } + ast_channel_clear_flag(peer, AST_FLAG_END_DTMF_ONLY); + } +--- /dev/null ++++ b/doc/CHANGES-staging/app_dial_announcement.txt +@@ -0,0 +1,6 @@ ++Subject: app_dial announcement option ++ ++The A option for Dial now supports ++playing audio to the caller as well ++as the called party. ++