From 14fba8d8bedbf13ca8970c312584fbff2d272191 Mon Sep 17 00:00:00 2001 From: Mark Spencer Date: Wed, 27 Apr 2005 03:58:40 +0000 Subject: Add option to park in the next slot (bug #4028) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5512 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- configs/features.conf.sample | 1 + res/res_features.c | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/configs/features.conf.sample b/configs/features.conf.sample index b5d8399b0..688814d09 100755 --- a/configs/features.conf.sample +++ b/configs/features.conf.sample @@ -14,6 +14,7 @@ context => parkedcalls ; Which context parked calls are in ;xfersound = beep ; to indicate an attended transfer is complete ;xferfailsound = beeperr ; to indicate a failed transfer ;adsipark = yes ; if you want ADSI parking announcements +;findslot => next ; Continue to the 'next' parking space. Defaults to 'first' available ;pickupexten = *8 ; Configure the pickup extension. Default is *8 ;featuredigittimeout = 500 ; Max time (ms) between digits for ; feature activation. Default is 500 diff --git a/res/res_features.c b/res/res_features.c index 6f404ca25..99874a8b4 100755 --- a/res/res_features.c +++ b/res/res_features.c @@ -70,6 +70,10 @@ static int parking_start = 701; /* Last available extension for parking */ static int parking_stop = 750; +static int parking_offset = 0; + +static int parkfindnext = 0; + static int adsipark = 0; static int transferdigittimeout = DEFAULT_TRANSFER_DIGIT_TIMEOUT; @@ -240,14 +244,16 @@ int ast_park_call(struct ast_channel *chan, struct ast_channel *peer, int timeou /* We put the user in the parking list, then wake up the parking thread to be sure it looks after these channels too */ struct parkeduser *pu, *cur; - int x; + int i,x,parking_range; char exten[AST_MAX_EXTENSION]; struct ast_context *con; pu = malloc(sizeof(struct parkeduser)); if (pu) { memset(pu,0,sizeof(struct parkeduser)); ast_mutex_lock(&parking_lock); - for (x=parking_start;x<=parking_stop;x++) { + parking_range=parking_stop-parking_start+1; + for (i=0;iparkingnum == x) @@ -257,7 +263,9 @@ int ast_park_call(struct ast_channel *chan, struct ast_channel *peer, int timeou if (!cur) break; } - if (x <= parking_stop) { + + if (i < parking_range) { + if (parkfindnext) parking_offset=x-parking_start+1; chan->appl = "Parked Call"; chan->data = NULL; @@ -1569,6 +1577,8 @@ static int load_config(void) parking_start = start; parking_stop = end; } + } else if (!strcasecmp(var->name, "findslot")) { + parkfindnext = (!strcasecmp(var->value, "next")); } else if (!strcasecmp(var->name, "adsipark")) { adsipark = ast_true(var->value); } else if (!strcasecmp(var->name, "transferdigittimeout")) { -- cgit v1.2.3