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:
parent
881a3f2306
commit
80bc844fd6
|
@ -82,6 +82,9 @@ directory=moh
|
|||
; ; in alphabetical order. If 'randstart', the files are sorted
|
||||
; ; in alphabetical order as well, but the first file is chosen
|
||||
; ; at random. If unspecified, the sort order is undefined.
|
||||
;answeredonly=yes ; Only allow answered channels to have music on hold.
|
||||
; Enabling this will prevent MOH on unanswered channels.
|
||||
; (default: "no")
|
||||
|
||||
;[native-alphabetical]
|
||||
;mode=files
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
Subject: res_musiconhold_answeredonly
|
||||
|
||||
This change adds an option, answeredonly, that will prevent music
|
||||
on hold on channels that are not answered.
|
|
@ -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")) {
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue