@ -327,9 +327,10 @@ AST_APP_OPTIONS(dial_exec_options, BEGIN_OPTIONS
AST_APP_OPTION ( ' X ' , OPT_CALLER_MIXMONITOR ) ,
AST_APP_OPTION ( ' X ' , OPT_CALLER_MIXMONITOR ) ,
END_OPTIONS ) ;
END_OPTIONS ) ;
# define CAN_EARLY_BRIDGE(flags ) (!ast_test_flag64(flags, OPT_CALLEE_HANGUP | \
# define CAN_EARLY_BRIDGE(flags ,chan,peer ) (!ast_test_flag64(flags, OPT_CALLEE_HANGUP | \
OPT_CALLER_HANGUP | OPT_CALLEE_TRANSFER | OPT_CALLER_TRANSFER | \
OPT_CALLER_HANGUP | OPT_CALLEE_TRANSFER | OPT_CALLER_TRANSFER | \
OPT_CALLEE_MONITOR | OPT_CALLER_MONITOR | OPT_CALLEE_PARK | OPT_CALLER_PARK ) )
OPT_CALLEE_MONITOR | OPT_CALLER_MONITOR | OPT_CALLEE_PARK | OPT_CALLER_PARK ) & & \
! chan - > audiohooks & & ! peer - > audiohooks )
/*
/*
* The list of active channels
* The list of active channels
@ -680,7 +681,7 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in,
DIAL_NOFORWARDHTML ) ;
DIAL_NOFORWARDHTML ) ;
ast_string_field_set ( c , dialcontext , " " ) ;
ast_string_field_set ( c , dialcontext , " " ) ;
ast_copy_string ( c - > exten , " " , sizeof ( c - > exten ) ) ;
ast_copy_string ( c - > exten , " " , sizeof ( c - > exten ) ) ;
if ( CAN_EARLY_BRIDGE ( peerflags ))
if ( CAN_EARLY_BRIDGE ( peerflags , in , peer ))
/* Setup early bridge if appropriate */
/* Setup early bridge if appropriate */
ast_channel_early_bridge ( in , peer ) ;
ast_channel_early_bridge ( in , peer ) ;
}
}
@ -707,7 +708,7 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in,
case AST_CONTROL_RINGING :
case AST_CONTROL_RINGING :
ast_verb ( 3 , " %s is ringing \n " , c - > name ) ;
ast_verb ( 3 , " %s is ringing \n " , c - > name ) ;
/* Setup early media if appropriate */
/* Setup early media if appropriate */
if ( single & & CAN_EARLY_BRIDGE ( peerflags ))
if ( single & & CAN_EARLY_BRIDGE ( peerflags , in , c ))
ast_channel_early_bridge ( in , c ) ;
ast_channel_early_bridge ( in , c ) ;
if ( ! ( pa - > sentringing ) & & ! ast_test_flag64 ( outgoing , OPT_MUSICBACK ) ) {
if ( ! ( pa - > sentringing ) & & ! ast_test_flag64 ( outgoing , OPT_MUSICBACK ) ) {
ast_indicate ( in , AST_CONTROL_RINGING ) ;
ast_indicate ( in , AST_CONTROL_RINGING ) ;
@ -717,7 +718,7 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in,
case AST_CONTROL_PROGRESS :
case AST_CONTROL_PROGRESS :
ast_verb ( 3 , " %s is making progress passing it to %s \n " , c - > name , in - > name ) ;
ast_verb ( 3 , " %s is making progress passing it to %s \n " , c - > name , in - > name ) ;
/* Setup early media if appropriate */
/* Setup early media if appropriate */
if ( single & & CAN_EARLY_BRIDGE ( peerflags ))
if ( single & & CAN_EARLY_BRIDGE ( peerflags , in , c ))
ast_channel_early_bridge ( in , c ) ;
ast_channel_early_bridge ( in , c ) ;
if ( ! ast_test_flag64 ( outgoing , OPT_RINGBACK ) )
if ( ! ast_test_flag64 ( outgoing , OPT_RINGBACK ) )
ast_indicate ( in , AST_CONTROL_PROGRESS ) ;
ast_indicate ( in , AST_CONTROL_PROGRESS ) ;
@ -732,7 +733,7 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in,
break ;
break ;
case AST_CONTROL_PROCEEDING :
case AST_CONTROL_PROCEEDING :
ast_verb ( 3 , " %s is proceeding passing it to %s \n " , c - > name , in - > name ) ;
ast_verb ( 3 , " %s is proceeding passing it to %s \n " , c - > name , in - > name ) ;
if ( single & & CAN_EARLY_BRIDGE ( peerflags ))
if ( single & & CAN_EARLY_BRIDGE ( peerflags , in , c ))
ast_channel_early_bridge ( in , c ) ;
ast_channel_early_bridge ( in , c ) ;
if ( ! ast_test_flag64 ( outgoing , OPT_RINGBACK ) )
if ( ! ast_test_flag64 ( outgoing , OPT_RINGBACK ) )
ast_indicate ( in , AST_CONTROL_PROCEEDING ) ;
ast_indicate ( in , AST_CONTROL_PROCEEDING ) ;