mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-30 10:33:13 +00:00
Properly continue in the dialplan if using PARKINGEXTEN and the slot is full.
Issue 11237, patch by me. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@96573 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -325,7 +325,7 @@ static int park_call_full(struct ast_channel *chan, struct ast_channel *peer, in
|
|||||||
ast_mutex_unlock(&parking_lock);
|
ast_mutex_unlock(&parking_lock);
|
||||||
free(pu);
|
free(pu);
|
||||||
ast_log(LOG_WARNING, "Requested parking extension already exists: %s@%s\n", parkingexten, parking_con);
|
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));
|
ast_copy_string(pu->parkingexten, parkingexten, sizeof(pu->parkingexten));
|
||||||
x = atoi(parkingexten);
|
x = atoi(parkingexten);
|
||||||
@@ -1811,6 +1811,9 @@ 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
|
* of a park--it is still theoretically possible for a transfer to happen before
|
||||||
* we get here, but it is _really_ unlikely */
|
* we get here, but it is _really_ unlikely */
|
||||||
char *orig_chan_name = ast_strdupa(chan->name);
|
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
|
/* Data is unused at the moment but could contain a parking
|
||||||
lot context eventually */
|
lot context eventually */
|
||||||
int res = 0;
|
int res = 0;
|
||||||
@@ -1818,6 +1821,8 @@ static int park_call_exec(struct ast_channel *chan, void *data)
|
|||||||
|
|
||||||
u = ast_module_user_add(chan);
|
u = ast_module_user_add(chan);
|
||||||
|
|
||||||
|
ast_copy_string(orig_exten, chan->exten, sizeof(orig_exten));
|
||||||
|
|
||||||
/* Setup the exten/priority to be s/1 since we don't know
|
/* Setup the exten/priority to be s/1 since we don't know
|
||||||
where this call should return */
|
where this call should return */
|
||||||
strcpy(chan->exten, "s");
|
strcpy(chan->exten, "s");
|
||||||
@@ -1829,12 +1834,20 @@ static int park_call_exec(struct ast_channel *chan, void *data)
|
|||||||
if (!res)
|
if (!res)
|
||||||
res = ast_safe_sleep(chan, 1000);
|
res = ast_safe_sleep(chan, 1000);
|
||||||
/* Park the call */
|
/* Park the call */
|
||||||
if (!res)
|
if (!res) {
|
||||||
res = park_call_full(chan, NULL, 0, NULL, orig_chan_name);
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
ast_module_user_remove(u);
|
ast_module_user_remove(u);
|
||||||
|
|
||||||
return !res ? AST_PBX_KEEPALIVE : res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! \brief Pickup parked call */
|
/*! \brief Pickup parked call */
|
||||||
|
Reference in New Issue
Block a user