From: Roel van Meer Date: Mon, 29 Jun 2026 14:58:12 +0000 (+0200) Subject: bridging: Add support for TOUCH_MIXMONITOR_OPTIONS X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=HEAD;p=thirdparty%2Fasterisk.git bridging: Add support for TOUCH_MIXMONITOR_OPTIONS This channel variable can be used to override the default automixmon options (which are 'b' or 'bB()'). If both TOUCH_MIXMONITOR_OPTIONS and TOUCH_MIXMONITOR_BEEP are set, TOUCH_MIXMONITOR_BEEP is ignored with a warning. It is the responsibility of the user to configure valid options in TOUCH_MIXMONITOR_OPTIONS. Fixes: #1981 UserNote: The TOUCH_MIXMONITOR_OPTIONS channel variable can now be used to configure the options used by the mixmonitor application when it is started via automixmon. If both TOUCH_MIXMONITOR_OPTIONS and TOUCH_MIXMONITOR_BEEP are set, TOUCH_MIXMONITOR_BEEP is ignored with a warning. --- diff --git a/bridges/bridge_builtin_features.c b/bridges/bridge_builtin_features.c index a5b2330fa0..284d00e6b6 100644 --- a/bridges/bridge_builtin_features.c +++ b/bridges/bridge_builtin_features.c @@ -77,13 +77,14 @@ static void set_touch_variable(enum set_touch_variables_res *res, struct ast_cha } } -static enum set_touch_variables_res set_touch_variables(struct ast_channel *chan, char **touch_format, char **touch_monitor, char **touch_monitor_prefix, char **touch_monitor_beep) +static enum set_touch_variables_res set_touch_variables(struct ast_channel *chan, char **touch_format, char **touch_monitor, char **touch_monitor_prefix, char **touch_monitor_beep, char **touch_monitor_options) { enum set_touch_variables_res res = SET_TOUCH_UNSET; const char *var_format; const char *var_monitor; const char *var_prefix; const char *var_beep; + const char *var_options; SCOPED_CHANNELLOCK(lock, chan); @@ -91,11 +92,13 @@ static enum set_touch_variables_res set_touch_variables(struct ast_channel *chan var_monitor = "TOUCH_MIXMONITOR"; var_prefix = "TOUCH_MIXMONITOR_PREFIX"; var_beep = "TOUCH_MIXMONITOR_BEEP"; + var_options = "TOUCH_MIXMONITOR_OPTIONS"; set_touch_variable(&res, chan, var_format, touch_format); set_touch_variable(&res, chan, var_monitor, touch_monitor); set_touch_variable(&res, chan, var_prefix, touch_monitor_prefix); set_touch_variable(&res, chan, var_beep, touch_monitor_beep); + set_touch_variable(&res, chan, var_options, touch_monitor_options); return res; } @@ -135,15 +138,16 @@ static void start_automixmonitor(struct ast_bridge_channel *bridge_channel, stru RAII_VAR(char *, touch_monitor, NULL, ast_free); RAII_VAR(char *, touch_monitor_prefix, NULL, ast_free); RAII_VAR(char *, touch_monitor_beep, NULL, ast_free); + RAII_VAR(char *, touch_monitor_options, NULL, ast_free); set_touch_res = set_touch_variables(bridge_channel->chan, &touch_format, - &touch_monitor, &touch_monitor_prefix, &touch_monitor_beep); + &touch_monitor, &touch_monitor_prefix, &touch_monitor_beep, &touch_monitor_options); switch (set_touch_res) { case SET_TOUCH_SUCCESS: break; case SET_TOUCH_UNSET: set_touch_res = set_touch_variables(peer_chan, &touch_format, &touch_monitor, - &touch_monitor_prefix, &touch_monitor_beep); + &touch_monitor_prefix, &touch_monitor_beep, &touch_monitor_options); if (set_touch_res == SET_TOUCH_ALLOC_FAILURE) { return; } @@ -201,6 +205,13 @@ static void start_automixmonitor(struct ast_bridge_channel *bridge_channel, stru snprintf(mix_options, sizeof(mix_options), "bB(%d)", interval); } + if (!ast_strlen_zero(touch_monitor_options)) { + snprintf(mix_options, sizeof(mix_options), "%s", touch_monitor_options); + if (!ast_strlen_zero(touch_monitor_beep)) { + ast_log(LOG_WARNING, "Both TOUCH_MIXMONITOR_BEEP and TOUCH_MIXMONITOR_OPTIONS are set. Ignoring TOUCH_MIXMONITOR_BEEP.\n"); + } + } + if (ast_start_mixmonitor(peer_chan, touch_filename, mix_options)) { ast_verb(4, "AutoMixMonitor feature was tried by '%s' but MixMonitor failed to start.\n", ast_channel_name(bridge_channel->chan)); diff --git a/main/features_config.c b/main/features_config.c index cd044e2429..fa86ef4b48 100644 --- a/main/features_config.c +++ b/main/features_config.c @@ -270,6 +270,10 @@ To play a periodic beep while this call is being recorded, set the TOUCH_MIXMONITOR_BEEP to the interval in seconds. The interval will default to 15 seconds if invalid. The minimum interval is 5 seconds. + To override the default MixMonitor options b, the + TOUCH_MIXMONITOR_OPTIONS channel variable can be used. If both + TOUCH_MIXMONITOR_BEEP and TOUCH_MIXMONITOR_OPTIONS are set, the + TOUCH_MIXMONITOR_OPTIONS will take precedence.