From 8e8cf80cea37effcfdc8c82429341f33721a2ee8 Mon Sep 17 00:00:00 2001 From: Richard Mudgett Date: Fri, 25 Mar 2016 23:19:22 -0500 Subject: res_parking: Fix blind transfer dynamic lots creation. Blind transfers to a recognized parking extension need to use the parker's channel variable values to create the dynamic parking lot. This is because there is always only one parker while the parkee may actually be a multi-party bridge. A multi-party bridge can never supply the needed channel variables to create the dynamic parking lot. In the multi-party bridge blind transfer scenario, the parker's CHANNEL(parkinglot) value and channel variables are inherited by the local channel used to park the bridge. * In park_common_setup(), make use the parker instead of the parkee to supply the dynamic parking lot channel variable values. In all but one case, the parkee is the same as the parker. However, in the recognized parking extension blind transfer scenario for a two party bridge they are different channels. For consistency, we need to use the parker channel. * In park_local_transfer(), pass the CHANNEL(parkinglot) value to the local channel when blind transferring a multi-party bridge to a recognized parking extension. * When a local channel starts a call, the Local;2 side needs to inherit the CHANNEL(parkinglot) value from Local;1. The DTMF one-touch parking case wasn't even trying to create dynamic parking lots before it aborted the attempt. * In parking_park_call(), add missing code to create a dynamic parking lot. A DTMF bridge hook is documented as returning -1 to remove the hook. Though the hook caller is really coded to accept non-zero. See the ast_bridge_hook_callback typedef. * In feature_park_call(), don't remove the DTMF one-touch parking hook because of an error. ASTERISK-24605 #close Reported by: Philip Correia Patches: call_park.patch (license #6672) patch uploaded by Philip Correia Change-Id: I221d3a8fcc181877a1158d17004474d35d8016c9 --- res/parking/parking_applications.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'res/parking/parking_applications.c') diff --git a/res/parking/parking_applications.c b/res/parking/parking_applications.c index 0a0ea3c4b..7dd535991 100644 --- a/res/parking/parking_applications.c +++ b/res/parking/parking_applications.c @@ -455,7 +455,7 @@ struct ast_bridge *park_common_setup(struct ast_channel *parkee, struct ast_chan lot = parking_lot_find_by_name(lot_name); if (!lot) { - lot = parking_create_dynamic_lot(lot_name, parkee); + lot = parking_create_dynamic_lot(lot_name, parker); } if (!lot) { -- cgit v1.2.3