res_musiconhold: Add option to not play music on hold on unanswered channels

This change adds an option, answeredonly, that will prevent music on
hold on channels that are not answered.

ASTERISK-30135

Change-Id: I1ab0defa43a29a26ae39f94c623596cf90fddc08
This commit is contained in:
sungtae kim
2022-08-14 01:32:06 +09:00
committed by Friendly Automation
parent 31b3addce7
commit fc63688e3b
3 changed files with 16 additions and 0 deletions

View File

@@ -193,6 +193,8 @@ struct mohclass {
unsigned int delete:1;
AST_LIST_HEAD_NOLOCK(, mohdata) members;
AST_LIST_ENTRY(mohclass) list;
/*!< Play the moh if the channel answered */
int answeredonly;
};
struct mohdata {
@@ -1193,6 +1195,8 @@ static void moh_parse_options(struct ast_variable *var, struct mohclass *mohclas
ast_log(LOG_WARNING, "kill_method '%s' is invalid. Setting to 'process_group'\n", var->value);
mohclass->kill_method = KILL_METHOD_PROCESS_GROUP;
}
} else if (!strcasecmp(var->name, "answeredonly")) {
mohclass->answeredonly = ast_true(var->value) ? 1: 0;
}
}
@@ -1835,6 +1839,11 @@ static int local_ast_moh_start(struct ast_channel *chan, const char *mclass, con
return -1;
}
if (mohclass->answeredonly && (ast_channel_state(chan) != AST_STATE_UP)) {
ast_verb(3, "The channel '%s' is not answered yet. Ignore the moh request.\n", ast_channel_name(chan));
return -1;
}
/* If we are using a cached realtime class with files, re-scan the files */
if (!var && ast_test_flag(global_flags, MOH_CACHERTCLASSES) && mohclass->realtime && !strcasecmp(mohclass->mode, "files")) {
/*