summaryrefslogtreecommitdiff
path: root/res
diff options
context:
space:
mode:
authorMark Spencer <markster@digium.com>2005-04-27 03:58:40 +0000
committerMark Spencer <markster@digium.com>2005-04-27 03:58:40 +0000
commit14fba8d8bedbf13ca8970c312584fbff2d272191 (patch)
treeffe863519aabec6e5b7d7300138322bd4d657932 /res
parent0fe9884e0b548e48824a50e738a8b81b157b80a6 (diff)
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
Diffstat (limited to 'res')
-rwxr-xr-xres/res_features.c16
1 files changed, 13 insertions, 3 deletions
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;i<parking_range;i++) {
+ x=(i+parking_offset)%parking_range + parking_start;
cur = parkinglot;
while(cur) {
if (cur->parkingnum == 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")) {