diff --git a/CHANGES b/CHANGES index 112efa79aa42cc3ab89e3647879c0d7397ca85bf..c6957d3e07eba58ce7f0f0db44222022cd132e6f 100644 --- a/CHANGES +++ b/CHANGES @@ -182,6 +182,13 @@ res_config_pgsql for res_config_pgsql via the dbappname configuration setting in res_pgsql.conf. +MixMonitor +------------------ + * New options to play a beep when starting a recording and stopping a recording + have been added. The option "p" will play a beep to the channel that starts + the recording. The option "P" will play a beep to the channel that stops the + recording. + ------------------------------------------------------------------------------ --- Functionality changes from Asterisk 12.4.0 to Asterisk 12.5.0 ------------ ------------------------------------------------------------------------------ @@ -367,7 +374,6 @@ MixMonitor * A new option, B(), has been added that will turn on a periodic beep while the call is being recorded. - Channel Drivers ------------------------- diff --git a/apps/app_mixmonitor.c b/apps/app_mixmonitor.c index 1e7833ceac608468d313db42bb4185e7ef41c00d..52128942ab4a0bbefe91f3d93dd5accc2283fd74 100644 --- a/apps/app_mixmonitor.c +++ b/apps/app_mixmonitor.c @@ -120,6 +120,12 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") <argument name="chanvar" required="true" /> <para>Stores the MixMonitor's ID on this channel variable.</para> </option> + <option name="p"> + <para>Play a beep on the channel that starts the recording.</para> + </option> + <option name="P"> + <para>Play a beep on the channel that stops the recording.</para> + </option> <option name="m"> <argument name="mailbox" required="true" /> <para>Create a copy of the recording as a voicemail in the indicated <emphasis>mailbox</emphasis>(es) @@ -326,6 +332,8 @@ enum mixmonitor_flags { MUXFLAG_UID = (1 << 9), MUXFLAG_VMRECIPIENTS = (1 << 10), MUXFLAG_BEEP = (1 << 11), + MUXFLAG_BEEP_START = (1 << 12), + MUXFLAG_BEEP_STOP = (1 << 13) }; enum mixmonitor_args { @@ -344,6 +352,8 @@ AST_APP_OPTIONS(mixmonitor_opts, { AST_APP_OPTION('a', MUXFLAG_APPEND), AST_APP_OPTION('b', MUXFLAG_BRIDGED), AST_APP_OPTION_ARG('B', MUXFLAG_BEEP, OPT_ARG_BEEP_INTERVAL), + AST_APP_OPTION('p', MUXFLAG_BEEP_START), + AST_APP_OPTION('P', MUXFLAG_BEEP_STOP), AST_APP_OPTION_ARG('v', MUXFLAG_READVOLUME, OPT_ARG_READVOLUME), AST_APP_OPTION_ARG('V', MUXFLAG_WRITEVOLUME, OPT_ARG_WRITEVOLUME), AST_APP_OPTION_ARG('W', MUXFLAG_VOLUME, OPT_ARG_VOLUME), @@ -733,6 +743,11 @@ static void *mixmonitor_thread(void *obj) "File: %s\r\n", ast_channel_name(mixmonitor->autochan->chan), mixmonitor->filename); + ast_channel_lock(mixmonitor->autochan->chan); + if (ast_test_flag(mixmonitor, MUXFLAG_BEEP_STOP)) { + ast_stream_and_wait(mixmonitor->autochan->chan, "beep", ""); + } + ast_channel_unlock(mixmonitor->autochan->chan); ast_audiohook_unlock(&mixmonitor->audiohook); @@ -805,6 +820,11 @@ static int setup_mixmonitor_ds(struct mixmonitor *mixmonitor, struct ast_channel return -1; } + ast_channel_lock(mixmonitor->autochan->chan); + if (ast_test_flag(mixmonitor, MUXFLAG_BEEP_START)) { + ast_stream_and_wait(mixmonitor->autochan->chan, "beep", ""); + } + ast_channel_unlock(mixmonitor->autochan->chan); mixmonitor_ds->samp_rate = 8000; mixmonitor_ds->audiohook = &mixmonitor->audiohook; @@ -1164,6 +1184,7 @@ static int stop_mixmonitor_full(struct ast_channel *chan, const char *data) if (!ast_channel_datastore_remove(chan, datastore)) { ast_datastore_free(datastore); } + ast_channel_unlock(chan); if (!ast_strlen_zero(beep_id)) {