From db03ae6c9ae3b8f375b358de42e4ca1b4389e929 Mon Sep 17 00:00:00 2001 From: Jonathan Rose Date: Tue, 29 Jan 2013 17:05:23 +0000 Subject: [PATCH] call_parking: Make sure fallbacks are used when lacking a flat channel exten A regression was introduced which removed automatic fallback behavior from the PBX. This behavior was used by call parking (or at least documented as how the feature works) in order to select an extension when the flat channel extension wasn't available from the comebackcontext. Parking now handles the fallbacks internally in order to keep behavior matching with how it is documented. (closes issue ASTERISK-20716) Reported by: Chris Gentle Review: https://reviewboard.asterisk.org/r/2296/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@380348 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/features.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/main/features.c b/main/features.c index 32e8070813..5b8fe0f022 100644 --- a/main/features.c +++ b/main/features.c @@ -5099,7 +5099,21 @@ static int manage_parked_call(struct parkeduser *pu, const struct pollfd *pfds, snprintf(parkingslot, sizeof(parkingslot), "%d", pu->parkingnum); pbx_builtin_setvar_helper(chan, "PARKINGSLOT", parkingslot); pbx_builtin_setvar_helper(chan, "PARKEDLOT", pu->parkinglot->name); - set_c_e_p(chan, pu->parkinglot->cfg.comebackcontext, peername_flat, 1); + + /* Handle fallback when extensions don't exist here since that logic was removed from pbx */ + if (ast_exists_extension(chan, pu->parkinglot->cfg.comebackcontext, peername_flat, 1, NULL)) { + set_c_e_p(chan, pu->parkinglot->cfg.comebackcontext, peername_flat, 1); + } else if (ast_exists_extension(chan, pu->parkinglot->cfg.comebackcontext, "s", 1, NULL)) { + ast_verb(2, "Can not start %s at %s,%s,1. Using 's@%s' instead.\n", ast_channel_name(chan), + pu->parkinglot->cfg.comebackcontext, peername_flat, pu->parkinglot->cfg.comebackcontext); + set_c_e_p(chan, pu->parkinglot->cfg.comebackcontext, "s", 1); + } else { + ast_verb(2, "Can not start %s at %s,%s,1 and exten 's@%s' does not exist. Using 's@default'\n", + ast_channel_name(chan), + pu->parkinglot->cfg.comebackcontext, peername_flat, + pu->parkinglot->cfg.comebackcontext); + set_c_e_p(chan, "default", "s", 1); + } } } else { /* -- 2.47.2