[asterisk-commits] dlee: branch dlee/ASTERISK-21969 r397805 - in /team/dlee/ASTERISK-21969: ./ a...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Aug 27 13:45:39 CDT 2013


Author: dlee
Date: Tue Aug 27 13:45:23 2013
New Revision: 397805

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=397805
Log:
Merged revisions 396842-397243 from http://svn.asterisk.org/svn/asterisk/trunk

Removed:
    team/dlee/ASTERISK-21969/res/res_pjsip/config_security.c
Modified:
    team/dlee/ASTERISK-21969/   (props changed)
    team/dlee/ASTERISK-21969/CHANGES
    team/dlee/ASTERISK-21969/apps/app_meetme.c
    team/dlee/ASTERISK-21969/apps/app_queue.c
    team/dlee/ASTERISK-21969/apps/app_voicemail.c
    team/dlee/ASTERISK-21969/cel/cel_custom.c
    team/dlee/ASTERISK-21969/cel/cel_manager.c
    team/dlee/ASTERISK-21969/cel/cel_odbc.c
    team/dlee/ASTERISK-21969/cel/cel_pgsql.c
    team/dlee/ASTERISK-21969/cel/cel_radius.c
    team/dlee/ASTERISK-21969/cel/cel_sqlite3_custom.c
    team/dlee/ASTERISK-21969/cel/cel_tds.c
    team/dlee/ASTERISK-21969/channels/chan_dahdi.c
    team/dlee/ASTERISK-21969/channels/chan_iax2.c
    team/dlee/ASTERISK-21969/channels/chan_mgcp.c
    team/dlee/ASTERISK-21969/channels/chan_sip.c
    team/dlee/ASTERISK-21969/channels/chan_skinny.c
    team/dlee/ASTERISK-21969/channels/chan_unistim.c
    team/dlee/ASTERISK-21969/channels/sig_analog.c
    team/dlee/ASTERISK-21969/channels/sig_pri.c
    team/dlee/ASTERISK-21969/channels/sig_pri.h
    team/dlee/ASTERISK-21969/channels/sip/dialplan_functions.c
    team/dlee/ASTERISK-21969/channels/sip/include/sip.h
    team/dlee/ASTERISK-21969/configs/h323.conf.sample
    team/dlee/ASTERISK-21969/configs/sip.conf.sample
    team/dlee/ASTERISK-21969/funcs/func_presencestate.c
    team/dlee/ASTERISK-21969/include/asterisk/_private.h
    team/dlee/ASTERISK-21969/include/asterisk/astobj2.h
    team/dlee/ASTERISK-21969/include/asterisk/bridge.h
    team/dlee/ASTERISK-21969/include/asterisk/bridge_channel.h
    team/dlee/ASTERISK-21969/include/asterisk/bridge_channel_internal.h
    team/dlee/ASTERISK-21969/include/asterisk/cel.h
    team/dlee/ASTERISK-21969/include/asterisk/devicestate.h
    team/dlee/ASTERISK-21969/include/asterisk/doxygen/architecture.h
    team/dlee/ASTERISK-21969/include/asterisk/event.h
    team/dlee/ASTERISK-21969/include/asterisk/event_defs.h
    team/dlee/ASTERISK-21969/include/asterisk/parking.h
    team/dlee/ASTERISK-21969/include/asterisk/res_pjsip.h
    team/dlee/ASTERISK-21969/include/asterisk/security_events_defs.h
    team/dlee/ASTERISK-21969/include/asterisk/utils.h
    team/dlee/ASTERISK-21969/main/asterisk.c
    team/dlee/ASTERISK-21969/main/astfd.c
    team/dlee/ASTERISK-21969/main/bridge.c
    team/dlee/ASTERISK-21969/main/bridge_channel.c
    team/dlee/ASTERISK-21969/main/ccss.c
    team/dlee/ASTERISK-21969/main/cdr.c
    team/dlee/ASTERISK-21969/main/cel.c
    team/dlee/ASTERISK-21969/main/data.c
    team/dlee/ASTERISK-21969/main/db.c
    team/dlee/ASTERISK-21969/main/devicestate.c
    team/dlee/ASTERISK-21969/main/event.c
    team/dlee/ASTERISK-21969/main/features.c
    team/dlee/ASTERISK-21969/main/file.c
    team/dlee/ASTERISK-21969/main/format.c
    team/dlee/ASTERISK-21969/main/hashtab.c
    team/dlee/ASTERISK-21969/main/indications.c
    team/dlee/ASTERISK-21969/main/manager.c
    team/dlee/ASTERISK-21969/main/message.c
    team/dlee/ASTERISK-21969/main/parking.c
    team/dlee/ASTERISK-21969/main/pbx.c
    team/dlee/ASTERISK-21969/main/pickup.c
    team/dlee/ASTERISK-21969/main/presencestate.c
    team/dlee/ASTERISK-21969/main/rtp_engine.c
    team/dlee/ASTERISK-21969/main/security_events.c
    team/dlee/ASTERISK-21969/main/stasis.c
    team/dlee/ASTERISK-21969/main/stasis_cache.c
    team/dlee/ASTERISK-21969/main/stasis_cache_pattern.c
    team/dlee/ASTERISK-21969/main/stasis_channels.c
    team/dlee/ASTERISK-21969/main/threadstorage.c
    team/dlee/ASTERISK-21969/main/utils.c
    team/dlee/ASTERISK-21969/main/xmldoc.c
    team/dlee/ASTERISK-21969/res/parking/parking_applications.c
    team/dlee/ASTERISK-21969/res/parking/parking_bridge_features.c
    team/dlee/ASTERISK-21969/res/parking/parking_manager.c
    team/dlee/ASTERISK-21969/res/parking/parking_ui.c
    team/dlee/ASTERISK-21969/res/parking/res_parking.h
    team/dlee/ASTERISK-21969/res/res_corosync.c
    team/dlee/ASTERISK-21969/res/res_jabber.c
    team/dlee/ASTERISK-21969/res/res_parking.c
    team/dlee/ASTERISK-21969/res/res_pjsip.c
    team/dlee/ASTERISK-21969/res/res_pjsip/pjsip_configuration.c
    team/dlee/ASTERISK-21969/res/res_pjsip_acl.c
    team/dlee/ASTERISK-21969/res/res_pjsip_dtmf_info.c
    team/dlee/ASTERISK-21969/res/res_pjsip_endpoint_identifier_ip.c
    team/dlee/ASTERISK-21969/res/res_pjsip_registrar.c
    team/dlee/ASTERISK-21969/res/res_rtp_asterisk.c
    team/dlee/ASTERISK-21969/res/res_security_log.c
    team/dlee/ASTERISK-21969/res/res_xmpp.c
    team/dlee/ASTERISK-21969/tests/test_abstract_jb.c
    team/dlee/ASTERISK-21969/tests/test_cdr.c
    team/dlee/ASTERISK-21969/tests/test_cel.c
    team/dlee/ASTERISK-21969/tests/test_event.c
    team/dlee/ASTERISK-21969/tests/test_jitterbuf.c
    team/dlee/ASTERISK-21969/tests/test_stasis.c
    team/dlee/ASTERISK-21969/tests/test_voicemail_api.c

Propchange: team/dlee/ASTERISK-21969/
------------------------------------------------------------------------------
--- branch-11-blocked (original)
+++ branch-11-blocked Tue Aug 27 13:45:23 2013
@@ -1,1 +1,1 @@
-/branches/11:373240,375247,375702,385356,395020,396441
+/branches/11:373240,375247,375702,385356,395020,396441,397034

Propchange: team/dlee/ASTERISK-21969/
------------------------------------------------------------------------------
Binary property 'branch-11-merged' - no diff available.

Propchange: team/dlee/ASTERISK-21969/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Tue Aug 27 13:45:23 2013
@@ -1,1 +1,1 @@
-/trunk:1-396840
+/trunk:1-397243

Modified: team/dlee/ASTERISK-21969/CHANGES
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/CHANGES?view=diff&rev=397805&r1=397804&r2=397805
==============================================================================
--- team/dlee/ASTERISK-21969/CHANGES (original)
+++ team/dlee/ASTERISK-21969/CHANGES Tue Aug 27 13:45:23 2013
@@ -553,6 +553,10 @@
    set of proxies by using a pre-loaded route-set defined by the Path headers in
    the REGISTER request. See Realtime updates for more configuration information.
 
+ * The SIP_CODEC family of variables may now specify more than one codec. Each
+   codec must be separated by a comma. The first codec specified is the
+   preferred codec for the offer. This allows a dialplan writer to specify both
+   audio and video codecs, e.g., Set(SIP_CODEC=ulaw,h264)
 
 Functions
 ------------------

Modified: team/dlee/ASTERISK-21969/apps/app_meetme.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/apps/app_meetme.c?view=diff&rev=397805&r1=397804&r2=397805
==============================================================================
--- team/dlee/ASTERISK-21969/apps/app_meetme.c (original)
+++ team/dlee/ASTERISK-21969/apps/app_meetme.c Tue Aug 27 13:45:23 2013
@@ -750,9 +750,9 @@
 #define CONFFLAG_INTROMSG           (1ULL << 32) /*!< If set play an intro announcement at start of conference */
 #define CONFFLAG_INTROUSER_VMREC    (1ULL << 33)
 /*! If there's only one person left in a conference when someone leaves, kill the conference */
-#define CONFFLAG_KILL_LAST_MAN_STANDING ((uint64_t)1 << 34)
+#define CONFFLAG_KILL_LAST_MAN_STANDING (1ULL << 34)
 /*! If set, don't enable a denoiser for the channel */
-#define CONFFLAG_DONT_DENOISE       (1ULL << 33)
+#define CONFFLAG_DONT_DENOISE       (1ULL << 35)
 
 enum {
 	OPT_ARG_WAITMARKED = 0,

Modified: team/dlee/ASTERISK-21969/apps/app_queue.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/apps/app_queue.c?view=diff&rev=397805&r1=397804&r2=397805
==============================================================================
--- team/dlee/ASTERISK-21969/apps/app_queue.c (original)
+++ team/dlee/ASTERISK-21969/apps/app_queue.c Tue Aug 27 13:45:23 2013
@@ -96,7 +96,6 @@
 #include "asterisk/astdb.h"
 #include "asterisk/devicestate.h"
 #include "asterisk/stringfields.h"
-#include "asterisk/event.h"
 #include "asterisk/astobj2.h"
 #include "asterisk/strings.h"
 #include "asterisk/global_datastores.h"
@@ -2060,11 +2059,12 @@
 }
 
 /*!
- * \internal \brief Determine if a queue member is available
+ * \internal
+ * \brief Determine if a queue member is available
  * \retval 1 if the member is available
  * \retval 0 if the member is not available
  */
-static int is_member_available(struct member *mem)
+static int is_member_available(struct call_queue *q, struct member *mem)
 {
 	int available = 0;
 
@@ -2089,6 +2089,10 @@
 			break;
 	}
 
+	/* Let wrapuptimes override device state availability */
+	if (mem->lastcall && q->wrapuptime && (time(NULL) - q->wrapuptime < mem->lastcall)) {
+		available = 0;
+	}
 	return available;
 }
 
@@ -2139,7 +2143,7 @@
 
 			/* check every member until we find one NOT_INUSE */
 			if (!avail) {
-				avail = is_member_available(m);
+				avail = is_member_available(q, m);
 			}
 			if (avail && found_member) {
 				/* early exit as we've found an available member and the member of interest */
@@ -3703,7 +3707,7 @@
 	mem_iter = ao2_iterator_init(q->members, 0);
 	while ((mem = ao2_iterator_next(&mem_iter))) {
 
-		avl += is_member_available(mem);
+		avl += is_member_available(q, mem);
 		ao2_ref(mem, -1);
 
 		/* If autofill is not enabled or if the queue's strategy is ringall, then
@@ -6227,7 +6231,7 @@
 			member_add_to_queue(q, new_member);
 			queue_publish_member_blob(queue_member_added_type(), queue_member_blob_create(q, new_member));
 
-			if (is_member_available(new_member)) {
+			if (is_member_available(q, new_member)) {
 				ast_devstate_changed(AST_DEVICE_NOT_INUSE, AST_DEVSTATE_CACHABLE, "Queue:%s_avail", q->name);
 			}
 
@@ -6313,7 +6317,7 @@
 					dump_queue_members(q);
 				}
 
-				if (is_member_available(mem)) {
+				if (is_member_available(q, mem)) {
 					ast_devstate_changed(AST_DEVICE_NOT_INUSE, AST_DEVSTATE_CACHABLE, "Queue:%s_avail", q->name);
 				} else if (!num_available_members(q)) {
 					ast_devstate_changed(AST_DEVICE_INUSE, AST_DEVSTATE_CACHABLE, "Queue:%s_avail", q->name);

Modified: team/dlee/ASTERISK-21969/apps/app_voicemail.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/apps/app_voicemail.c?view=diff&rev=397805&r1=397804&r2=397805
==============================================================================
--- team/dlee/ASTERISK-21969/apps/app_voicemail.c (original)
+++ team/dlee/ASTERISK-21969/apps/app_voicemail.c Tue Aug 27 13:45:23 2013
@@ -131,7 +131,6 @@
 #include "asterisk/strings.h"
 #include "asterisk/smdi.h"
 #include "asterisk/astobj2.h"
-#include "asterisk/event.h"
 #include "asterisk/taskprocessor.h"
 #include "asterisk/test.h"
 

Modified: team/dlee/ASTERISK-21969/cel/cel_custom.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/cel/cel_custom.c?view=diff&rev=397805&r1=397804&r2=397805
==============================================================================
--- team/dlee/ASTERISK-21969/cel/cel_custom.c (original)
+++ team/dlee/ASTERISK-21969/cel/cel_custom.c Tue Aug 27 13:45:23 2013
@@ -64,7 +64,7 @@
 	AST_RWLIST_ENTRY(cel_config) list;
 };
 
-static struct ast_event_sub *event_sub = NULL;
+#define CUSTOM_BACKEND_NAME "CEL Custom CSV Logging"
 
 static AST_RWLIST_HEAD_STATIC(sinks, cel_config);
 
@@ -116,7 +116,7 @@
 	return res;
 }
 
-static void custom_log(const struct ast_event *event, void *userdata)
+static void custom_log(struct ast_event *event)
 {
 	struct ast_channel *dummy;
 	struct ast_str *str;
@@ -167,19 +167,15 @@
 
 static int unload_module(void)
 {
-	if (event_sub) {
-		event_sub = ast_event_unsubscribe(event_sub);
-	}
 
 	if (AST_RWLIST_WRLOCK(&sinks)) {
-		event_sub = ast_event_subscribe(AST_EVENT_CEL, custom_log, "CEL Custom CSV Logging",
-			NULL, AST_EVENT_IE_END);
 		ast_log(LOG_ERROR, "Unable to lock sink list.  Unload failed.\n");
 		return -1;
 	}
 
 	free_config();
 	AST_RWLIST_UNLOCK(&sinks);
+	ast_cel_backend_unregister(CUSTOM_BACKEND_NAME);
 	return 0;
 }
 
@@ -193,8 +189,9 @@
 	load_config();
 	AST_RWLIST_UNLOCK(&sinks);
 
-	event_sub = ast_event_subscribe(AST_EVENT_CEL, custom_log, "CEL Custom CSV Logging",
-		NULL, AST_EVENT_IE_END);
+	if (ast_cel_backend_register(CUSTOM_BACKEND_NAME, custom_log)) {
+		return AST_MODULE_LOAD_FAILURE;
+	}
 	return AST_MODULE_LOAD_SUCCESS;
 }
 

Modified: team/dlee/ASTERISK-21969/cel/cel_manager.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/cel/cel_manager.c?view=diff&rev=397805&r1=397804&r2=397805
==============================================================================
--- team/dlee/ASTERISK-21969/cel/cel_manager.c (original)
+++ team/dlee/ASTERISK-21969/cel/cel_manager.c Tue Aug 27 13:45:23 2013
@@ -57,12 +57,12 @@
 /*! \brief show_user_def is off by default */
 #define CEL_SHOW_USERDEF_DEFAULT	0
 
+#define MANAGER_BACKEND_NAME "Manager Event Logging"
+
 /*! TRUE if we should set the EventName header to USER_DEFINED on user events. */
 static unsigned char cel_show_user_def;
 
-static struct ast_event_sub *event_sub;
-
-static void manager_log(const struct ast_event *event, void *userdata)
+static void manager_log(struct ast_event *event)
 {
 	struct ast_tm timeresult;
 	char start_time[80] = "";
@@ -180,12 +180,9 @@
 
 	cel_show_user_def = new_cel_show_user_def;
 	if (enablecel && !newenablecel) {
-		if (event_sub) {
-			event_sub = ast_event_unsubscribe(event_sub);
-		}
+		ast_cel_backend_unregister(MANAGER_BACKEND_NAME);
 	} else if (!enablecel && newenablecel) {
-		event_sub = ast_event_subscribe(AST_EVENT_CEL, manager_log, "Manager Event Logging", NULL, AST_EVENT_IE_END);
-		if (!event_sub) {
+		if (ast_cel_backend_register(MANAGER_BACKEND_NAME, manager_log)) {
 			ast_log(LOG_ERROR, "Unable to register Asterisk Call Manager CEL handling\n");
 		}
 	}
@@ -196,9 +193,7 @@
 
 static int unload_module(void)
 {
-	if (event_sub) {
-		event_sub = ast_event_unsubscribe(event_sub);
-	}
+	ast_cel_backend_unregister(MANAGER_BACKEND_NAME);
 	return 0;
 }
 

Modified: team/dlee/ASTERISK-21969/cel/cel_odbc.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/cel/cel_odbc.c?view=diff&rev=397805&r1=397804&r2=397805
==============================================================================
--- team/dlee/ASTERISK-21969/cel/cel_odbc.c (original)
+++ team/dlee/ASTERISK-21969/cel/cel_odbc.c Tue Aug 27 13:45:23 2013
@@ -51,7 +51,8 @@
 #include "asterisk/module.h"
 
 #define	CONFIG	"cel_odbc.conf"
-static struct ast_event_sub *event_sub = NULL;
+
+#define ODBC_BACKEND_NAME "ODBC CEL backend"
 
 /*! \brief show_user_def is off by default */
 #define CEL_SHOW_USERDEF_DEFAULT	0
@@ -367,7 +368,7 @@
 				}																\
 			} while (0)
 
-static void odbc_log(const struct ast_event *event, void *userdata)
+static void odbc_log(struct ast_event *event)
 {
 	struct tables *tableptr;
 	struct columns *entry;
@@ -789,18 +790,12 @@
 
 static int unload_module(void)
 {
-	if (event_sub) {
-		event_sub = ast_event_unsubscribe(event_sub);
-	}
 	if (AST_RWLIST_WRLOCK(&odbc_tables)) {
-		event_sub = ast_event_subscribe(AST_EVENT_CEL, odbc_log, "ODBC CEL backend", NULL, AST_EVENT_IE_END);
-		if (!event_sub) {
-			ast_log(LOG_ERROR, "Unable to subscribe to CEL events\n");
-		}
 		ast_log(LOG_ERROR, "Unable to lock column list.  Unload failed.\n");
 		return -1;
 	}
 
+	ast_cel_backend_unregister(ODBC_BACKEND_NAME);
 	free_config();
 	AST_RWLIST_UNLOCK(&odbc_tables);
 	AST_RWLIST_HEAD_DESTROY(&odbc_tables);
@@ -814,13 +809,13 @@
 
 	if (AST_RWLIST_WRLOCK(&odbc_tables)) {
 		ast_log(LOG_ERROR, "Unable to lock column list.  Load failed.\n");
-		return 0;
+		return AST_MODULE_LOAD_FAILURE;
 	}
 	load_config();
 	AST_RWLIST_UNLOCK(&odbc_tables);
-	event_sub = ast_event_subscribe(AST_EVENT_CEL, odbc_log, "ODBC CEL backend", NULL, AST_EVENT_IE_END);
-	if (!event_sub) {
+	if (ast_cel_backend_register(ODBC_BACKEND_NAME, odbc_log)) {
 		ast_log(LOG_ERROR, "Unable to subscribe to CEL events\n");
+		return AST_MODULE_LOAD_FAILURE;
 	}
 	return AST_MODULE_LOAD_SUCCESS;
 }
@@ -829,7 +824,7 @@
 {
 	if (AST_RWLIST_WRLOCK(&odbc_tables)) {
 		ast_log(LOG_ERROR, "Unable to lock column list.  Reload failed.\n");
-		return -1;
+		return AST_MODULE_LOAD_FAILURE;
 	}
 
 	free_config();
@@ -838,7 +833,7 @@
 	return AST_MODULE_LOAD_SUCCESS;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "ODBC CEL backend",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, ODBC_BACKEND_NAME,
 	.load = load_module,
 	.unload = unload_module,
 	.reload = reload,

Modified: team/dlee/ASTERISK-21969/cel/cel_pgsql.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/cel/cel_pgsql.c?view=diff&rev=397805&r1=397804&r2=397805
==============================================================================
--- team/dlee/ASTERISK-21969/cel/cel_pgsql.c (original)
+++ team/dlee/ASTERISK-21969/cel/cel_pgsql.c Tue Aug 27 13:45:23 2013
@@ -58,6 +58,8 @@
 
 #define DATE_FORMAT "%Y-%m-%d %T.%6q"
 
+#define PGSQL_BACKEND_NAME "CEL PGSQL backend"
+
 static char *config = "cel_pgsql.conf";
 static char *pghostname = NULL, *pgdbname = NULL, *pgdbuser = NULL, *pgpassword = NULL, *pgdbport = NULL, *table = NULL;
 static int connected = 0;
@@ -73,7 +75,6 @@
 
 static PGconn	*conn = NULL;
 static PGresult	*result = NULL;
-static struct ast_event_sub *event_sub = NULL;
 
 struct columns {
 	char *name;
@@ -113,7 +114,7 @@
 		} \
 	} while (0)
 
-static void pgsql_log(const struct ast_event *event, void *userdata)
+static void pgsql_log(struct ast_event *event)
 {
 	struct ast_tm tm;
 	char timestr[128];
@@ -346,10 +347,7 @@
 {
 	struct columns *current;
 	AST_RWLIST_WRLOCK(&psql_columns);
-	if (event_sub) {
-		event_sub = ast_event_unsubscribe(event_sub);
-		event_sub = NULL;
-	}
+	ast_cel_backend_unregister(PGSQL_BACKEND_NAME);
 	if (conn) {
 		PQfinish(conn);
 		conn = NULL;
@@ -561,9 +559,7 @@
 	process_my_load_module(cfg);
 	ast_config_destroy(cfg);
 
-	event_sub = ast_event_subscribe(AST_EVENT_CEL, pgsql_log, "CEL PGSQL backend", NULL, AST_EVENT_IE_END);
-
-	if (!event_sub) {
+	if (ast_cel_backend_register(PGSQL_BACKEND_NAME, pgsql_log)) {
 		ast_log(LOG_WARNING, "Unable to subscribe to CEL events for pgsql\n");
 		return AST_MODULE_LOAD_DECLINE;
 	}

Modified: team/dlee/ASTERISK-21969/cel/cel_radius.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/cel/cel_radius.c?view=diff&rev=397805&r1=397804&r2=397805
==============================================================================
--- team/dlee/ASTERISK-21969/cel/cel_radius.c (original)
+++ team/dlee/ASTERISK-21969/cel/cel_radius.c Tue Aug 27 13:45:23 2013
@@ -84,7 +84,8 @@
 static struct ast_flags global_flags = { RADIUS_FLAG_USEGMTIME | RADIUS_FLAG_LOGUNIQUEID | RADIUS_FLAG_LOGUSERFIELD };
 
 static rc_handle *rh = NULL;
-static struct ast_event_sub *event_sub = NULL;
+
+#define RADIUS_BACKEND_NAME "CEL Radius Logging"
 
 #define ADD_VENDOR_CODE(x,y) (rc_avpair_add(rh, send, x, &y, strlen(y), VENDOR_CODE))
 
@@ -174,7 +175,7 @@
 	return 0;
 }
 
-static void radius_log(const struct ast_event *event, void *userdata)
+static void radius_log(struct ast_event *event)
 {
 	int result = ERROR_RC;
 	VALUE_PAIR *send = NULL;
@@ -204,9 +205,7 @@
 
 static int unload_module(void)
 {
-	if (event_sub) {
-		event_sub = ast_event_unsubscribe(event_sub);
-	}
+	ast_cel_backend_unregister(RADIUS_BACKEND_NAME);
 	if (rh) {
 		rc_destroy(rh);
 		rh = NULL;
@@ -256,8 +255,7 @@
 		return AST_MODULE_LOAD_DECLINE;
 	}
 
-	event_sub = ast_event_subscribe(AST_EVENT_CEL, radius_log, "CEL Radius Logging", NULL, AST_EVENT_IE_END);
-	if (!event_sub) {
+	if (ast_cel_backend_register(RADIUS_BACKEND_NAME, radius_log)) {
 		rc_destroy(rh);
 		rh = NULL;
 		return AST_MODULE_LOAD_DECLINE;

Modified: team/dlee/ASTERISK-21969/cel/cel_sqlite3_custom.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/cel/cel_sqlite3_custom.c?view=diff&rev=397805&r1=397804&r2=397805
==============================================================================
--- team/dlee/ASTERISK-21969/cel/cel_sqlite3_custom.c (original)
+++ team/dlee/ASTERISK-21969/cel/cel_sqlite3_custom.c Tue Aug 27 13:45:23 2013
@@ -57,6 +57,8 @@
 #include "asterisk/options.h"
 #include "asterisk/stringfields.h"
 
+#define SQLITE_BACKEND_NAME "CEL sqlite3 custom backend"
+
 AST_MUTEX_DEFINE_STATIC(lock);
 
 static const char config_file[] = "cel_sqlite3_custom.conf";
@@ -69,7 +71,6 @@
  * \bug Handling of this var is crash prone on reloads
  */
 static char *columns;
-static struct ast_event_sub *event_sub = NULL;
 
 struct values {
 	char *expression;
@@ -229,7 +230,7 @@
 	}
 }
 
-static void write_cel(const struct ast_event *event, void *userdata)
+static void write_cel(struct ast_event *event)
 {
 	char *error = NULL;
 	char *sql = NULL;
@@ -293,9 +294,7 @@
 
 static int unload_module(void)
 {
-	if (event_sub) {
-		event_sub = ast_event_unsubscribe(event_sub);
-	}
+	ast_cel_backend_unregister(SQLITE_BACKEND_NAME);
 
 	free_config();
 
@@ -339,8 +338,7 @@
 		}
 	}
 
-	event_sub = ast_event_subscribe(AST_EVENT_CEL, write_cel, "CEL sqlite3 custom backend", NULL, AST_EVENT_IE_END);
-	if (!event_sub) {
+	if (ast_cel_backend_register(SQLITE_BACKEND_NAME, write_cel)) {
 		ast_log(LOG_ERROR, "Unable to register custom SQLite3 CEL handling\n");
 		free_config();
 		return AST_MODULE_LOAD_DECLINE;

Modified: team/dlee/ASTERISK-21969/cel/cel_tds.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/cel/cel_tds.c?view=diff&rev=397805&r1=397804&r2=397805
==============================================================================
--- team/dlee/ASTERISK-21969/cel/cel_tds.c (original)
+++ team/dlee/ASTERISK-21969/cel/cel_tds.c Tue Aug 27 13:45:23 2013
@@ -81,9 +81,9 @@
 
 #define DATE_FORMAT "%Y/%m/%d %T"
 
+#define TDS_BACKEND_NAME "CEL TDS logging backend"
+
 static char *config = "cel_tds.conf";
-
-static struct ast_event_sub *event_sub = NULL;
 
 struct cel_tds_config {
 	AST_DECLARE_STRING_FIELDS(
@@ -112,7 +112,7 @@
 static int mssql_connect(void);
 static int mssql_disconnect(void);
 
-static void tds_log(const struct ast_event *event, void *userdata)
+static void tds_log(struct ast_event *event)
 {
 	char start[80];
 	char *accountcode_ai, *clidnum_ai, *exten_ai, *context_ai, *clid_ai, *channel_ai, *app_ai, *appdata_ai, *uniqueid_ai, *linkedid_ai, *cidani_ai, *cidrdnis_ai, *ciddnid_ai, *peer_ai, *userfield_ai;
@@ -397,9 +397,7 @@
 
 static int tds_unload_module(void)
 {
-	if (event_sub) {
-		event_sub = ast_event_unsubscribe(event_sub);
-	}
+	ast_cel_backend_unregister(TDS_BACKEND_NAME);
 
 	if (settings) {
 		ast_mutex_lock(&tds_lock);
@@ -561,8 +559,7 @@
 	}
 
 	/* Register MSSQL CEL handler */
-	event_sub = ast_event_subscribe(AST_EVENT_CEL, tds_log, "CEL TDS logging backend", NULL, AST_EVENT_IE_END);
-	if (!event_sub) {
+	if (ast_cel_backend_register(TDS_BACKEND_NAME, tds_log)) {
 		ast_log(LOG_ERROR, "Unable to register MSSQL CEL handling\n");
 		ast_string_field_free_memory(settings);
 		ast_free(settings);

Modified: team/dlee/ASTERISK-21969/channels/chan_dahdi.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/channels/chan_dahdi.c?view=diff&rev=397805&r1=397804&r2=397805
==============================================================================
--- team/dlee/ASTERISK-21969/channels/chan_dahdi.c (original)
+++ team/dlee/ASTERISK-21969/channels/chan_dahdi.c Tue Aug 27 13:45:23 2013
@@ -119,7 +119,6 @@
 #include "asterisk/abstract_jb.h"
 #include "asterisk/smdi.h"
 #include "asterisk/astobj.h"
-#include "asterisk/event.h"
 #include "asterisk/devicestate.h"
 #include "asterisk/paths.h"
 #include "asterisk/ccss.h"
@@ -9246,10 +9245,6 @@
 	int idx;
 	struct ast_format tmpfmt;
 	RAII_VAR(struct ast_features_pickup_config *, pickup_cfg, NULL, ao2_cleanup);
-	RAII_VAR(struct ast_parking_bridge_feature_fn_table *, parking_provider,
-		ast_parking_get_bridge_features(),
-		ao2_cleanup);
-	int is_exten_parking;
 	const char *pickupexten;
 
 	ast_mutex_lock(&ss_thread_lock);
@@ -9563,6 +9558,8 @@
 		if (p->subs[SUB_THREEWAY].owner)
 			timeout = 999999;
 		while (len < AST_MAX_EXTENSION-1) {
+			int is_exten_parking = 0;
+
 			/* Read digit unless it's supposed to be immediate, in which case the
 			   only answer is 's' */
 			if (p->immediate)
@@ -9585,7 +9582,9 @@
 			} else {
 				tone_zone_play_tone(p->subs[idx].dfd, DAHDI_TONE_DIALTONE);
 			}
-			is_exten_parking = (parking_provider ? parking_provider->parking_is_exten_park(ast_channel_context(chan), exten) : 0);
+			if (ast_parking_provider_registered()) {
+				is_exten_parking = ast_parking_is_exten_park(ast_channel_context(chan), exten);
+			}
 			if (ast_exists_extension(chan, ast_channel_context(chan), exten, 1, p->cid_num) && !is_exten_parking) {
 				if (!res || !ast_matchmore_extension(chan, ast_channel_context(chan), exten, 1, p->cid_num)) {
 					if (getforward) {
@@ -9730,7 +9729,7 @@
 				ast_channel_lock(chan);
 				bridge_channel = ast_channel_get_bridge_channel(chan);
 				ast_channel_unlock(chan);
-				if (bridge_channel && !parking_provider->parking_blind_transfer_park(bridge_channel, ast_channel_context(chan), exten)) {
+				if (bridge_channel && !ast_parking_blind_transfer_park(bridge_channel, ast_channel_context(chan), exten)) {
 					ast_verb(3, "Parking call to '%s'\n", ast_channel_name(chan));
 				}
 				break;

Modified: team/dlee/ASTERISK-21969/channels/chan_iax2.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/channels/chan_iax2.c?view=diff&rev=397805&r1=397804&r2=397805
==============================================================================
--- team/dlee/ASTERISK-21969/channels/chan_iax2.c (original)
+++ team/dlee/ASTERISK-21969/channels/chan_iax2.c Tue Aug 27 13:45:23 2013
@@ -105,7 +105,6 @@
 #include "asterisk/netsock.h"
 #include "asterisk/stringfields.h"
 #include "asterisk/linkedlists.h"
-#include "asterisk/event.h"
 #include "asterisk/astobj2.h"
 #include "asterisk/timing.h"
 #include "asterisk/taskprocessor.h"

Modified: team/dlee/ASTERISK-21969/channels/chan_mgcp.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/channels/chan_mgcp.c?view=diff&rev=397805&r1=397804&r2=397805
==============================================================================
--- team/dlee/ASTERISK-21969/channels/chan_mgcp.c (original)
+++ team/dlee/ASTERISK-21969/channels/chan_mgcp.c Tue Aug 27 13:45:23 2013
@@ -79,7 +79,6 @@
 #include "asterisk/devicestate.h"
 #include "asterisk/stringfields.h"
 #include "asterisk/abstract_jb.h"
-#include "asterisk/event.h"
 #include "asterisk/chanvars.h"
 #include "asterisk/pktccops.h"
 #include "asterisk/stasis.h"
@@ -2981,9 +2980,6 @@
 	int getforward = 0;
 	int loop_pause = 100;
 	RAII_VAR(struct ast_features_pickup_config *, pickup_cfg, NULL, ao2_cleanup);
-	RAII_VAR(struct ast_parking_bridge_feature_fn_table *, parking_provider,
-		ast_parking_get_bridge_features(),
-		ao2_cleanup);
 	const char *pickupexten;
 
 	len = strlen(p->dtmf_buf);
@@ -3152,7 +3148,7 @@
 			getforward = 0;
 			memset(p->dtmf_buf, 0, sizeof(p->dtmf_buf));
 			len = 0;
-		} else if (parking_provider && parking_provider->parking_is_exten_park(ast_channel_context(chan), p->dtmf_buf) &&
+		} else if (ast_parking_provider_registered() && ast_parking_is_exten_park(ast_channel_context(chan), p->dtmf_buf) &&
 			sub->next->owner) {
 			RAII_VAR(struct ast_bridge_channel *, bridge_channel, NULL, ao2_cleanup);
 			/* This is a three way call, the main call being a real channel,
@@ -3160,7 +3156,7 @@
 			ast_channel_lock(chan);
 			bridge_channel = ast_channel_get_bridge_channel(chan);
 			ast_channel_unlock(chan);
-			if (bridge_channel && !parking_provider->parking_blind_transfer_park(bridge_channel, ast_channel_context(chan), p->dtmf_buf)) {
+			if (bridge_channel && !ast_parking_blind_transfer_park(bridge_channel, ast_channel_context(chan), p->dtmf_buf)) {
 				ast_verb(3, "Parking call to '%s'\n", ast_channel_name(chan));
 			}
 			break;

Modified: team/dlee/ASTERISK-21969/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/channels/chan_sip.c?view=diff&rev=397805&r1=397804&r2=397805
==============================================================================
--- team/dlee/ASTERISK-21969/channels/chan_sip.c (original)
+++ team/dlee/ASTERISK-21969/channels/chan_sip.c Tue Aug 27 13:45:23 2013
@@ -276,7 +276,6 @@
 #include "asterisk/threadstorage.h"
 #include "asterisk/translate.h"
 #include "asterisk/ast_version.h"
-#include "asterisk/event.h"
 #include "asterisk/data.h"
 #include "asterisk/aoc.h"
 #include "asterisk/message.h"
@@ -7351,35 +7350,57 @@
 	return 0;
 }
 
-/*! \brief Try setting codec suggested by the SIP_CODEC channel variable */
+/*! \brief Try setting the codecs suggested by the SIP_CODEC channel variable */
 static void try_suggested_sip_codec(struct sip_pvt *p)
 {
 	struct ast_format fmt;
-	const char *codec;
-
-	ast_format_clear(&fmt);
+	const char *codec_list;
+	char *codec_list_copy;
+	struct ast_format_cap *original_jointcaps;
+	char *codec;
+	int first_codec = 1;
+
+	char *strtok_ptr;
 
 	if (p->outgoing_call) {
-		codec = pbx_builtin_getvar_helper(p->owner, "SIP_CODEC_OUTBOUND");
-	} else if (!(codec = pbx_builtin_getvar_helper(p->owner, "SIP_CODEC_INBOUND"))) {
-		codec = pbx_builtin_getvar_helper(p->owner, "SIP_CODEC");
-	}
-
-	if (!codec)
+		codec_list = pbx_builtin_getvar_helper(p->owner, "SIP_CODEC_OUTBOUND");
+	} else if (!(codec_list = pbx_builtin_getvar_helper(p->owner, "SIP_CODEC_INBOUND"))) {
+		codec_list = pbx_builtin_getvar_helper(p->owner, "SIP_CODEC");
+	}
+
+	if (ast_strlen_zero(codec_list)) {
 		return;
-
-	ast_getformatbyname(codec, &fmt);
-	if (fmt.id) {
-		ast_log(LOG_NOTICE, "Changing codec to '%s' for this call because of ${SIP_CODEC} variable\n", codec);
-		if (ast_format_cap_iscompatible(p->jointcaps, &fmt)) {
-			ast_format_cap_set(p->jointcaps, &fmt);
-			ast_format_cap_set(p->caps, &fmt);
-		} else
-			ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because it is not shared by both ends.\n");
-	} else
-		ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because of unrecognized/not configured codec (check allow/disallow in sip.conf): %s\n", codec);
+	}
+
+	codec_list_copy = ast_strdupa(codec_list);
+	original_jointcaps = ast_format_cap_dup(p->jointcaps);
+
+	for (codec = strtok_r(codec_list_copy, ",", &strtok_ptr); codec; codec = strtok_r(NULL, ",", &strtok_ptr)) {
+		codec = ast_strip(codec);
+
+		if (!ast_getformatbyname(codec, &fmt)) {
+			ast_log(AST_LOG_NOTICE, "Ignoring ${SIP_CODEC*} variable because of unrecognized/not configured codec %s (check allow/disallow in sip.conf)\n", codec);
+			continue;
+		}
+		if (ast_format_cap_iscompatible(original_jointcaps, &fmt)) {
+			if (first_codec) {
+				ast_verb(4, "Set codec to '%s' for this call because of ${SIP_CODEC*} variable\n", codec);
+				ast_format_cap_set(p->jointcaps, &fmt);
+				ast_format_cap_set(p->caps, &fmt);
+				first_codec = 0;
+			} else {
+				ast_verb(4, "Add codec to '%s' for this call because of ${SIP_CODEC*} variable\n", codec);
+				ast_format_cap_add(p->jointcaps, &fmt);
+				ast_format_cap_add(p->caps, &fmt);
+			}
+		} else {
+			ast_log(AST_LOG_NOTICE, "Ignoring ${SIP_CODEC*} variable because it is not shared by both ends: %s\n", codec);
+		}
+	}
+	ast_format_cap_destroy(original_jointcaps);
 	return;
-}
+ }
+
 
 /*! \brief  sip_answer: Answer SIP call , send 200 OK on Invite
  * Part of PBX interface */
@@ -7724,7 +7745,10 @@
 	return res;
 }
 
-/*! \internal \brief Create and initialize UDPTL for the specified dialog
+/*!
+ * \internal
+ * \brief Create and initialize UDPTL for the specified dialog
+ *
  * \param p SIP private structure to create UDPTL object for
  * \pre p is locked
  * \pre p->owner is locked
@@ -14443,7 +14467,10 @@
 	return 0;
 }
 
-/*! \internal \brief Find the channel that is causing the RINGING update, ref'd */
+/*!
+ * \internal
+ * \brief Find the channel that is causing the RINGING update, ref'd
+ */
 static struct ast_channel *find_ringing_channel(struct ao2_container *device_state_info, struct sip_pvt *p)
 {
 	struct ao2_iterator citer;
@@ -16386,7 +16413,10 @@
 	}
 }
 
-/*! \internal \brief Create a new route
+/*!
+ * \internal
+ * \brief Create a new route
+ *
  * \retval NULL on error
  * \retval sip_route on success
  */
@@ -16415,7 +16445,10 @@
 	return route;
 }
 
-/*! \internal \brief copy route-set
+/*!
+ * \internal
+ * \brief copy route-set
+ *
  * \retval non-zero on failure
  * \retval 0 on success
  */
@@ -17045,7 +17078,9 @@
 	ast_sockaddr_split_hostport(*hostport, hostport, &dont_care, PARSE_PORT_IGNORE);
 }
 
-/*! \internal \brief Helper function to update a peer's lastmsgssent value
+/*!
+ * \internal
+ * \brief Helper function to update a peer's lastmsgssent value
  */
 static void update_peer_lastmsgssent(struct sip_peer *peer, int value, int locked)
 {
@@ -17059,13 +17094,16 @@
 }
 
 
-/*! \brief Verify registration of user
-	- Registration is done in several steps, first a REGISTER without auth
-	  to get a challenge (nonce) then a second one with auth
-	- Registration requests are only matched with peers that are marked as "dynamic"
+/*!
+ * \brief Verify registration of user
+ *
+ * \details
+ * - Registration is done in several steps, first a REGISTER without auth
+ *   to get a challenge (nonce) then a second one with auth
+ * - Registration requests are only matched with peers that are marked as "dynamic"
  */
 static enum check_auth_result register_verify(struct sip_pvt *p, struct ast_sockaddr *addr,
-					      struct sip_request *req, const char *uri)
+	struct sip_request *req, const char *uri)
 {
 	enum check_auth_result res = AUTH_NOT_FOUND;
 	struct sip_peer *peer;
@@ -27207,7 +27245,10 @@
 	return handler_result;
 }
 
-/*! \internal \brief Subscribe to MWI events for the specified peer
+/*!
+ * \internal
+ * \brief Subscribe to MWI events for the specified peer
+ *
  * \note The peer cannot be locked during this method.  sip_send_mwi_peer will
  * attempt to lock the peer after the event subscription lock is held; if the peer is locked during
  * this method then we will attempt to lock the event subscription lock but after the peer, creating
@@ -28183,9 +28224,7 @@
 
 	copy_socket_data(&p->socket, &req->socket);
 
-	if (ast_sockaddr_isnull(&p->recv)) { /* This may already be set before getting here */
-		ast_sockaddr_copy(&p->recv, addr);
-	}
+	ast_sockaddr_copy(&p->recv, addr);
 
 	/* if we have an owner, then this request has been authenticated */
 	if (p->owner) {

Modified: team/dlee/ASTERISK-21969/channels/chan_skinny.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/channels/chan_skinny.c?view=diff&rev=397805&r1=397804&r2=397805
==============================================================================
--- team/dlee/ASTERISK-21969/channels/chan_skinny.c (original)
+++ team/dlee/ASTERISK-21969/channels/chan_skinny.c Tue Aug 27 13:45:23 2013
@@ -77,7 +77,6 @@
 #include "asterisk/abstract_jb.h"
 #include "asterisk/threadstorage.h"
 #include "asterisk/devicestate.h"
-#include "asterisk/event.h"
 #include "asterisk/indications.h"
 #include "asterisk/linkedlists.h"
 #include "asterisk/stasis_endpoints.h"
@@ -6409,14 +6408,11 @@
 		{
 		char extout[AST_MAX_EXTENSION];
 		char message[32];
-		RAII_VAR(struct ast_parking_bridge_feature_fn_table *, parking_provider,
-			ast_parking_get_bridge_features(),
-			ao2_cleanup);
 		RAII_VAR(struct ast_bridge_channel *, bridge_channel, NULL, ao2_cleanup);
 		SKINNY_DEBUG(DEBUG_PACKET, 3, "Received STIMULUS_CALLPARK from %s, inst %d, callref %d\n",
 			d->name, instance, callreference);
 
-		if (!parking_provider) {
+		if (!ast_parking_provider_registered()) {
 			transmit_displaynotify(d, "Call Park not available", 10);
 			break;
 		}
@@ -6432,7 +6428,7 @@
 				break;
 			}
 
-			if (!parking_provider->parking_park_call(bridge_channel, extout, sizeof(extout))) {
+			if (!ast_parking_park_call(bridge_channel, extout, sizeof(extout))) {
 				snprintf(message, sizeof(message), "Call Parked at: %s", extout);
 				transmit_displaynotify(d, message, 10);
 				break;
@@ -7159,14 +7155,11 @@
 		{
 		char extout[AST_MAX_EXTENSION];
 		char message[32];
-		RAII_VAR(struct ast_parking_bridge_feature_fn_table *, parking_provider,
-			ast_parking_get_bridge_features(),
-			ao2_cleanup);
 		RAII_VAR(struct ast_bridge_channel *, bridge_channel, NULL, ao2_cleanup);
 		SKINNY_DEBUG(DEBUG_PACKET, 3, "Received SOFTKEY_PARK from %s, inst %d, callref %d\n",
 			d->name, instance, callreference);
 
-		if (!parking_provider) {
+		if (!ast_parking_provider_registered()) {
 			transmit_displaynotify(d, "Call Park not available", 10);
 			break;
 		}
@@ -7184,7 +7177,7 @@
 				break;
 			}
 
-			if (!parking_provider->parking_park_call(bridge_channel, extout, sizeof(extout))) {
+			if (!ast_parking_park_call(bridge_channel, extout, sizeof(extout))) {
 				snprintf(message, sizeof(message), "Call Parked at: %s", extout);
 				transmit_displaynotify(d, message, 10);
 				break;

Modified: team/dlee/ASTERISK-21969/channels/chan_unistim.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/channels/chan_unistim.c?view=diff&rev=397805&r1=397804&r2=397805
==============================================================================
--- team/dlee/ASTERISK-21969/channels/chan_unistim.c (original)
+++ team/dlee/ASTERISK-21969/channels/chan_unistim.c Tue Aug 27 13:45:23 2013
@@ -63,7 +63,6 @@
 #include "asterisk/config.h"
 #include "asterisk/module.h"
 #include "asterisk/pbx.h"
-#include "asterisk/event.h"
 #include "asterisk/rtp_engine.h"
 #include "asterisk/netsock2.h"
 #include "asterisk/acl.h"

Modified: team/dlee/ASTERISK-21969/channels/sig_analog.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ASTERISK-21969/channels/sig_analog.c?view=diff&rev=397805&r1=397804&r2=397805
==============================================================================
--- team/dlee/ASTERISK-21969/channels/sig_analog.c (original)
+++ team/dlee/ASTERISK-21969/channels/sig_analog.c Tue Aug 27 13:45:23 2013
@@ -1715,11 +1715,7 @@
 	int idx;
 	struct ast_callid *callid;
 	RAII_VAR(struct ast_features_pickup_config *, pickup_cfg, NULL, ao2_cleanup);
-	RAII_VAR(struct ast_parking_bridge_feature_fn_table *, parking_provider,
-		ast_parking_get_bridge_features(),
-		ao2_cleanup);
 	const char *pickupexten;
-	int is_exten_parking;
 
 	analog_increase_ss_count();
 
@@ -2077,6 +2073,8 @@
 			timeout = 999999;
 		}
 		while (len < AST_MAX_EXTENSION-1) {
+			int is_exten_parking = 0;
+
 			/* Read digit unless it's supposed to be immediate, in which case the
 			   only answer is 's' */
 			if (p->immediate) {
@@ -2100,7 +2098,9 @@
 			} else {
 				analog_play_tone(p, idx, ANALOG_TONE_DIALTONE);
 			}
-			is_exten_parking = (parking_provider ? parking_provider->parking_is_exten_park(ast_channel_context(chan), exten) : 0);
+			if (ast_parking_provider_registered()) {
+				is_exten_parking = ast_parking_is_exten_park(ast_channel_context(chan), exten);
+			}
 			if (ast_exists_extension(chan, ast_channel_context(chan), exten, 1, p->cid_num) && !is_exten_parking) {
 				if (!res || !ast_matchmore_extension(chan, ast_channel_context(chan), exten, 1, p->cid_num)) {
 					if (getforward) {
@@ -2253,7 +2253,7 @@
 				ast_channel_lock(chan);
 				bridge_channel = ast_channel_get_bridge_channel(chan);
 				ast_channel_unlock(chan);
-				if (bridge_channel && !parking_provider->parking_blind_transfer_park(bridge_channel, ast_channel_context(chan), exten)) {
+				if (bridge_channel && !ast_parking_blind_transfer_park(bridge_channel, ast_channel_context(chan), exten)) {
 					ast_verb(3, "Parking call to '%s'\n", ast_channel_name(chan));
 				}

[... 8747 lines stripped ...]



More information about the asterisk-commits mailing list