|
|
|
@ -4389,6 +4389,7 @@ enum ast_transfer_result ast_bridge_transfer_attended(struct ast_channel *to_tra
|
|
|
|
|
int do_bridge_transfer;
|
|
|
|
|
enum ast_transfer_result res;
|
|
|
|
|
const char *app = NULL;
|
|
|
|
|
int hangup_target = 0;
|
|
|
|
|
|
|
|
|
|
to_transferee_bridge = acquire_bridge(to_transferee);
|
|
|
|
|
to_target_bridge = acquire_bridge(to_transfer_target);
|
|
|
|
@ -4468,7 +4469,7 @@ enum ast_transfer_result ast_bridge_transfer_attended(struct ast_channel *to_tra
|
|
|
|
|
ast_bridge_unlock(to_transferee_bridge);
|
|
|
|
|
ast_bridge_unlock(to_target_bridge);
|
|
|
|
|
|
|
|
|
|
ast_softhangup(to_transfer_target, AST_SOFTHANGUP_DEV);
|
|
|
|
|
hangup_target = 1;
|
|
|
|
|
goto end;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -4511,6 +4512,11 @@ enum ast_transfer_result ast_bridge_transfer_attended(struct ast_channel *to_tra
|
|
|
|
|
set_transfer_variables_all(to_transferee, channels, 1);
|
|
|
|
|
|
|
|
|
|
if (do_bridge_transfer) {
|
|
|
|
|
/*
|
|
|
|
|
* Hang up the target if it was bridged. Note, if it is not bridged
|
|
|
|
|
* it is hung up during the masquerade.
|
|
|
|
|
*/
|
|
|
|
|
hangup_target = chan_bridged == to_transfer_target;
|
|
|
|
|
ast_bridge_lock(the_bridge);
|
|
|
|
|
res = attended_transfer_bridge(chan_bridged, chan_unbridged, the_bridge, NULL, transfer_msg);
|
|
|
|
|
ast_bridge_unlock(the_bridge);
|
|
|
|
@ -4534,6 +4540,10 @@ enum ast_transfer_result ast_bridge_transfer_attended(struct ast_channel *to_tra
|
|
|
|
|
res = AST_BRIDGE_TRANSFER_SUCCESS;
|
|
|
|
|
|
|
|
|
|
end:
|
|
|
|
|
if (res == AST_BRIDGE_TRANSFER_SUCCESS && hangup_target) {
|
|
|
|
|
ast_softhangup(to_transfer_target, AST_SOFTHANGUP_DEV);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
transfer_msg->result = res;
|
|
|
|
|
ast_bridge_publish_attended_transfer(transfer_msg);
|
|
|
|
|
return res;
|
|
|
|
|