diff options
author | qwell <qwell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-01-04 22:57:56 +0000 |
---|---|---|
committer | qwell <qwell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-01-04 22:57:56 +0000 |
commit | 0d47bcbafd331049df636134795d7658609d328f (patch) | |
tree | 9e88a4b4d0ca494ba4e14cf8dbd1ec212dca55d2 /res | |
parent | 6f39b42d845ad9ad4d476a029ba5f9fbcec4fb80 (diff) |
Merged revisions 96573 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
(Closes issue #11237)
........
r96573 | qwell | 2008-01-04 16:55:56 -0600 (Fri, 04 Jan 2008) | 4 lines
Properly continue in the dialplan if using PARKINGEXTEN and the slot is full.
Issue 11237, patch by me.
........
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@96574 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'res')
-rw-r--r-- | res/res_features.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/res/res_features.c b/res/res_features.c index 8de1c1fea..44f413cd8 100644 --- a/res/res_features.c +++ b/res/res_features.c @@ -401,7 +401,7 @@ static int park_call_full(struct ast_channel *chan, struct ast_channel *peer, in AST_LIST_UNLOCK(&parkinglot); ast_free(pu); ast_log(LOG_WARNING, "Requested parking extension already exists: %s@%s\n", parkingexten, parking_con); - return 0; /* Continue execution if possible */ + return 1; /* Continue execution if possible */ } ast_copy_string(pu->parkingexten, parkingexten, sizeof(pu->parkingexten)); x = atoi(parkingexten); @@ -2352,10 +2352,15 @@ static int park_call_exec(struct ast_channel *chan, void *data) * of a park--it is still theoretically possible for a transfer to happen before * we get here, but it is _really_ unlikely */ char *orig_chan_name = ast_strdupa(chan->name); + char orig_exten[AST_MAX_EXTENSION]; + int orig_priority = chan->priority; + /* Data is unused at the moment but could contain a parking lot context eventually */ int res = 0; + ast_copy_string(orig_exten, chan->exten, sizeof(orig_exten)); + /* Setup the exten/priority to be s/1 since we don't know where this call should return */ strcpy(chan->exten, "s"); @@ -2367,10 +2372,18 @@ static int park_call_exec(struct ast_channel *chan, void *data) if (!res) res = ast_safe_sleep(chan, 1000); /* Park the call */ - if (!res) + if (!res) { res = park_call_full(chan, NULL, 0, NULL, orig_chan_name); + /* Continue on in the dialplan */ + if (res == 1) { + ast_copy_string(chan->exten, orig_exten, sizeof(chan->exten)); + chan->priority = orig_priority; + res = 0; + } else if (!res) + res = AST_PBX_KEEPALIVE; + } - return !res ? AST_PBX_KEEPALIVE : res; + return res; } /*! \brief Pickup parked call */ |