Author: mmichelson
Date: Fri Aug  2 08:38:55 2013
New Revision: 396101

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=396101
Log:
Get up to date. Reset the automerge property for the heck of it.


Added:
    team/mmichelson/bridged_channel/include/asterisk/pickup.h
      - copied unchanged from r396099, trunk/include/asterisk/pickup.h
    team/mmichelson/bridged_channel/main/pickup.c
      - copied unchanged from r396099, trunk/main/pickup.c
Modified:
    team/mmichelson/bridged_channel/   (props changed)
    team/mmichelson/bridged_channel/CHANGES
    team/mmichelson/bridged_channel/UPGRADE.txt
    team/mmichelson/bridged_channel/apps/app_directed_pickup.c
    team/mmichelson/bridged_channel/channels/chan_dahdi.c
    team/mmichelson/bridged_channel/channels/chan_gtalk.c
    team/mmichelson/bridged_channel/channels/chan_mgcp.c
    team/mmichelson/bridged_channel/channels/chan_sip.c
    team/mmichelson/bridged_channel/channels/chan_skinny.c
    team/mmichelson/bridged_channel/channels/chan_unistim.c
    team/mmichelson/bridged_channel/channels/sig_analog.c
    team/mmichelson/bridged_channel/include/asterisk/_private.h
    team/mmichelson/bridged_channel/include/asterisk/features.h
    team/mmichelson/bridged_channel/include/asterisk/parking.h
    team/mmichelson/bridged_channel/main/asterisk.c
    team/mmichelson/bridged_channel/main/bridge.c
    team/mmichelson/bridged_channel/main/cdr.c
    team/mmichelson/bridged_channel/main/cel.c
    team/mmichelson/bridged_channel/main/features.c
    team/mmichelson/bridged_channel/main/pbx.c
    team/mmichelson/bridged_channel/res/parking/parking_applications.c
    team/mmichelson/bridged_channel/res/parking/parking_manager.c
    team/mmichelson/bridged_channel/res/res_parking.c
    team/mmichelson/bridged_channel/res/res_pjsip.c
    team/mmichelson/bridged_channel/res/res_pjsip/include/res_pjsip_private.h
    team/mmichelson/bridged_channel/res/res_pjsip/pjsip_options.c
    team/mmichelson/bridged_channel/res/res_pjsip_notify.c
    team/mmichelson/bridged_channel/res/res_pjsip_outbound_registration.c
    team/mmichelson/bridged_channel/res/res_pjsip_registrar.c
    team/mmichelson/bridged_channel/res/stasis/control.c
    team/mmichelson/bridged_channel/tests/test_cel.c

Propchange: team/mmichelson/bridged_channel/
------------------------------------------------------------------------------
    automerge = *

Propchange: team/mmichelson/bridged_channel/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Fri Aug  2 08:38:55 2013
@@ -1,1 +1,1 @@
-/trunk:1-396037
+/trunk:1-396100

Modified: team/mmichelson/bridged_channel/CHANGES
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/bridged_channel/CHANGES?view=diff&rev=396101&r1=396100&r2=396101
==============================================================================
--- team/mmichelson/bridged_channel/CHANGES (original)
+++ team/mmichelson/bridged_channel/CHANGES Fri Aug  2 08:38:55 2013
@@ -310,6 +310,15 @@
  * The option 'allowmultiplelogin' can now be set or overriden in a particular
    account. When set in the general context, it will act as the default
    setting for defined accounts.
+
+ * The 'BridgeAction' event was removed. It technically added no value, as the
+   Bridge Action already receives confirmation of the bridge through a
+   successful completion Event.
+
+ * The 'BridgeExec' events were removed. These events duplicated the events 
that
+   occur in the Briding API, and are conveyed now through BridgeCreate,
+   BridgeEnter, and BridgeLeave events.
+
 
 AGI (Asterisk Gateway Interface)
 ------------------

Modified: team/mmichelson/bridged_channel/UPGRADE.txt
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/bridged_channel/UPGRADE.txt?view=diff&rev=396101&r1=396100&r2=396101
==============================================================================
--- team/mmichelson/bridged_channel/UPGRADE.txt (original)
+++ team/mmichelson/bridged_channel/UPGRADE.txt Fri Aug  2 08:38:55 2013
@@ -185,6 +185,10 @@
  - Executing a dynamic feature on the bridge peer in a multi-party bridge will
    execute it on all peers of the activating channel.
 
+ - There is no longer an explicit 'features reload' CLI command. Features can 
still be
+   reloaded using 'module reload features'.
+
+
 Parking:
  - The arguments for the Park, ParkedCall, and ParkAndAnnounce applications 
have
    been modified significantly. See the application documents for specific 
details.

Modified: team/mmichelson/bridged_channel/apps/app_directed_pickup.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/bridged_channel/apps/app_directed_pickup.c?view=diff&rev=396101&r1=396100&r2=396101
==============================================================================
--- team/mmichelson/bridged_channel/apps/app_directed_pickup.c (original)
+++ team/mmichelson/bridged_channel/apps/app_directed_pickup.c Fri Aug  2 
08:38:55 2013
@@ -43,7 +43,7 @@
 #include "asterisk/module.h"
 #include "asterisk/lock.h"
 #include "asterisk/app.h"
-#include "asterisk/features.h"
+#include "asterisk/pickup.h"
 #include "asterisk/manager.h"
 #include "asterisk/callerid.h"
 
@@ -305,7 +305,7 @@
        return 0;
 }
 
-/* Find channel for pick up specified by partial channel name */ 
+/* Find channel for pick up specified by partial channel name */
 static int find_by_part(void *obj, void *arg, void *data, int flags)
 {
        struct ast_channel *target = obj;/*!< Potential pickup target */
@@ -323,7 +323,7 @@
        return 0;
 }
 
-/* Attempt to pick up specified by partial channel name */ 
+/* Attempt to pick up specified by partial channel name */
 static int pickup_by_part(struct ast_channel *chan, const char *part)
 {
        struct ast_channel *target;/*!< Potential pickup target */

Modified: team/mmichelson/bridged_channel/channels/chan_dahdi.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/bridged_channel/channels/chan_dahdi.c?view=diff&rev=396101&r1=396100&r2=396101
==============================================================================
--- team/mmichelson/bridged_channel/channels/chan_dahdi.c (original)
+++ team/mmichelson/bridged_channel/channels/chan_dahdi.c Fri Aug  2 08:38:55 
2013
@@ -102,6 +102,7 @@
 #include "asterisk/callerid.h"
 #include "asterisk/adsi.h"
 #include "asterisk/cli.h"
+#include "asterisk/pickup.h"
 #include "asterisk/features.h"
 #include "asterisk/musiconhold.h"
 #include "asterisk/say.h"

Modified: team/mmichelson/bridged_channel/channels/chan_gtalk.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/bridged_channel/channels/chan_gtalk.c?view=diff&rev=396101&r1=396100&r2=396101
==============================================================================
--- team/mmichelson/bridged_channel/channels/chan_gtalk.c (original)
+++ team/mmichelson/bridged_channel/channels/chan_gtalk.c Fri Aug  2 08:38:55 
2013
@@ -85,7 +85,7 @@
 #include "asterisk/abstract_jb.h"
 #include "asterisk/jabber.h"
 #include "asterisk/jingle.h"
-#include "asterisk/features.h"
+#include "asterisk/parking.h"
 #include "asterisk/stasis_channels.h"
 
 #define GOOGLE_CONFIG          "gtalk.conf"
@@ -2319,8 +2319,8 @@
  * Module loading including tests for configuration or dependencies.
  * This function can return AST_MODULE_LOAD_FAILURE, AST_MODULE_LOAD_DECLINE,
  * or AST_MODULE_LOAD_SUCCESS. If a dependency or environment variable fails
- * tests return AST_MODULE_LOAD_FAILURE. If the module can not load the 
- * configuration file or other non-critical problem return 
+ * tests return AST_MODULE_LOAD_FAILURE. If the module can not load the
+ * configuration file or other non-critical problem return
  * AST_MODULE_LOAD_DECLINE. On success return AST_MODULE_LOAD_SUCCESS.
  */
 static int load_module(void)

Modified: team/mmichelson/bridged_channel/channels/chan_mgcp.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/bridged_channel/channels/chan_mgcp.c?view=diff&rev=396101&r1=396100&r2=396101
==============================================================================
--- team/mmichelson/bridged_channel/channels/chan_mgcp.c (original)
+++ team/mmichelson/bridged_channel/channels/chan_mgcp.c Fri Aug  2 08:38:55 
2013
@@ -59,6 +59,7 @@
 #include "asterisk/channel.h"
 #include "asterisk/config.h"
 #include "asterisk/module.h"
+#include "asterisk/pickup.h"
 #include "asterisk/pbx.h"
 #include "asterisk/sched.h"
 #include "asterisk/io.h"

Modified: team/mmichelson/bridged_channel/channels/chan_sip.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/bridged_channel/channels/chan_sip.c?view=diff&rev=396101&r1=396100&r2=396101
==============================================================================
--- team/mmichelson/bridged_channel/channels/chan_sip.c (original)
+++ team/mmichelson/bridged_channel/channels/chan_sip.c Fri Aug  2 08:38:55 2013
@@ -259,7 +259,8 @@
 #include "asterisk/cli.h"
 #include "asterisk/musiconhold.h"
 #include "asterisk/dsp.h"
-#include "asterisk/features.h"
+#include "asterisk/pickup.h"
+#include "asterisk/parking.h"
 #include "asterisk/srv.h"
 #include "asterisk/astdb.h"
 #include "asterisk/causes.h"

Modified: team/mmichelson/bridged_channel/channels/chan_skinny.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/bridged_channel/channels/chan_skinny.c?view=diff&rev=396101&r1=396100&r2=396101
==============================================================================
--- team/mmichelson/bridged_channel/channels/chan_skinny.c (original)
+++ team/mmichelson/bridged_channel/channels/chan_skinny.c Fri Aug  2 08:38:55 
2013
@@ -68,7 +68,7 @@
 #include "asterisk/manager.h"
 #include "asterisk/say.h"
 #include "asterisk/astdb.h"
-#include "asterisk/features.h"
+#include "asterisk/pickup.h"
 #include "asterisk/app.h"
 #include "asterisk/musiconhold.h"
 #include "asterisk/utils.h"

Modified: team/mmichelson/bridged_channel/channels/chan_unistim.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/bridged_channel/channels/chan_unistim.c?view=diff&rev=396101&r1=396100&r2=396101
==============================================================================
--- team/mmichelson/bridged_channel/channels/chan_unistim.c (original)
+++ team/mmichelson/bridged_channel/channels/chan_unistim.c Fri Aug  2 08:38:55 
2013
@@ -73,7 +73,7 @@
 #include "asterisk/musiconhold.h"
 #include "asterisk/causes.h"
 #include "asterisk/indications.h"
-#include "asterisk/features.h"
+#include "asterisk/pickup.h"
 #include "asterisk/astobj2.h"
 #include "asterisk/astdb.h"
 #include "asterisk/features_config.h"

Modified: team/mmichelson/bridged_channel/channels/sig_analog.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/bridged_channel/channels/sig_analog.c?view=diff&rev=396101&r1=396100&r2=396101
==============================================================================
--- team/mmichelson/bridged_channel/channels/sig_analog.c (original)
+++ team/mmichelson/bridged_channel/channels/sig_analog.c Fri Aug  2 08:38:55 
2013
@@ -34,6 +34,7 @@
 
 #include "asterisk/utils.h"
 #include "asterisk/options.h"
+#include "asterisk/pickup.h"
 #include "asterisk/pbx.h"
 #include "asterisk/file.h"
 #include "asterisk/callerid.h"

Modified: team/mmichelson/bridged_channel/include/asterisk/_private.h
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/bridged_channel/include/asterisk/_private.h?view=diff&rev=396101&r1=396100&r2=396101
==============================================================================
--- team/mmichelson/bridged_channel/include/asterisk/_private.h (original)
+++ team/mmichelson/bridged_channel/include/asterisk/_private.h Fri Aug  2 
08:38:55 2013
@@ -8,7 +8,7 @@
  *
  * \brief
  * Prototypes for public functions only of internal interest,
- * 
+ *
  */
 
 
@@ -25,7 +25,7 @@
 void ast_channels_init(void);          /*!< Provided by channel.c */
 void ast_builtins_init(void);          /*!< Provided by cli.c */
 int ast_cli_perms_init(int reload);    /*!< Provided by cli.c */
-int dnsmgr_init(void);                 /*!< Provided by dnsmgr.c */ 
+int dnsmgr_init(void);                 /*!< Provided by dnsmgr.c */
 void dnsmgr_start_refresh(void);       /*!< Provided by dnsmgr.c */
 int dnsmgr_reload(void);               /*!< Provided by dnsmgr.c */
 void threadstorage_init(void);         /*!< Provided by threadstorage.c */
@@ -109,9 +109,9 @@
  */
 void ast_process_pending_reloads(void);
 
-/*! \brief Load XML documentation. Provided by xmldoc.c 
+/*! \brief Load XML documentation. Provided by xmldoc.c
  *  \retval 1 on error.
- *  \retval 0 on success. 
+ *  \retval 0 on success.
  */
 int ast_xmldoc_load_documentation(void);
 

Modified: team/mmichelson/bridged_channel/include/asterisk/features.h
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/bridged_channel/include/asterisk/features.h?view=diff&rev=396101&r1=396100&r2=396101
==============================================================================
--- team/mmichelson/bridged_channel/include/asterisk/features.h (original)
+++ team/mmichelson/bridged_channel/include/asterisk/features.h Fri Aug  2 
08:38:55 2013
@@ -27,30 +27,6 @@
 #include "asterisk/pbx.h"
 #include "asterisk/linkedlists.h"
 #include "asterisk/bridge.h"
-
-#define FEATURE_MAX_LEN                11
-#define FEATURE_APP_LEN                64
-#define FEATURE_APP_ARGS_LEN   256
-#define FEATURE_SNAME_LEN      32
-#define FEATURE_EXTEN_LEN      32
-#define FEATURE_MOH_LEN                80  /* same as MAX_MUSICCLASS from 
channel.h */
-
-#define DEFAULT_PARKINGLOT "default"   /*!< Default parking lot */
-
-#define AST_FEATURE_RETURN_HANGUP           -1
-#define AST_FEATURE_RETURN_SUCCESSBREAK     0
-#define AST_FEATURE_RETURN_PBX_KEEPALIVE    AST_PBX_KEEPALIVE
-#define AST_FEATURE_RETURN_NO_HANGUP_PEER   AST_PBX_NO_HANGUP_PEER
-#define AST_FEATURE_RETURN_PASSDIGITS       21
-#define AST_FEATURE_RETURN_STOREDIGITS      22
-#define AST_FEATURE_RETURN_SUCCESS          23
-#define AST_FEATURE_RETURN_KEEPTRYING       24
-#define AST_FEATURE_RETURN_PARKFAILED       25
-
-#define FEATURE_SENSE_CHAN     (1 << 0)
-#define FEATURE_SENSE_PEER     (1 << 1)
-
-typedef int (*ast_feature_operation)(struct ast_channel *chan, struct 
ast_channel *peer, struct ast_bridge_config *config, const char *code, int 
sense, void *data);
 
 /*! \brief main call feature structure */
 
@@ -93,54 +69,7 @@
 int ast_bridge_add_channel(struct ast_bridge *bridge, struct ast_channel *chan,
                struct ast_bridge_features *features, int play_tone, const char 
*xfersound);
 
-/*!
- * \brief Test if a channel can be picked up.
- *
- * \param chan Channel to test if can be picked up.
- *
- * \note This function assumes that chan is locked.
- *
- * \return TRUE if channel can be picked up.
- */
-int ast_can_pickup(struct ast_channel *chan);
 
-/*!
- * \brief Find a pickup channel target by group.
- *
- * \param chan channel that initiated pickup.
- *
- * \retval target on success.  The returned channel is locked and reffed.
- * \retval NULL on error.
- */
-struct ast_channel *ast_pickup_find_by_group(struct ast_channel *chan);
-
-/*! \brief Pickup a call */
-int ast_pickup_call(struct ast_channel *chan);
-
-/*!
- * \brief Pickup a call target.
- *
- * \param chan channel that initiated pickup.
- * \param target channel to be picked up.
- *
- * \note This function assumes that target is locked.
- *
- * \retval 0 on success.
- * \retval -1 on failure.
- */
-int ast_do_pickup(struct ast_channel *chan, struct ast_channel *target);
-
-/*!
- * \brief accessor for call pickup message type
- * \since 12.0.0
- *
- * \retval pointer to the stasis message type
- * \retval NULL if not initialized
- */
-struct stasis_message_type *ast_call_pickup_type(void);
-
-/*! \brief Reload call features from features.conf */
-int ast_features_reload(void);
 
 /*!
  * \brief parse L option and read associated channel variables to set warning, 
warning frequency, and timelimit

Modified: team/mmichelson/bridged_channel/include/asterisk/parking.h
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/bridged_channel/include/asterisk/parking.h?view=diff&rev=396101&r1=396100&r2=396101
==============================================================================
--- team/mmichelson/bridged_channel/include/asterisk/parking.h (original)
+++ team/mmichelson/bridged_channel/include/asterisk/parking.h Fri Aug  2 
08:38:55 2013
@@ -29,6 +29,11 @@
  * \brief The default parking application that Asterisk expects.
  */
 #define PARK_APPLICATION "Park"
+
+/*!
+ * \brief The default parking lot
+ */
+#define DEFAULT_PARKINGLOT "default"
 
 /*!
  * \brief Defines the type of parked call message being published

Modified: team/mmichelson/bridged_channel/main/asterisk.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/bridged_channel/main/asterisk.c?view=diff&rev=396101&r1=396100&r2=396101
==============================================================================
--- team/mmichelson/bridged_channel/main/asterisk.c (original)
+++ team/mmichelson/bridged_channel/main/asterisk.c Fri Aug  2 08:38:55 2013
@@ -202,6 +202,7 @@
 #include "asterisk/cli.h"
 #include "asterisk/channel.h"
 #include "asterisk/translate.h"
+#include "asterisk/pickup.h"
 #include "asterisk/features.h"
 #include "asterisk/acl.h"
 #include "asterisk/ulaw.h"
@@ -4298,6 +4299,11 @@
                exit(1);
        }
 
+       if (ast_pickup_init()) {
+               printf("%s", term_quit());
+               exit(1);
+       }
+
        if (ast_bridging_init()) {
                printf("%s", term_quit());
                exit(1);

Modified: team/mmichelson/bridged_channel/main/bridge.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/bridged_channel/main/bridge.c?view=diff&rev=396101&r1=396100&r2=396101
==============================================================================
--- team/mmichelson/bridged_channel/main/bridge.c (original)
+++ team/mmichelson/bridged_channel/main/bridge.c Fri Aug  2 08:38:55 2013
@@ -40,6 +40,7 @@
 #include "asterisk/bridge.h"
 #include "asterisk/bridge_internal.h"
 #include "asterisk/bridge_channel_internal.h"
+#include "asterisk/bridge_features.h"
 #include "asterisk/bridge_basic.h"
 #include "asterisk/bridge_technology.h"
 #include "asterisk/bridge_channel.h"

Modified: team/mmichelson/bridged_channel/main/cdr.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/bridged_channel/main/cdr.c?view=diff&rev=396101&r1=396100&r2=396101
==============================================================================
--- team/mmichelson/bridged_channel/main/cdr.c (original)
+++ team/mmichelson/bridged_channel/main/cdr.c Fri Aug  2 08:38:55 2013
@@ -916,17 +916,14 @@
                return 0;
        }
 
-       if (strcmp(new_snapshot->context, old_snapshot->context)
-               || strcmp(new_snapshot->exten, old_snapshot->exten)
-               || new_snapshot->priority != old_snapshot->priority) {
-               return 1;
-       }
-
        /* When Party A is originated to an application and the application 
exits, the stack
         * will attempt to clear the application and restore the dummy 
originate application
         * of "AppDialX". Ignore application changes to AppDialX as a result.
         */
-       if (strcmp(new_snapshot->appl, old_snapshot->appl) && 
strncasecmp(new_snapshot->appl, "appdial", 7)) {
+       if (strcmp(new_snapshot->appl, old_snapshot->appl) && 
strncasecmp(new_snapshot->appl, "appdial", 7)
+               && (strcmp(new_snapshot->context, old_snapshot->context)
+               || strcmp(new_snapshot->exten, old_snapshot->exten)
+               || new_snapshot->priority != old_snapshot->priority)) {
                return 1;
        }
 

Modified: team/mmichelson/bridged_channel/main/cel.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/bridged_channel/main/cel.c?view=diff&rev=396101&r1=396100&r2=396101
==============================================================================
--- team/mmichelson/bridged_channel/main/cel.c (original)
+++ team/mmichelson/bridged_channel/main/cel.c Fri Aug  2 08:38:55 2013
@@ -61,7 +61,7 @@
 #include "asterisk/stasis_bridges.h"
 #include "asterisk/bridge.h"
 #include "asterisk/parking.h"
-#include "asterisk/features.h"
+#include "asterisk/pickup.h"
 #include "asterisk/core_local.h"
 
 /*** DOCUMENTATION

Modified: team/mmichelson/bridged_channel/main/features.c
URL: 
http://svnview.digium.com/svn/asterisk/team/mmichelson/bridged_channel/main/features.c?view=diff&rev=396101&r1=396100&r2=396101
==============================================================================
--- team/mmichelson/bridged_channel/main/features.c (original)
+++ team/mmichelson/bridged_channel/main/features.c Fri Aug  2 08:38:55 2013
@@ -72,6 +72,7 @@
 #include "asterisk/astobj2.h"
 #include "asterisk/test.h"
 #include "asterisk/bridge.h"
+#include "asterisk/bridge_features.h"
 #include "asterisk/bridge_basic.h"
 #include "asterisk/bridge_after.h"
 #include "asterisk/stasis.h"
@@ -282,25 +283,7 @@
                        <para>Bridge together two channels already in the 
PBX.</para>
                </description>
        </manager>
-       <managerEvent language="en_US" name="Pickup">
-               <managerEventInstance class="EVENT_FLAG_CALL">
-                       <synopsis>Raised when a call pickup occurs.</synopsis>
-                       <syntax>
-                               <channel_snapshot/>
-                               <channel_snapshot prefix="Target"/>
-                       </syntax>
-               </managerEventInstance>
-       </managerEvent>
  ***/
-
-#define DEFAULT_PARK_TIME                                                      
45000   /*!< ms */
-#define DEFAULT_PARK_EXTENSION                                         "700"
-#define DEFAULT_COMEBACK_CONTEXT                                       
"parkedcallstimeout"
-#define DEFAULT_COMEBACK_TO_ORIGIN                                     1
-#define DEFAULT_COMEBACK_DIAL_TIME                                     30
-
-#define AST_MAX_WATCHERS 256
-#define MAX_DIAL_FEATURE_OPTIONS 30
 
 /* TODO Scrape all of the parking stuff out of features.c */
 
@@ -310,286 +293,12 @@
        FEATURE_INTERPRET_CHECK,  /* Used by feature_check */
 } feature_interpret_op;
 
-/*! Parking lot access ramp dialplan usage entry. */
-struct parking_dp_ramp {
-       /*! Next node in the parking lot spaces dialplan list. */
-       AST_LIST_ENTRY(parking_dp_ramp) node;
-       /*! TRUE if the parking lot access extension is exclusive. */
-       unsigned int exclusive:1;
-       /*! Parking lot access extension */
-       char exten[1];
-};
-
-/*! Parking lot dialplan access ramp map */
-AST_LIST_HEAD_NOLOCK(parking_dp_ramp_map, parking_dp_ramp);
-
-/*! Parking lot spaces dialplan usage entry. */
-struct parking_dp_spaces {
-       /*! Next node in the parking lot spaces dialplan list. */
-       AST_LIST_ENTRY(parking_dp_spaces) node;
-       /*! First parking space */
-       int start;
-       /*! Last parking space */
-       int stop;
-};
-
-/*! Parking lot dialplan context space map */
-AST_LIST_HEAD_NOLOCK(parking_dp_space_map, parking_dp_spaces);
-
-/*! Parking lot context dialplan usage entry. */
-struct parking_dp_context {
-       /*! Next node in the parking lot contexts dialplan list. */
-       AST_LIST_ENTRY(parking_dp_context) node;
-       /*! Parking access extensions defined in this context. */
-       struct parking_dp_ramp_map access_extens;
-       /*! Parking spaces defined in this context. */
-       struct parking_dp_space_map spaces;
-       /*! Parking hints defined in this context. */
-       struct parking_dp_space_map hints;
-       /*! Parking lot context name */
-       char context[1];
-};
-
-/*! Parking lot dialplan usage map. */
-AST_LIST_HEAD_NOLOCK(parking_dp_map, parking_dp_context);
-
-/*!
- * \brief Description of one parked call, added to a list while active, then 
removed.
- * The list belongs to a parkinglot.
- */
-struct parkeduser {
-       struct ast_channel *chan;                   /*!< Parked channel */
-       struct timeval start;                       /*!< Time the park started 
*/
-       int parkingnum;                             /*!< Parking lot space used 
*/
-       char parkingexten[AST_MAX_EXTENSION];       /*!< If set beforehand, 
parking extension used for this call */
-       char context[AST_MAX_CONTEXT];              /*!< Where to go if our 
parking time expires */
-       char exten[AST_MAX_EXTENSION];
-       int priority;
-       unsigned int parkingtime;                   /*!< Maximum length in 
parking lot before return */
-       /*! Method to entertain the caller when parked: AST_CONTROL_RINGING, 
AST_CONTROL_HOLD, or 0(none) */
-       enum ast_control_frame_type hold_method;
-       unsigned int notquiteyet:1;
-       unsigned int options_specified:1;
-       char peername[AST_CHANNEL_NAME];
-       unsigned char moh_trys;
-       /*! Parking lot this entry belongs to.  Holds a parking lot reference. 
*/
-       struct ast_parkinglot *parkinglot;
-       AST_LIST_ENTRY(parkeduser) list;
-};
-
-/*! Parking lot configuration options. */
-struct parkinglot_cfg {
-       /*! Music class used for parking */
-       char mohclass[MAX_MUSICCLASS];
-       /*! Extension to park calls in this parking lot. */
-       char parkext[AST_MAX_EXTENSION];
-       /*! Context for which parking is made accessible */
-       char parking_con[AST_MAX_CONTEXT];
-       /*! Context that timed-out parked calls are called back on when 
comebacktoorigin=no */
-       char comebackcontext[AST_MAX_CONTEXT];
-       /*! First available extension for parking */
-       int parking_start;
-       /*! Last available extension for parking */
-       int parking_stop;
-       /*! Default parking time in ms. */
-       unsigned int parkingtime;
-       /*!
-        * \brief Enable DTMF based transfers on bridge when picking up parked 
calls.
-        *
-        * \details
-        * none(0)
-        * AST_FEATURE_FLAG_BYCALLEE
-        * AST_FEATURE_FLAG_BYCALLER
-        * AST_FEATURE_FLAG_BYBOTH
-        */
-       int parkedcalltransfers;
-       /*!
-        * \brief Enable DTMF based parking on bridge when picking up parked 
calls.
-        *
-        * \details
-        * none(0)
-        * AST_FEATURE_FLAG_BYCALLEE
-        * AST_FEATURE_FLAG_BYCALLER
-        * AST_FEATURE_FLAG_BYBOTH
-        */
-       int parkedcallreparking;
-       /*!
-        * \brief Enable DTMF based hangup on a bridge when pickup up parked 
calls.
-        *
-        * \details
-        * none(0)
-        * AST_FEATURE_FLAG_BYCALLEE
-        * AST_FEATURE_FLAG_BYCALLER
-        * AST_FEATURE_FLAG_BYBOTH
-        */
-       int parkedcallhangup;
-       /*!
-        * \brief Enable DTMF based recording on a bridge when picking up 
parked calls.
-        *
-        * \details
-        * none(0)
-        * AST_FEATURE_FLAG_BYCALLEE
-        * AST_FEATURE_FLAG_BYCALLER
-        * AST_FEATURE_FLAG_BYBOTH
-        */
-       int parkedcallrecording;
-
-       /*! Time in seconds to dial the device that parked a timedout parked 
call */
-       unsigned int comebackdialtime;
-       /*! TRUE if findslot is set to next */
-       unsigned int parkfindnext:1;
-       /*! TRUE if the parking lot is exclusively accessed by parkext */
-       unsigned int parkext_exclusive:1;
-       /*! Add parking hints automatically */
-       unsigned int parkaddhints:1;
-       /*! TRUE if configuration is invalid and the parking lot should not be 
used. */
-       unsigned int is_invalid:1;
-       /*! TRUE if a timed out parked call goes back to the parker */
-       unsigned int comebacktoorigin:1;
-};
-
-/*! \brief Structure for parking lots which are put in a container. */
-struct ast_parkinglot {
-       /*! Name of the parking lot. */
-       char name[AST_MAX_CONTEXT];
-       /*! Parking lot user configuration. */
-       struct parkinglot_cfg cfg;
-
-       /*! Parking space to start next park search. */
-       int next_parking_space;
-
-       /*! That which bears the_mark shall be deleted if parking lot empty! 
(Used during reloads.) */
-       unsigned int the_mark:1;
-       /*! TRUE if the parking lot is disabled. */
-       unsigned int disabled:1;
-
-       /*! List of active parkings in this parkinglot */
-       AST_LIST_HEAD(parkinglot_parklist, parkeduser) parkings;
-};
-
-/*! \brief The configured parking lots container. Always at least one  - the 
default parking lot */
-static struct ao2_container *parkinglots;
-
-/*! Force a config reload to reload regardless of config file timestamp. */
-#ifdef TEST_FRAMEWORK
-static int force_reload_load;
-#endif
-
-/*!
- * \brief Context for parking dialback to parker.
- * \note The need for the context is a KLUDGE.
- *
- * \todo Might be able to eliminate the parking_con_dial context
- * kludge by running app_dial directly in its own thread to
- * simulate a PBX.
- */
-static char parking_con_dial[] = "park-dial";
-
-/*! Ensure that features.conf reloads on one thread at a time. */
-AST_MUTEX_DEFINE_STATIC(features_reload_lock);
-
-static char *registrar = "features";              /*!< Registrar for 
operations */
-
-/*! PARK_APP_NAME application arguments */
-AST_DEFINE_APP_ARGS_TYPE(park_app_args,
-       AST_APP_ARG(timeout);           /*!< Time in ms to remain in the 
parking lot. */
-       AST_APP_ARG(return_con);        /*!< Context to return parked call if 
timeout. */
-       AST_APP_ARG(return_ext);        /*!< Exten to return parked call if 
timeout. */
-       AST_APP_ARG(return_pri);        /*!< Priority to return parked call if 
timeout. */
-       AST_APP_ARG(options);           /*!< Parking option flags. */
-       AST_APP_ARG(pl_name);           /*!< Parking lot name to use if 
present. */
-       AST_APP_ARG(dummy);                     /*!< Place to put any remaining 
args string. */
-       );
-
-static pthread_t parking_thread;
 struct ast_dial_features {
        /*! Channel's feature flags. */
        struct ast_flags my_features;
        /*! Bridge peer's feature flags. */
        struct ast_flags peer_features;
 };
-
-static struct ast_manager_event_blob *call_pickup_to_ami(struct stasis_message 
*message);
-
-STASIS_MESSAGE_TYPE_DEFN(
-       ast_call_pickup_type,
-       .to_ami = call_pickup_to_ami);
-
-
-#if defined(ATXFER_NULL_TECH)
-/*!
- * \internal
- * \brief Set the channel technology to the kill technology.
- *
- * \param chan Channel to change technology.
- *
- * \return Nothing
- */
-static void set_kill_chan_tech(struct ast_channel *chan)
-{
-       int idx;
-
-       ast_channel_lock(chan);
-
-       /* Hangup the channel's physical side */
-       if (ast_channel_tech(chan)->hangup) {
-               ast_channel_tech(chan)->hangup(chan);
-       }
-       if (ast_channel_tech_pvt(chan)) {
-               ast_log(LOG_WARNING, "Channel '%s' may not have been hung up 
properly\n",
-                       ast_channel_name(chan));
-               ast_free(ast_channel_tech_pvt(chan));
-               ast_channel_tech_pvt_set(chan, NULL);
-       }
-
-       /* Install the kill technology and wake up anyone waiting on it. */
-       ast_channel_tech_set(chan, &ast_kill_tech);
-       for (idx = 0; idx < AST_MAX_FDS; ++idx) {
-               switch (idx) {
-               case AST_ALERT_FD:
-               case AST_TIMING_FD:
-               case AST_GENERATOR_FD:
-                       /* Don't clear these fd's. */
-                       break;
-               default:
-                       ast_channel_set_fd(chan, idx, -1);
-                       break;
-               }
-       }
-       ast_queue_frame(chan, &ast_null_frame);
-
-       ast_channel_unlock(chan);
-}
-#endif /* defined(ATXFER_NULL_TECH) */
-
-#if defined(ATXFER_NULL_TECH)
-/*!
- * \internal
- * \brief Set the channel name to something unique.
- *
- * \param chan Channel to change name.
- *
- * \return Nothing
- */
-static void set_new_chan_name(struct ast_channel *chan)
-{
-       static int seq_num_last;
-       int seq_num;
-       int len;
-       char *chan_name;
-       char dummy[1];
-
-       /* Create the new channel name string. */
-       ast_channel_lock(chan);
-       seq_num = ast_atomic_fetchadd_int(&seq_num_last, +1);
-       len = snprintf(dummy, sizeof(dummy), "%s<XFER_%x>", 
ast_channel_name(chan), seq_num) + 1;
-       chan_name = ast_alloca(len);
-       snprintf(chan_name, len, "%s<XFER_%x>", ast_channel_name(chan), 
seq_num);
-       ast_channel_unlock(chan);
-
-       ast_change_name(chan, chan_name);
-}
-#endif /* defined(ATXFER_NULL_TECH) */
 
 static void *dial_features_duplicate(void *data)
 {
@@ -655,9 +364,6 @@
        return 0;
 }
 
-/* Forward declarations */
-static void parkinglot_unref(struct ast_parkinglot *parkinglot);
-
 struct ast_bridge_thread_obj
 {
        struct ast_bridge_config bconfig;
@@ -667,98 +373,12 @@
        unsigned int return_to_pbx:1;
 };
 
-static int parkinglot_hash_cb(const void *obj, const int flags)
-{
-       const struct ast_parkinglot *parkinglot = obj;
-
-       return ast_str_case_hash(parkinglot->name);
-}
-
-static int parkinglot_cmp_cb(void *obj, void *arg, int flags)
-{
-       struct ast_parkinglot *parkinglot = obj;
-       struct ast_parkinglot *parkinglot2 = arg;
-
-       return !strcasecmp(parkinglot->name, parkinglot2->name) ? CMP_MATCH | 
CMP_STOP : 0;
-}
-
-/*!
- * \brief store context, extension and priority
- * \param chan, context, ext, pri
- */
-static void set_c_e_p(struct ast_channel *chan, const char *context, const 
char *ext, int pri)
-{
-       ast_channel_context_set(chan, context);
-       ast_channel_exten_set(chan, ext);
-       ast_channel_priority_set(chan, pri);
-}
-
 static const struct ast_datastore_info channel_app_data_datastore = {
        .type = "Channel appdata datastore",
        .destroy = ast_free_ptr,
 };
 
-/*! \brief Notify metermaids that we've changed an extension */
-static void notify_metermaids(const char *exten, char *context, enum 
ast_device_state state)
-{
-       ast_debug(4, "Notification of state change to metermaids %s@%s\n to 
state '%s'",
-               exten, context, ast_devstate2str(state));
-
-       ast_devstate_changed(state, AST_DEVSTATE_CACHABLE, "park:%s@%s", exten, 
context);
-}
-
-/*! \brief metermaids callback from devicestate.c */
-static enum ast_device_state metermaidstate(const char *data)
-{
-       char *context;
-       char *exten;
-
-       context = ast_strdupa(data);
-
-       exten = strsep(&context, "@");
-       if (!context)
-               return AST_DEVICE_INVALID;
-
-       ast_debug(4, "Checking state of exten %s in context %s\n", exten, 
context);
-
-       if (!ast_exists_extension(NULL, context, exten, 1, NULL))
-               return AST_DEVICE_NOT_INUSE;
-
-       return AST_DEVICE_INUSE;
-}
-
-/*! Options to pass to park_call_full */
-enum ast_park_call_options {
-       /*! Provide ringing to the parked caller instead of music on hold */
-       AST_PARK_OPT_RINGING =   (1 << 0),
-       /*! Randomly choose a parking spot for the caller instead of choosing
-        *  the first one that is available. */
-       AST_PARK_OPT_RANDOMIZE = (1 << 1),
-       /*! Do not announce the parking number */
-       AST_PARK_OPT_SILENCE = (1 << 2),
-};
-
-/*! Optional additional parking options when parking a call. */
-struct ast_park_call_args {
-       /*! How long to wait in the parking lot before the call gets sent back
-        *  to the specified return extension (or a best guess at where it came
-        *  from if not explicitly specified). */
-       int timeout;
-       /*! An output parameter to store the parking space where the parked 
caller
-        *  was placed. */
-       int *extout;
-       const char *orig_chan_name;
-       const char *return_con;
-       const char *return_ext;
-       int return_pri;
-       uint32_t flags;
-       /*! Parked user that has already obtained a parking space */
-       struct parkeduser *pu;
-       /*! \brief Parkinglot to be parked in */
-       struct ast_parkinglot *parkinglot;
-};
-
-/*!
+/*
  * \internal
  * \brief Get the extension for a given builtin feature
  *
@@ -1462,472 +1082,6 @@
        return res;
 }
 
-/*! \brief Output parking event to manager */
-static void post_manager_event(const char *s, struct parkeduser *pu)
-{
-       manager_event(EVENT_FLAG_CALL, s,
-               "Exten: %s\r\n"
-               "Channel: %s\r\n"
-               "Parkinglot: %s\r\n"
-               "CallerIDNum: %s\r\n"
-               "CallerIDName: %s\r\n"
-               "ConnectedLineNum: %s\r\n"
-               "ConnectedLineName: %s\r\n"
-               "UniqueID: %s\r\n",
-               pu->parkingexten,
-               ast_channel_name(pu->chan),
-               pu->parkinglot->name,
-               S_COR(ast_channel_caller(pu->chan)->id.number.valid, 
ast_channel_caller(pu->chan)->id.number.str, "<unknown>"),
-               S_COR(ast_channel_caller(pu->chan)->id.name.valid, 
ast_channel_caller(pu->chan)->id.name.str, "<unknown>"),
-               S_COR(ast_channel_connected(pu->chan)->id.number.valid, 
ast_channel_connected(pu->chan)->id.number.str, "<unknown>"),
-               S_COR(ast_channel_connected(pu->chan)->id.name.valid, 
ast_channel_connected(pu->chan)->id.name.str, "<unknown>"),
-               ast_channel_uniqueid(pu->chan)
-               );
-}
-
-static char *callback_dialoptions(struct ast_flags *features_callee, struct 
ast_flags *features_caller, char *options, size_t len)
-{
-       int i = 0;
-       enum {
-               OPT_CALLEE_REDIRECT   = 't',
-               OPT_CALLER_REDIRECT   = 'T',
-               OPT_CALLEE_AUTOMON    = 'w',
-               OPT_CALLER_AUTOMON    = 'W',
-               OPT_CALLEE_DISCONNECT = 'h',
-               OPT_CALLER_DISCONNECT = 'H',
-               OPT_CALLEE_PARKCALL   = 'k',
-               OPT_CALLER_PARKCALL   = 'K',
-       };
-
-       memset(options, 0, len);
-       if (ast_test_flag(features_caller, AST_FEATURE_REDIRECT) && i < len) {
-               options[i++] = OPT_CALLER_REDIRECT;
-       }
-       if (ast_test_flag(features_caller, AST_FEATURE_AUTOMON) && i < len) {
-               options[i++] = OPT_CALLER_AUTOMON;
-       }
-       if (ast_test_flag(features_caller, AST_FEATURE_DISCONNECT) && i < len) {
-               options[i++] = OPT_CALLER_DISCONNECT;
-       }
-       if (ast_test_flag(features_caller, AST_FEATURE_PARKCALL) && i < len) {
-               options[i++] = OPT_CALLER_PARKCALL;
-       }
-
-       if (ast_test_flag(features_callee, AST_FEATURE_REDIRECT) && i < len) {
-               options[i++] = OPT_CALLEE_REDIRECT;
-       }
-       if (ast_test_flag(features_callee, AST_FEATURE_AUTOMON) && i < len) {
-               options[i++] = OPT_CALLEE_AUTOMON;
-       }
-       if (ast_test_flag(features_callee, AST_FEATURE_DISCONNECT) && i < len) {
-               options[i++] = OPT_CALLEE_DISCONNECT;
-       }
-       if (ast_test_flag(features_callee, AST_FEATURE_PARKCALL) && i < len) {
-               options[i++] = OPT_CALLEE_PARKCALL;
-       }
-
-       return options;
-}
-
-/*!
- * \internal
- * \brief Run management on a parked call.
- *
- * \note The parkinglot parkings list is locked on entry.
- *
- * \retval TRUE if the parking completed.
- */
-static int manage_parked_call(struct parkeduser *pu, const struct pollfd 
*pfds, int nfds, struct pollfd **new_pfds, int *new_nfds, int *ms)
-{
-       struct ast_channel *chan = pu->chan;    /* shorthand */
-       int tms;        /* timeout for this item */
-       int x;          /* fd index in channel */
-
-       tms = ast_tvdiff_ms(ast_tvnow(), pu->start);
-       if (tms > pu->parkingtime) {
-               /*
-                * Call has been parked too long.
-                * Stop entertaining the caller.
-                */
-               switch (pu->hold_method) {
-               case AST_CONTROL_HOLD:
-                       ast_indicate(pu->chan, AST_CONTROL_UNHOLD);
-                       break;
-               case AST_CONTROL_RINGING:
-                       ast_indicate(pu->chan, -1);
-                       break;
-               default:
-                       break;
-               }
-               pu->hold_method = 0;
-
-               /* Get chan, exten from derived kludge */
-               if (pu->peername[0]) {
-                       char *peername;
-                       char *dash;
-                       char *peername_flat; /* using something like DAHDI/52 
for an extension name is NOT a good idea */
-                       char parkingslot[AST_MAX_EXTENSION]; /* buffer for 
parkinglot slot number */
-                       int i;
-
-                       peername = ast_strdupa(pu->peername);
-                       dash = strrchr(peername, '-');
-                       if (dash) {
-                               *dash = '\0';
-                       }
-
-                       peername_flat = ast_strdupa(peername);
-                       for (i = 0; peername_flat[i]; i++) {
-                               if (peername_flat[i] == '/') {
-                                       peername_flat[i] = '_';
-                               }
-                       }
-
-                       if (!ast_context_find_or_create(NULL, NULL, 
parking_con_dial, registrar)) {
-                               ast_log(LOG_ERROR,
-                                       "Parking dial context '%s' does not 
exist and unable to create\n",
-                                       parking_con_dial);
-                       } else {
-                               char returnexten[AST_MAX_EXTENSION];
-                               char comebackdialtime[AST_MAX_EXTENSION];
-                               struct ast_datastore *features_datastore;
-                               struct ast_dial_features *dialfeatures;
-
-                               if (!strncmp(peername, "Parked/", 7)) {
-                                       peername += 7;
-                               }
-
-                               ast_channel_lock(chan);
-                               features_datastore = 
ast_channel_datastore_find(chan, &dial_features_info,
-                                       NULL);
-                               if (features_datastore && (dialfeatures = 
features_datastore->data)) {
-                                       char buf[MAX_DIAL_FEATURE_OPTIONS] = 
{0,};
-
-                                       snprintf(returnexten, 
sizeof(returnexten), "%s,%u,%s", peername,
-                                               
pu->parkinglot->cfg.comebackdialtime,
-                                               
callback_dialoptions(&dialfeatures->peer_features,
-                                                       
&dialfeatures->my_features, buf, sizeof(buf)));
-                               } else { /* Existing default */
-                                       ast_log(LOG_NOTICE, "Dial features not 
found on %s, using default!\n",
-                                               ast_channel_name(chan));
-                                       snprintf(returnexten, 
sizeof(returnexten), "%s,%u,t", peername,
-                                               
pu->parkinglot->cfg.comebackdialtime);
-                               }
-                               ast_channel_unlock(chan);
-
-                               snprintf(comebackdialtime, 
sizeof(comebackdialtime), "%u",
-                                               
pu->parkinglot->cfg.comebackdialtime);
-                               pbx_builtin_setvar_helper(chan, 
"COMEBACKDIALTIME", comebackdialtime);
-
-                               pbx_builtin_setvar_helper(chan, "PARKER", 
peername);
-
-                       }
-
-                       snprintf(parkingslot, sizeof(parkingslot), "%d", 
pu->parkingnum);
-                       pbx_builtin_setvar_helper(chan, "PARKINGSLOT", 
parkingslot);
-                       pbx_builtin_setvar_helper(chan, "PARKEDLOT", 
pu->parkinglot->name);
-
-                       if (pu->options_specified) {
-                               /*
-                                * Park() was called with overriding return 
arguments, respect
-                                * those arguments.
-                                */
-                               set_c_e_p(chan, pu->context, pu->exten, 
pu->priority);
-                       } else if (pu->parkinglot->cfg.comebacktoorigin) {
-                               set_c_e_p(chan, parking_con_dial, 
peername_flat, 1);
-                       } else {
-                               /* Handle fallback when extensions don't exist 
here since that logic was removed from pbx */
-                               if (ast_exists_extension(chan, 
pu->parkinglot->cfg.comebackcontext, peername_flat, 1, NULL)) {

[... 1436 lines stripped ...]

--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

svn-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/svn-commits

Reply via email to