res_parking: Fail gracefully if parking lot is full.

Currently, if a parking lot is full, bridge setup returns -1,
causing dialplan execution to terminate without TryExec.
However, such failures should be handled more gracefully,
the same way they are on other paths, as indicated by the
module's author, here:

http://lists.digium.com/pipermail/asterisk-dev/2018-December/077144.html

Now, callers will hear the parking failure announcement, and dialplan
will continue, which is consistent with existing failure modes.

Resolves: #624
This commit is contained in:
Naveen Albert 2024-03-03 13:37:10 -05:00 committed by asterisk-org-access-app[bot]
parent d2b6248196
commit 786f45d94e
1 changed files with 7 additions and 6 deletions

View File

@ -567,7 +567,7 @@ static int park_app_exec(struct ast_channel *chan, const char *data)
RAII_VAR(struct ast_bridge *, parking_bridge, NULL, ao2_cleanup);
struct ast_bridge_features chan_features;
int res;
int res = 0;
int silence_announcements = 0;
int blind_transfer;
@ -591,15 +591,16 @@ static int park_app_exec(struct ast_channel *chan, const char *data)
/* Initialize bridge features for the channel. */
res = ast_bridge_features_init(&chan_features);
if (res) {
/* Now for the fun part... park it! */
if (res || ast_bridge_join(parking_bridge, chan, NULL, &chan_features, NULL, 0)) {
if (!silence_announcements && !blind_transfer) {
ast_stream_and_wait(chan, "pbx-parkingfailed", "");
}
ast_bridge_features_cleanup(&chan_features);
publish_parked_call_failure(chan);
return -1;
return res;
}
/* Now for the fun part... park it! */
ast_bridge_join(parking_bridge, chan, NULL, &chan_features, NULL, 0);
/*
* If the bridge was broken for a hangup that isn't real, then
* don't run the h extension, because the channel isn't really