summaryrefslogtreecommitdiff
path: root/res/parking/parking_applications.c
diff options
context:
space:
mode:
authorJonathan Rose <jrose@digium.com>2013-06-25 22:28:22 +0000
committerJonathan Rose <jrose@digium.com>2013-06-25 22:28:22 +0000
commit854c4c64fe2851312b1e13857dcd18e743e07594 (patch)
tree80d042e06f38f95d4f1fd2adc07658b2cbd46038 /res/parking/parking_applications.c
parent5b40420813318e08b9186d41aaf1d1aaff8d61e1 (diff)
res_parking: Add Parking manager action to the new parking system
(closes issue ASTERISK-21641) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/2573/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@392915 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'res/parking/parking_applications.c')
-rw-r--r--res/parking/parking_applications.c56
1 files changed, 31 insertions, 25 deletions
diff --git a/res/parking/parking_applications.c b/res/parking/parking_applications.c
index 097329b93..2b921259f 100644
--- a/res/parking/parking_applications.c
+++ b/res/parking/parking_applications.c
@@ -375,25 +375,13 @@ void get_park_common_datastore_data(struct ast_channel *parkee, char **parker_uu
ast_channel_unlock(parkee);
}
-struct ast_bridge *park_common_setup(struct ast_channel *parkee, struct ast_channel *parker, const char *app_data,
- int *silence_announcements)
+struct ast_bridge *park_common_setup(struct ast_channel *parkee, struct ast_channel *parker,
+ const char *lot_name, const char *comeback_override,
+ int use_ringing, int randomize, int time_limit, int silence_announcements)
{
- int use_ringing = 0;
- int randomize = 0;
- int time_limit = -1;
- char *lot_name;
-
struct ast_bridge *parking_bridge;
- RAII_VAR(char *, comeback_override, NULL, ast_free);
- RAII_VAR(char *, lot_name_app_arg, NULL, ast_free);
RAII_VAR(struct parking_lot *, lot, NULL, ao2_cleanup);
- if (app_data) {
- park_app_parse_data(app_data, silence_announcements, &use_ringing, &randomize, &time_limit, &comeback_override, &lot_name_app_arg);
- }
-
- lot_name = lot_name_app_arg;
-
/* If the name of the parking lot isn't specified in the arguments, find it based on the channel. */
if (ast_strlen_zero(lot_name)) {
ast_channel_lock(parker);
@@ -412,16 +400,34 @@ struct ast_bridge *park_common_setup(struct ast_channel *parkee, struct ast_chan
parking_bridge = parking_lot_get_bridge(lot);
ao2_unlock(lot);
- if (parking_bridge) {
- /* Apply relevant bridge roles and such to the parking channel */
- parking_channel_set_roles(parkee, lot, use_ringing);
- setup_park_common_datastore(parkee, ast_channel_uniqueid(parker), comeback_override, randomize, time_limit,
- silence_announcements ? *silence_announcements : 0);
- return parking_bridge;
+ if (!parking_bridge) {
+ return NULL;
+ }
+
+ /* Apply relevant bridge roles and such to the parking channel */
+ parking_channel_set_roles(parkee, lot, use_ringing);
+ setup_park_common_datastore(parkee, ast_channel_uniqueid(parker), comeback_override, randomize, time_limit,
+ silence_announcements);
+ return parking_bridge;
+}
+
+struct ast_bridge *park_application_setup(struct ast_channel *parkee, struct ast_channel *parker, const char *app_data,
+ int *silence_announcements)
+{
+ int use_ringing = 0;
+ int randomize = 0;
+ int time_limit = -1;
+
+ RAII_VAR(char *, comeback_override, NULL, ast_free);
+ RAII_VAR(char *, lot_name_app_arg, NULL, ast_free);
+
+ if (app_data) {
+ park_app_parse_data(app_data, silence_announcements, &use_ringing, &randomize, &time_limit, &comeback_override, &lot_name_app_arg);
}
- /* Couldn't get the parking bridge. Epic failure. */
- return NULL;
+ return park_common_setup(parkee, parker, lot_name_app_arg, comeback_override, use_ringing,
+ randomize, time_limit, silence_announcements ? *silence_announcements : 0);
+
}
/* XXX BUGBUG - determining the parker when transferred to deep park priority
@@ -452,7 +458,7 @@ int park_app_exec(struct ast_channel *chan, const char *data)
ast_channel_unlock(chan);
/* Handle the common parking setup stuff */
- if (!(parking_bridge = park_common_setup(chan, chan, data, &silence_announcements))) {
+ if (!(parking_bridge = park_application_setup(chan, chan, data, &silence_announcements))) {
if (!silence_announcements && !blind_transfer) {
ast_stream_and_wait(chan, "pbx-parkingfailed", "");
}
@@ -753,7 +759,7 @@ int park_and_announce_app_exec(struct ast_channel *chan, const char *data)
}
/* Handle the common parking setup stuff */
- if (!(parking_bridge = park_common_setup(chan, chan, data, &silence_announcements))) {
+ if (!(parking_bridge = park_application_setup(chan, chan, data, &silence_announcements))) {
return 0;
}