summaryrefslogtreecommitdiff
path: root/res/parking
diff options
context:
space:
mode:
Diffstat (limited to 'res/parking')
-rw-r--r--res/parking/parking_applications.c43
-rw-r--r--res/parking/parking_bridge_features.c11
-rw-r--r--res/parking/res_parking.h5
3 files changed, 47 insertions, 12 deletions
diff --git a/res/parking/parking_applications.c b/res/parking/parking_applications.c
index 7dd535991..ea7223eac 100644
--- a/res/parking/parking_applications.c
+++ b/res/parking/parking_applications.c
@@ -90,6 +90,47 @@ ASTERISK_REGISTER_FILE()
call on that extension. If the extension is already in use then execution
will continue at the next priority.
</para>
+ <para>If the <literal>parkeddynamic</literal> option is enabled in
+ <filename>res_parking.conf</filename> the following variables can be
+ used to dynamically create new parking lots. When using dynamic parking
+ lots, be aware of the conditions as explained in the notes section
+ below.
+ </para>
+ <para>The <variable>PARKINGDYNAMIC</variable> variable specifies the
+ parking lot to use as a template to create a dynamic parking lot. It
+ is an error to specify a non-existent parking lot for the template.
+ If not set then the default parking lot is used as the template.
+ </para>
+ <para>The <variable>PARKINGDYNCONTEXT</variable> variable specifies the
+ dialplan context to use for the newly created dynamic parking lot. If
+ not set then the context from the parking lot template is used. The
+ context is created if it does not already exist and the new parking lot
+ needs to create extensions.
+ </para>
+ <para>The <variable>PARKINGDYNEXTEN</variable> variable specifies the
+ <literal>parkext</literal> to use for the newly created dynamic
+ parking lot. If not set then the <literal>parkext</literal> is used from
+ the parking lot template. If the template does not specify a
+ <literal>parkext</literal> then no extensions are created for the newly
+ created parking lot. The dynamic parking lot cannot be created if it
+ needs to create extensions that overlap existing parking lot extensions.
+ The only exception to this is for the <literal>parkext</literal>
+ extension and only if neither of the overlaping parking lot's
+ <literal>parkext</literal> is exclusive.
+ </para>
+ <para>The <variable>PARKINGDYNPOS</variable> variable specifies the
+ parking positions to use for the newly created dynamic parking lot. If
+ not set then the <literal>parkpos</literal> from the parking lot template
+ is used.
+ </para>
+ <note>
+ <para>This application must be used as the first extension priority
+ to be recognized as a parking access extension for blind transfers.
+ Blind transfers and the DTMF one-touch parking feature need this
+ distinction to operate properly. The parking access extension in
+ this case is treated like a dialplan hint.
+ </para>
+ </note>
</description>
<see-also>
<ref type="application">ParkedCall</ref>
@@ -567,7 +608,7 @@ static int parked_call_app_exec(struct ast_channel *chan, const char *data)
int target_space = -1;
struct ast_bridge_features chan_features;
char *parse;
- char *lot_name;
+ const char *lot_name;
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(lot_name);
diff --git a/res/parking/parking_bridge_features.c b/res/parking/parking_bridge_features.c
index 5fe576424..e053ed74e 100644
--- a/res/parking/parking_bridge_features.c
+++ b/res/parking/parking_bridge_features.c
@@ -475,19 +475,12 @@ static int parking_park_bridge_channel(struct ast_bridge_channel *bridge_channel
static int parking_park_call(struct ast_bridge_channel *parker, char *exten, size_t length)
{
RAII_VAR(struct parking_lot *, lot, NULL, ao2_cleanup);
- const char *lot_name = NULL;
+ const char *lot_name;
ast_channel_lock(parker->chan);
- lot_name = find_channel_parking_lot_name(parker->chan);
- if (!ast_strlen_zero(lot_name)) {
- lot_name = ast_strdupa(lot_name);
- }
+ lot_name = ast_strdupa(find_channel_parking_lot_name(parker->chan));
ast_channel_unlock(parker->chan);
- if (ast_strlen_zero(lot_name)) {
- return -1;
- }
-
lot = parking_lot_find_by_name(lot_name);
if (!lot) {
lot = parking_create_dynamic_lot(lot_name, parker->chan);
diff --git a/res/parking/res_parking.h b/res/parking/res_parking.h
index 2c4a18055..f4ef2ea09 100644
--- a/res/parking/res_parking.h
+++ b/res/parking/res_parking.h
@@ -308,8 +308,9 @@ struct parking_lot *parking_create_dynamic_lot_forced(const char *name, struct a
*
* \param chan The channel we want the parking lot name for
*
- * \retval name of the channel's assigned parking lot if it is defined by the channel in some way
- * \retval name of the default parking lot if it is not
+ * \return name of the parking lot to use for the channel.
+ *
+ * \note Always returns a parking lot name.
*
* \note Channel needs to be locked while the returned string is in use.
*/