diff --git a/channel.c b/channel.c index 1f3848ae4b..464e15c026 100755 --- a/channel.c +++ b/channel.c @@ -2464,19 +2464,23 @@ int ast_channel_bridge(struct ast_channel *c0, struct ast_channel *c1, struct as struct ast_channel *who = NULL; int res=0; int nativefailed=0; + int firstpass; struct timeval start_time,precise_now; long elapsed_ms=0, time_left_ms=0; int playit=0, playitagain=1, first_time=1; flags = (config->allowdisconnect_out||config->allowredirect_out ? AST_BRIDGE_DTMF_CHANNEL_0 : 0) + (config->allowdisconnect_in||config->allowredirect_in ? AST_BRIDGE_DTMF_CHANNEL_1 : 0); + firstpass = config->firstpass; + config->firstpass = 0; + /* timestamp */ gettimeofday(&start_time,NULL); time_left_ms = config->timelimit; - if (config->play_to_caller && config->start_sound) + if (config->play_to_caller && config->start_sound && firstpass) bridge_playfile(c0,c1,config->start_sound,time_left_ms / 1000); - if (config->play_to_callee && config->start_sound) + if (config->play_to_callee && config->start_sound && firstpass) bridge_playfile(c1,c0,config->start_sound,time_left_ms / 1000); /* Stop if we're a zombie or need a soft hangup */ diff --git a/include/asterisk/channel.h b/include/asterisk/channel.h index b12121947e..5eb25dabb7 100755 --- a/include/asterisk/channel.h +++ b/include/asterisk/channel.h @@ -279,6 +279,7 @@ struct ast_bridge_config { char *warning_sound; char *end_sound; char *start_sound; + int firstpass; }; struct chanmon; diff --git a/res/res_features.c b/res/res_features.c index 67042062c4..669060c888 100755 --- a/res/res_features.c +++ b/res/res_features.c @@ -274,6 +274,7 @@ int ast_bridge_call(struct ast_channel *chan,struct ast_channel *peer,struct ast allowdisconnect_out = config->allowdisconnect_out; allowredirect_in = config->allowredirect_in; allowredirect_out = config->allowredirect_out; + config->firstpass = 1; /* Answer if need be */ if (ast_answer(chan))