holding_bridge: ensure moh participants get frames

Currently, if a blank musiconhold.conf is used, musiconhold will fail
to start for a channel going into a holding bridge with an anticipation
of getting music on hold. That being the case, no frames will be written
to the channel and that can pose a problem for blind transfers in PJSIP
which may rely on frames being written to get past the REFER framehook.
This patch makes holding bridges start a silence generator if starting
music on hold fails and makes it so that if no music on hold functions
are installed that the ast_moh_start function will report a failure so
that consumers of that function will be able to respond appropriately.

ASTERISK-25271 #close

Change-Id: I06f066728604943cba0bb0b39fa7cf658a21cd99
This commit is contained in:
Jonathan Rose
2015-07-16 12:16:25 -05:00
parent 5086bdacfb
commit 8458b8d441
2 changed files with 6 additions and 2 deletions

View File

@@ -205,7 +205,11 @@ static void participant_entertainment_start(struct ast_bridge_channel *bridge_ch
switch(hc->idle_mode) {
case IDLE_MODE_MOH:
moh_class = ast_bridge_channel_get_role_option(bridge_channel, "holding_participant", "moh_class");
ast_moh_start(bridge_channel->chan, moh_class, NULL);
if (ast_moh_start(bridge_channel->chan, moh_class, NULL)) {
ast_log(LOG_WARNING, "Failed to start moh, starting silence generator instead\n");
hc->idle_mode = IDLE_MODE_SILENCE;
hc->silence_generator = ast_channel_start_silence_generator(bridge_channel->chan);
}
break;
case IDLE_MODE_RINGING:
ast_indicate(bridge_channel->chan, AST_CONTROL_RINGING);