From e2853ae3375d8ce8d2f52be5d7d9e3e7761af152 Mon Sep 17 00:00:00 2001
From: Philip Correia <philip.correia@nashua-communications.com>
Date: Mon, 15 Dec 2014 13:23:53 +0200
Subject: [PATCH] res_parking: Update parking documentation for dynamic parking
 lots.

* Remove duplicate res_parking.conf courtesytone config option
documentation.

ASTERISK-24596 #close
Reported by:  Philip Correia

ASTERISK-24605
Reported by:  Philip Correia
Patches:
      call_park_app_doc.patch (license #6672) patch uploaded by Philip Correia

Change-Id: I90a92a891c6494dc08173e675856afcc4764c5b5
---
 configs/samples/res_parking.conf.sample | 42 ++++++++++++++++
 res/parking/parking_applications.c      | 41 ++++++++++++++++
 res/res_parking.c                       | 65 +++++++++++++++++++++----
 3 files changed, 138 insertions(+), 10 deletions(-)

diff --git a/configs/samples/res_parking.conf.sample b/configs/samples/res_parking.conf.sample
index d24be2039c..e13f780e0e 100644
--- a/configs/samples/res_parking.conf.sample
+++ b/configs/samples/res_parking.conf.sample
@@ -1,5 +1,43 @@
 [general]
 ;parkeddynamic = yes            ; Enables dynamically created parkinglots. (default is no)
+                                ; If the option is enabled then the following
+                                ; variables can be used to dynamically create
+                                ; new parking lots.
+                                ;
+                                ; The PARKINGDYNAMIC 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.
+                                ;
+                                ; The PARKINGDYNCONTEXT 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.
+                                ;
+                                ; The PARKINGDYNEXTEN variable specifies the
+                                ; parkext to use for the newly created dynamic
+                                ; parking lot.  If not set then the parkext
+                                ; is used from the parking lot template.  If
+                                ; the template does not specify a parkext
+                                ; 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 parkext extension and
+                                ; only if neither of the overlaping parking
+                                ; lot's parkext is exclusive.
+                                ;
+                                ; The PARKINGDYNPOS variable specifies the
+                                ; parking positions to use for the newly
+                                ; created dynamic parking lot.  If not set
+                                ; then the parkpos from the parking lot
+                                ; template is used.
 
 ; A parking lot named 'default' will automatically be used when no other
 ; named parking lot is indicated for use by the park application or a
@@ -11,6 +49,10 @@
 parkext => 700                  ; What extension to dial to park. (optional; if
                                 ; specified, extensions will be created for parkext and
                                 ; the whole range of parkpos)
+                                ;
+                                ; Note: Generated parking extensions cannot overlap.
+                                ; The only exception is if neither overlapping parkext
+                                ; is exclusive.
 
 ;parkext_exclusive=yes          ; Specify that the parkext created for this parking lot
                                 ; will only access this parking lot. (default is no)
diff --git a/res/parking/parking_applications.c b/res/parking/parking_applications.c
index 0a0ea3c4b8..3a9527c1f9 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>
diff --git a/res/res_parking.c b/res/res_parking.c
index 02740da61b..727afd27d5 100644
--- a/res/res_parking.c
+++ b/res/res_parking.c
@@ -35,6 +35,38 @@
 				<synopsis>Options that apply to every parking lot</synopsis>
 				<configOption name="parkeddynamic">
 					<synopsis>Enables dynamically created parkinglots.</synopsis>
+					<description>
+						<para>If the option is enabled then the following variables can
+							be used to dynamically create new parking lots.
+						</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>
+					</description>
 				</configOption>
 			</configObject>
 			<configObject name="parking_lot">
@@ -45,19 +77,35 @@
 				</configOption>
 				<configOption name="parkext">
 					<synopsis>Extension to park calls to this parking lot.</synopsis>
-					<description><para>If this option is used, this extension will automatically be created to place calls into
-                        parking lots. In addition, if parkext_exclusive is set for this parking lot, the name of the parking lot
-                        will be included in the application's arguments so that it only parks to this parking lot. The extension
-                        will be created in <literal>context</literal>. Using this option also creates extensions for retrieving
-                        parked calls from the parking spaces in the same context.</para></description>
+					<description>
+						<para>If this option is used, this extension will automatically
+							be created to place calls into parking lots. In addition, if
+							<literal>parkext_exclusive</literal> is set for this parking
+							lot, the name of the parking lot will be included in the
+							application's arguments so that it only parks to this parking
+							lot. The extension will be created in <literal>context</literal>.
+							Using this option also creates extensions for retrieving
+							parked calls from the parking spaces in the same context.
+						</para>
+						<note>
+							<para>Generated parking extensions cannot overlap.
+								The only exception is if neither overlapping
+								<literal>parkext</literal> is exclusive.
+							</para>
+						</note>
+					</description>
 				</configOption>
 				<configOption name="parkext_exclusive" default="no">
 					<synopsis>If yes, the extension registered as parkext will park exclusively to this parking lot.</synopsis>
 				</configOption>
 				<configOption name="parkpos" default="701-750">
 					<synopsis>Numerical range of parking spaces which can be used to retrieve parked calls.</synopsis>
-					<description><para>If parkext is set, these extensions will automatically be mapped in <literal>context</literal>
-						in order to pick up calls parked to these parking spaces.</para></description>
+					<description>
+						<para>If <literal>parkext</literal> is set, these extensions
+							will automatically be mapped in <literal>context</literal>
+							in order to pick up calls parked to these parking spaces.
+						</para>
+					</description>
 				</configOption>
 				<configOption name="parkinghints" default="no">
 					<synopsis>If yes, this parking lot will add hints automatically for parking spaces.</synopsis>
@@ -178,9 +226,6 @@
 						</enumlist>
 					</description>
 				</configOption>
-				<configOption name="courtesytone">
-					<synopsis>If set, the sound set will be played to whomever is set by parkedplay</synopsis>
-				</configOption>
 			</configObject>
 		</configFile>
 	</configInfo>
-- 
GitLab