diff options
Diffstat (limited to 'res/parking')
-rw-r--r-- | res/parking/parking_applications.c | 43 | ||||
-rw-r--r-- | res/parking/parking_bridge_features.c | 11 | ||||
-rw-r--r-- | res/parking/res_parking.h | 5 |
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. */ |