[asterisk-commits] may: branch may/ooh323_qsig r397836 - in /team/may/ooh323_qsig: ./ apps/ brid...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Aug 27 14:50:04 CDT 2013


Author: may
Date: Tue Aug 27 14:50:01 2013
New Revision: 397836

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=397836
Log: (empty)

Added:
    team/may/ooh323_qsig/channels/chan_dahdi.h
      - copied unchanged from r395298, trunk/channels/chan_dahdi.h
    team/may/ooh323_qsig/channels/dahdi/   (props changed)
      - copied from r395298, trunk/channels/dahdi/
    team/may/ooh323_qsig/configs/safe_asterisk.conf.sample
      - copied unchanged from r395298, trunk/configs/safe_asterisk.conf.sample
    team/may/ooh323_qsig/include/asterisk/bridging_channel.h
      - copied unchanged from r395298, trunk/include/asterisk/bridging_channel.h
    team/may/ooh323_qsig/include/asterisk/bridging_channel_internal.h
      - copied unchanged from r395298, trunk/include/asterisk/bridging_channel_internal.h
    team/may/ooh323_qsig/include/asterisk/bridging_internal.h
      - copied unchanged from r395298, trunk/include/asterisk/bridging_internal.h
    team/may/ooh323_qsig/main/bridging_channel.c
      - copied unchanged from r395298, trunk/main/bridging_channel.c
Modified:
    team/may/ooh323_qsig/   (props changed)
    team/may/ooh323_qsig/CHANGES
    team/may/ooh323_qsig/Makefile
    team/may/ooh323_qsig/apps/app_agent_pool.c
    team/may/ooh323_qsig/bridges/bridge_builtin_features.c
    team/may/ooh323_qsig/bridges/bridge_builtin_interval_features.c
    team/may/ooh323_qsig/bridges/bridge_native_rtp.c
    team/may/ooh323_qsig/bridges/bridge_softmix.c
    team/may/ooh323_qsig/channels/Makefile
    team/may/ooh323_qsig/channels/chan_dahdi.c
    team/may/ooh323_qsig/channels/chan_gulp.c
    team/may/ooh323_qsig/channels/chan_mgcp.c
    team/may/ooh323_qsig/channels/chan_sip.c
    team/may/ooh323_qsig/channels/iax2/parser.c
    team/may/ooh323_qsig/configs/iax.conf.sample
    team/may/ooh323_qsig/configs/indications.conf.sample
    team/may/ooh323_qsig/contrib/realtime/postgresql/realtime.sql
    team/may/ooh323_qsig/contrib/scripts/install_prereq
    team/may/ooh323_qsig/contrib/scripts/safe_asterisk
    team/may/ooh323_qsig/funcs/func_channel.c
    team/may/ooh323_qsig/include/asterisk/bridging.h
    team/may/ooh323_qsig/include/asterisk/bridging_basic.h
    team/may/ooh323_qsig/include/asterisk/bridging_features.h
    team/may/ooh323_qsig/include/asterisk/bridging_roles.h
    team/may/ooh323_qsig/include/asterisk/bridging_technology.h
    team/may/ooh323_qsig/include/asterisk/channel.h
    team/may/ooh323_qsig/include/asterisk/features.h
    team/may/ooh323_qsig/include/asterisk/features_config.h
    team/may/ooh323_qsig/include/asterisk/res_sip.h
    team/may/ooh323_qsig/include/asterisk/res_sip_session.h
    team/may/ooh323_qsig/include/asterisk/stasis_bridging.h
    team/may/ooh323_qsig/include/asterisk/stasis_message_router.h
    team/may/ooh323_qsig/main/asterisk.c
    team/may/ooh323_qsig/main/asterisk.exports.in
    team/may/ooh323_qsig/main/bridging.c
    team/may/ooh323_qsig/main/bridging_basic.c
    team/may/ooh323_qsig/main/bridging_roles.c
    team/may/ooh323_qsig/main/cdr.c
    team/may/ooh323_qsig/main/cel.c
    team/may/ooh323_qsig/main/channel.c
    team/may/ooh323_qsig/main/features.c
    team/may/ooh323_qsig/main/features_config.c
    team/may/ooh323_qsig/main/http.c
    team/may/ooh323_qsig/main/manager_bridging.c
    team/may/ooh323_qsig/main/manager_channels.c
    team/may/ooh323_qsig/main/stasis_bridging.c
    team/may/ooh323_qsig/main/stasis_message_router.c
    team/may/ooh323_qsig/main/utils.c
    team/may/ooh323_qsig/res/parking/parking_bridge.c
    team/may/ooh323_qsig/res/parking/parking_bridge_features.c
    team/may/ooh323_qsig/res/res_sip.c
    team/may/ooh323_qsig/res/res_sip/sip_configuration.c
    team/may/ooh323_qsig/res/res_sip/sip_global_headers.c
    team/may/ooh323_qsig/res/res_sip/sip_options.c
    team/may/ooh323_qsig/res/res_sip_sdp_rtp.c
    team/may/ooh323_qsig/res/res_sip_session.c
    team/may/ooh323_qsig/res/res_sip_session.exports.in
    team/may/ooh323_qsig/res/res_stasis.c
    team/may/ooh323_qsig/res/res_stasis_http.c
    team/may/ooh323_qsig/res/res_stasis_http_asterisk.c
    team/may/ooh323_qsig/res/res_stasis_http_bridges.c
    team/may/ooh323_qsig/res/res_stasis_http_channels.c
    team/may/ooh323_qsig/res/res_stasis_http_endpoints.c
    team/may/ooh323_qsig/res/res_stasis_http_playback.c
    team/may/ooh323_qsig/res/res_stasis_http_recordings.c
    team/may/ooh323_qsig/res/res_stasis_http_sounds.c
    team/may/ooh323_qsig/res/stasis/app.c
    team/may/ooh323_qsig/res/stasis/app.h
    team/may/ooh323_qsig/rest-api-templates/res_stasis_http_resource.c.mustache
    team/may/ooh323_qsig/tests/test_cel.c
    team/may/ooh323_qsig/tests/test_stasis.c

Propchange: team/may/ooh323_qsig/
------------------------------------------------------------------------------
--- branch-11-blocked (original)
+++ branch-11-blocked Tue Aug 27 14:50:01 2013
@@ -1,1 +1,1 @@
-/branches/11:373240,375247,375702,385356
+/branches/11:373240,375247,375702,385356,395020

Propchange: team/may/ooh323_qsig/
------------------------------------------------------------------------------
Binary property 'branch-11-merged' - no diff available.

Propchange: team/may/ooh323_qsig/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Tue Aug 27 14:50:01 2013
@@ -1,1 +1,1 @@
-/trunk:1-380157,380165-391000,391012,391016-393400,393410-393530,393542-393834,393843-394050,394065-394089,394103-394600,394623-394881
+/trunk:1-380157,380165-391000,391012,391016-393400,393410-393530,393542-393834,393843-394050,394065-394089,394103-394600,394623-394881,394894-395298

Modified: team/may/ooh323_qsig/CHANGES
URL: http://svnview.digium.com/svn/asterisk/team/may/ooh323_qsig/CHANGES?view=diff&rev=397836&r1=397835&r2=397836
==============================================================================
--- team/may/ooh323_qsig/CHANGES (original)
+++ team/may/ooh323_qsig/CHANGES Tue Aug 27 14:50:01 2013
@@ -580,6 +580,18 @@
    If no resources exist or all are unavailable the device state is considered
    to be unavailable.
 
+
+Scripts
+------------------
+
+safe_asterisk
+------------------
+ * The safe_asterisk script will now install over previously installations.
+   In previous versions of Asterisk, once installed a 'make install' would
+   skip over safe_asterisk if it was already installed.
+ * Certain options in safe_asterisk can now be configured from the
+   safe_asterisk.conf file. A sample version of this is located in the
+   configs/ folder.
 
 ------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 10 to Asterisk 11 --------------------

Modified: team/may/ooh323_qsig/Makefile
URL: http://svnview.digium.com/svn/asterisk/team/may/ooh323_qsig/Makefile?view=diff&rev=397836&r1=397835&r2=397836
==============================================================================
--- team/may/ooh323_qsig/Makefile (original)
+++ team/may/ooh323_qsig/Makefile Tue Aug 27 14:50:01 2013
@@ -558,8 +558,8 @@
 bininstall: _all installdirs $(SUBDIRS_INSTALL) main-bininstall
 	$(INSTALL) -m 755 contrib/scripts/astgenkey "$(DESTDIR)$(ASTSBINDIR)/"
 	$(INSTALL) -m 755 contrib/scripts/autosupport "$(DESTDIR)$(ASTSBINDIR)/"
-	if [ ! -f "$(DESTDIR)$(ASTSBINDIR)/safe_asterisk" -a ! -f /sbin/launchd ]; then \
-		cat contrib/scripts/safe_asterisk | sed 's|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;s|__ASTERISK_LOG_DIR__|$(ASTLOGDIR)|;' > contrib/scripts/safe.tmp ; \
+	if [ ! -f /sbin/launchd ]; then \
+		cat contrib/scripts/safe_asterisk | sed 's|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;s|__ASTERISK_LOG_DIR__|$(ASTLOGDIR)|;s|__ASTERISK_ETC_DIR__|$(ASTETCDIR)|;' > contrib/scripts/safe.tmp ; \
 		$(INSTALL) -m 755 contrib/scripts/safe.tmp "$(DESTDIR)$(ASTSBINDIR)/safe_asterisk" ; \
 		rm -f contrib/scripts/safe.tmp ; \
 	fi

Modified: team/may/ooh323_qsig/apps/app_agent_pool.c
URL: http://svnview.digium.com/svn/asterisk/team/may/ooh323_qsig/apps/app_agent_pool.c?view=diff&rev=397836&r1=397835&r2=397836
==============================================================================
--- team/may/ooh323_qsig/apps/app_agent_pool.c (original)
+++ team/may/ooh323_qsig/apps/app_agent_pool.c Tue Aug 27 14:50:01 2013
@@ -41,6 +41,7 @@
 #include "asterisk/module.h"
 #include "asterisk/channel.h"
 #include "asterisk/bridging.h"
+#include "asterisk/bridging_internal.h"
 #include "asterisk/bridging_basic.h"
 #include "asterisk/config_options.h"
 #include "asterisk/features_config.h"
@@ -1054,7 +1055,7 @@
 
 	if (!caller_bridge) {
 		/* Reset agent. */
-		ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
+		ast_bridge_channel_leave_bridge(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
 		return;
 	}
 	res = ast_bridge_move(caller_bridge, bridge_channel->bridge, bridge_channel->chan,
@@ -1062,7 +1063,7 @@
 	if (res) {
 		/* Reset agent. */
 		ast_bridge_destroy(caller_bridge);
-		ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
+		ast_bridge_channel_leave_bridge(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
 		return;
 	}
 	ast_bridge_channel_write_control_data(bridge_channel, AST_CONTROL_ANSWER, NULL, 0);
@@ -1158,13 +1159,13 @@
 
 	if (deferred_logoff) {
 		ast_debug(1, "Agent %s: Deferred logoff.\n", agent->username);
-		ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
+		ast_bridge_channel_leave_bridge(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
 	} else if (probation_timedout) {
 		ast_debug(1, "Agent %s: Login complete.\n", agent->username);
 		agent_devstate_changed(agent->username);
 	} else if (ack_timedout) {
 		ast_debug(1, "Agent %s: Ack call timeout.\n", agent->username);
-		ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
+		ast_bridge_channel_leave_bridge(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
 	} else if (wrapup_timedout) {
 		ast_debug(1, "Agent %s: Wrapup timeout. Ready for new call.\n", agent->username);
 		agent_devstate_changed(agent->username);
@@ -1269,7 +1270,7 @@
 		 * agent will have some slightly different behavior in corner
 		 * cases.
 		 */
-		ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
+		ast_bridge_channel_leave_bridge(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
 		return 0;
 	}
 
@@ -1393,11 +1394,11 @@
 {
 	struct ast_bridge *bridge;
 
-	bridge = ast_bridge_alloc(sizeof(struct ast_bridge), &bridge_agent_hold_v_table);
-	bridge = ast_bridge_base_init(bridge, AST_BRIDGE_CAPABILITY_HOLDING,
+	bridge = bridge_alloc(sizeof(struct ast_bridge), &bridge_agent_hold_v_table);
+	bridge = bridge_base_init(bridge, AST_BRIDGE_CAPABILITY_HOLDING,
 		AST_BRIDGE_FLAG_MERGE_INHIBIT_TO | AST_BRIDGE_FLAG_MERGE_INHIBIT_FROM
 			| AST_BRIDGE_FLAG_SWAP_INHIBIT_FROM | AST_BRIDGE_FLAG_TRANSFER_PROHIBITED);
-	bridge = ast_bridge_register(bridge);
+	bridge = bridge_register(bridge);
 	return bridge;
 }
 
@@ -1703,7 +1704,7 @@
 	}
 
 	/* Kick the agent out of the holding bridge to reset it. */
-	ast_bridge_change_state_nolock(logged, AST_BRIDGE_CHANNEL_STATE_END);
+	ast_bridge_channel_leave_bridge_nolock(logged, AST_BRIDGE_CHANNEL_STATE_END);
 	ast_bridge_channel_unlock(logged);
 }
 
@@ -1713,7 +1714,7 @@
 
 	if (agent->state == AGENT_STATE_CALL_PRESENT) {
 		ast_verb(3, "Agent '%s' did not respond.  Safety timeout.\n", agent->username);
-		ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
+		ast_bridge_channel_leave_bridge(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
 		caller_abort_agent(agent);
 	}
 

Modified: team/may/ooh323_qsig/bridges/bridge_builtin_features.c
URL: http://svnview.digium.com/svn/asterisk/team/may/ooh323_qsig/bridges/bridge_builtin_features.c?view=diff&rev=397836&r1=397835&r2=397836
==============================================================================
--- team/may/ooh323_qsig/bridges/bridge_builtin_features.c (original)
+++ team/may/ooh323_qsig/bridges/bridge_builtin_features.c Tue Aug 27 14:50:01 2013
@@ -54,421 +54,6 @@
 #include "asterisk/mixmonitor.h"
 #include "asterisk/audiohook.h"
 
-/*!
- * \brief Helper function that presents dialtone and grabs extension
- *
- * \retval 0 on success
- * \retval -1 on failure
- */
-static int grab_transfer(struct ast_channel *chan, char *exten, size_t exten_len, const char *context)
-{
-	int res;
-	int digit_timeout;
-	RAII_VAR(struct ast_features_xfer_config *, xfer_cfg, NULL, ao2_cleanup);
-
-	ast_channel_lock(chan);
-	xfer_cfg = ast_get_chan_features_xfer_config(chan);
-	if (!xfer_cfg) {
-		ast_log(LOG_ERROR, "Unable to get transfer configuration\n");
-		ast_channel_unlock(chan);
-		return -1;
-	}
-	digit_timeout = xfer_cfg->transferdigittimeout;
-	ast_channel_unlock(chan);
-
-	/* Play the simple "transfer" prompt out and wait */
-	res = ast_stream_and_wait(chan, "pbx-transfer", AST_DIGIT_ANY);
-	ast_stopstream(chan);
-	if (res < 0) {
-		/* Hangup or error */
-		return -1;
-	}
-	if (res) {
-		/* Store the DTMF digit that interrupted playback of the file. */
-		exten[0] = res;
-	}
-
-	/* Drop to dialtone so they can enter the extension they want to transfer to */
-	res = ast_app_dtget(chan, context, exten, exten_len, exten_len - 1, digit_timeout);
-	if (res < 0) {
-		/* Hangup or error */
-		res = -1;
-	} else if (!res) {
-		/* 0 for invalid extension dialed. */
-		if (ast_strlen_zero(exten)) {
-			ast_debug(1, "%s dialed no digits.\n", ast_channel_name(chan));
-		} else {
-			ast_debug(1, "%s dialed '%s@%s' does not exist.\n",
-				ast_channel_name(chan), exten, context);
-		}
-		ast_stream_and_wait(chan, "pbx-invalid", AST_DIGIT_NONE);
-		res = -1;
-	} else {
-		/* Dialed extension is valid. */
-		res = 0;
-	}
-	return res;
-}
-
-static void copy_caller_data(struct ast_channel *dest, struct ast_channel *caller)
-{
-	ast_channel_lock_both(caller, dest);
-	ast_connected_line_copy_from_caller(ast_channel_connected(dest), ast_channel_caller(caller));
-	ast_channel_inherit_variables(caller, dest);
-	ast_channel_datastore_inherit(caller, dest);
-	ast_channel_unlock(dest);
-	ast_channel_unlock(caller);
-}
-
-/*! \brief Helper function that creates an outgoing channel and returns it immediately */
-static struct ast_channel *dial_transfer(struct ast_channel *caller, const char *exten, const char *context)
-{
-	char destination[AST_MAX_EXTENSION + AST_MAX_CONTEXT + 1];
-	struct ast_channel *chan;
-	int cause;
-
-	/* Fill the variable with the extension and context we want to call */
-	snprintf(destination, sizeof(destination), "%s@%s", exten, context);
-
-	/* Now we request a local channel to prepare to call the destination */
-	chan = ast_request("Local", ast_channel_nativeformats(caller), caller, destination,
-		&cause);
-	if (!chan) {
-		return NULL;
-	}
-
-	/* Who is transferring the call. */
-	pbx_builtin_setvar_helper(chan, "TRANSFERERNAME", ast_channel_name(caller));
-
-	/* To work as an analog to BLINDTRANSFER */
-	pbx_builtin_setvar_helper(chan, "ATTENDEDTRANSFER", ast_channel_name(caller));
-
-	/* Before we actually dial out let's inherit appropriate information. */
-	copy_caller_data(chan, caller);
-
-	/* Since the above worked fine now we actually call it and return the channel */
-	if (ast_call(chan, destination, 0)) {
-		ast_hangup(chan);
-		return NULL;
-	}
-
-	return chan;
-}
-
-/*!
- * \internal
- * \brief Determine the transfer context to use.
- * \since 12.0.0
- *
- * \param transferer Channel initiating the transfer.
- * \param context User supplied context if available.  May be NULL.
- *
- * \return The context to use for the transfer.
- */
-static const char *get_transfer_context(struct ast_channel *transferer, const char *context)
-{
-	if (!ast_strlen_zero(context)) {
-		return context;
-	}
-	context = pbx_builtin_getvar_helper(transferer, "TRANSFER_CONTEXT");
-	if (!ast_strlen_zero(context)) {
-		return context;
-	}
-	context = ast_channel_macrocontext(transferer);
-	if (!ast_strlen_zero(context)) {
-		return context;
-	}
-	context = ast_channel_context(transferer);
-	if (!ast_strlen_zero(context)) {
-		return context;
-	}
-	return "default";
-}
-
-static void blind_transfer_cb(struct ast_channel *new_channel, void *user_data,
-		enum ast_transfer_type transfer_type)
-{
-	struct ast_channel *transferer_channel = user_data;
-
-	if (transfer_type == AST_BRIDGE_TRANSFER_MULTI_PARTY) {
-		copy_caller_data(new_channel, transferer_channel);
-	}
-}
-
-/*! \brief Internal built in feature for blind transfers */
-static int feature_blind_transfer(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, void *hook_pvt)
-{
-	char exten[AST_MAX_EXTENSION] = "";
-	struct ast_bridge_features_blind_transfer *blind_transfer = hook_pvt;
-	const char *context;
-	char *goto_on_blindxfr;
-
-	ast_bridge_channel_write_hold(bridge_channel, NULL);
-
-	ast_channel_lock(bridge_channel->chan);
-	context = ast_strdupa(get_transfer_context(bridge_channel->chan,
-		blind_transfer ? blind_transfer->context : NULL));
-	goto_on_blindxfr = ast_strdupa(S_OR(pbx_builtin_getvar_helper(bridge_channel->chan,
-		"GOTO_ON_BLINDXFR"), ""));
-	ast_channel_unlock(bridge_channel->chan);
-
-	/* Grab the extension to transfer to */
-	if (grab_transfer(bridge_channel->chan, exten, sizeof(exten), context)) {
-		ast_bridge_channel_write_unhold(bridge_channel);
-		return 0;
-	}
-
-	if (!ast_strlen_zero(goto_on_blindxfr)) {
-		ast_debug(1, "After transfer, transferer %s goes to %s\n",
-				ast_channel_name(bridge_channel->chan), goto_on_blindxfr);
-		ast_after_bridge_set_go_on(bridge_channel->chan, NULL, NULL, 0, goto_on_blindxfr);
-	}
-
-	if (ast_bridge_transfer_blind(0, bridge_channel->chan, exten, context, blind_transfer_cb,
-			bridge_channel->chan) != AST_BRIDGE_TRANSFER_SUCCESS &&
-			!ast_strlen_zero(goto_on_blindxfr)) {
-		ast_after_bridge_goto_discard(bridge_channel->chan);
-	}
-
-	return 0;
-}
-
-/*! Attended transfer code */
-enum atxfer_code {
-	/*! Party C hungup or other reason to abandon the transfer. */
-	ATXFER_INCOMPLETE,
-	/*! Transfer party C to party A. */
-	ATXFER_COMPLETE,
-	/*! Turn the transfer into a threeway call. */
-	ATXFER_THREEWAY,
-	/*! Hangup party C and return party B to the bridge. */
-	ATXFER_ABORT,
-};
-
-/*! \brief Attended transfer feature to complete transfer */
-static int attended_transfer_complete(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, void *hook_pvt)
-{
-	enum atxfer_code *transfer_code = hook_pvt;
-
-	*transfer_code = ATXFER_COMPLETE;
-	ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_HANGUP);
-	return 0;
-}
-
-/*! \brief Attended transfer feature to turn it into a threeway call */
-static int attended_transfer_threeway(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, void *hook_pvt)
-{
-	enum atxfer_code *transfer_code = hook_pvt;
-
-	*transfer_code = ATXFER_THREEWAY;
-	ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_HANGUP);
-	return 0;
-}
-
-/*! \brief Attended transfer feature to abort transfer */
-static int attended_transfer_abort(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, void *hook_pvt)
-{
-	enum atxfer_code *transfer_code = hook_pvt;
-
-	*transfer_code = ATXFER_ABORT;
-	ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_HANGUP);
-	return 0;
-}
-
-/*! \brief Internal built in feature for attended transfers */
-static int feature_attended_transfer(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, void *hook_pvt)
-{
-	char exten[AST_MAX_EXTENSION] = "";
-	struct ast_channel *peer;
-	struct ast_bridge *attended_bridge;
-	struct ast_bridge_features caller_features;
-	int xfer_failed;
-	struct ast_bridge_features_attended_transfer *attended_transfer = hook_pvt;
-	const char *complete_sound;
-	const char *context;
-	enum atxfer_code transfer_code = ATXFER_INCOMPLETE;
-	const char *atxfer_abort;
-	const char *atxfer_threeway;
-	const char *atxfer_complete;
-	const char *fail_sound;
-	RAII_VAR(struct ast_features_xfer_config *, xfer_cfg, NULL, ao2_cleanup);
-
-	ast_bridge_channel_write_hold(bridge_channel, NULL);
-
-	bridge = ast_bridge_channel_merge_inhibit(bridge_channel, +1);
-
-	ast_channel_lock(bridge_channel->chan);
-	context = ast_strdupa(get_transfer_context(bridge_channel->chan,
-		attended_transfer ? attended_transfer->context : NULL));
-	xfer_cfg = ast_get_chan_features_xfer_config(bridge_channel->chan);
-	if (!xfer_cfg) {
-		ast_log(LOG_ERROR, "Unable to get transfer configuration options\n");
-		ast_channel_unlock(bridge_channel->chan);
-		return 0;
-	}
-	if (attended_transfer) {
-		atxfer_abort = ast_strdupa(S_OR(attended_transfer->abort, xfer_cfg->atxferabort));
-		atxfer_threeway = ast_strdupa(S_OR(attended_transfer->threeway, xfer_cfg->atxferthreeway));
-		atxfer_complete = ast_strdupa(S_OR(attended_transfer->complete, xfer_cfg->atxfercomplete));
-	} else {
-		atxfer_abort = ast_strdupa(xfer_cfg->atxferabort);
-		atxfer_threeway = ast_strdupa(xfer_cfg->atxferthreeway);
-		atxfer_complete = ast_strdupa(xfer_cfg->atxfercomplete);
-	}
-	fail_sound = ast_strdupa(xfer_cfg->xferfailsound);
-	ast_channel_unlock(bridge_channel->chan);
-
-	/* Grab the extension to transfer to */
-	if (grab_transfer(bridge_channel->chan, exten, sizeof(exten), context)) {
-		ast_bridge_merge_inhibit(bridge, -1);
-		ao2_ref(bridge, -1);
-		ast_bridge_channel_write_unhold(bridge_channel);
-		return 0;
-	}
-
-	/* Get a channel that is the destination we wish to call */
-	peer = dial_transfer(bridge_channel->chan, exten, context);
-	if (!peer) {
-		ast_bridge_merge_inhibit(bridge, -1);
-		ao2_ref(bridge, -1);
-		ast_stream_and_wait(bridge_channel->chan, fail_sound, AST_DIGIT_NONE);
-		ast_bridge_channel_write_unhold(bridge_channel);
-		return 0;
-	}
-
-/* BUGBUG bridging API features does not support the features.conf atxfer bounce between C & B channels */
-	/* Setup a DTMF menu to control the transfer. */
-	if (ast_bridge_features_init(&caller_features)
-		|| ast_bridge_hangup_hook(&caller_features,
-			attended_transfer_complete, &transfer_code, NULL, 0)
-		|| ast_bridge_dtmf_hook(&caller_features, atxfer_abort,
-			attended_transfer_abort, &transfer_code, NULL, 0)
-		|| ast_bridge_dtmf_hook(&caller_features, atxfer_complete,
-			attended_transfer_complete, &transfer_code, NULL, 0)
-		|| ast_bridge_dtmf_hook(&caller_features, atxfer_threeway,
-			attended_transfer_threeway, &transfer_code, NULL, 0)) {
-		ast_bridge_features_cleanup(&caller_features);
-		ast_hangup(peer);
-		ast_bridge_merge_inhibit(bridge, -1);
-		ao2_ref(bridge, -1);
-		ast_stream_and_wait(bridge_channel->chan, fail_sound, AST_DIGIT_NONE);
-		ast_bridge_channel_write_unhold(bridge_channel);
-		return 0;
-	}
-
-	/* Create a bridge to use to talk to the person we are calling */
-	attended_bridge = ast_bridge_base_new(AST_BRIDGE_CAPABILITY_1TO1MIX,
-		AST_BRIDGE_FLAG_DISSOLVE_HANGUP);
-	if (!attended_bridge) {
-		ast_bridge_features_cleanup(&caller_features);
-		ast_hangup(peer);
-		ast_bridge_merge_inhibit(bridge, -1);
-		ao2_ref(bridge, -1);
-		ast_stream_and_wait(bridge_channel->chan, fail_sound, AST_DIGIT_NONE);
-		ast_bridge_channel_write_unhold(bridge_channel);
-		return 0;
-	}
-	ast_bridge_merge_inhibit(attended_bridge, +1);
-
-	/* This is how this is going down, we are imparting the channel we called above into this bridge first */
-/* BUGBUG we should impart the peer as an independent and move it to the original bridge. */
-	if (ast_bridge_impart(attended_bridge, peer, NULL, NULL, 0)) {
-		ast_bridge_destroy(attended_bridge);
-		ast_bridge_features_cleanup(&caller_features);
-		ast_hangup(peer);
-		ast_bridge_merge_inhibit(bridge, -1);
-		ao2_ref(bridge, -1);
-		ast_stream_and_wait(bridge_channel->chan, fail_sound, AST_DIGIT_NONE);
-		ast_bridge_channel_write_unhold(bridge_channel);
-		return 0;
-	}
-
-	/*
-	 * For the caller we want to join the bridge in a blocking
-	 * fashion so we don't spin around in this function doing
-	 * nothing while waiting.
-	 */
-	ast_bridge_join(attended_bridge, bridge_channel->chan, NULL, &caller_features, NULL, 0);
-
-/*
- * BUGBUG there is a small window where the channel does not point to the bridge_channel.
- *
- * This window is expected to go away when atxfer is redesigned
- * to fully support existing functionality.  There will be one
- * and only one ast_bridge_channel structure per channel.
- */
-	/* Point the channel back to the original bridge and bridge_channel. */
-	ast_bridge_channel_lock(bridge_channel);
-	ast_channel_lock(bridge_channel->chan);
-	ast_channel_internal_bridge_channel_set(bridge_channel->chan, bridge_channel);
-	ast_channel_internal_bridge_set(bridge_channel->chan, bridge_channel->bridge);
-	ast_channel_unlock(bridge_channel->chan);
-	ast_bridge_channel_unlock(bridge_channel);
-
-	/* Wait for peer thread to exit bridge and die. */
-	if (!ast_autoservice_start(bridge_channel->chan)) {
-		ast_bridge_depart(peer);
-		ast_autoservice_stop(bridge_channel->chan);
-	} else {
-		ast_bridge_depart(peer);
-	}
-
-	/* Now that all channels are out of it we can destroy the bridge and the feature structures */
-	ast_bridge_destroy(attended_bridge);
-	ast_bridge_features_cleanup(&caller_features);
-
-	/* Is there a courtesy sound to play to the peer? */
-	ast_channel_lock(bridge_channel->chan);
-	complete_sound = pbx_builtin_getvar_helper(bridge_channel->chan,
-		"ATTENDED_TRANSFER_COMPLETE_SOUND");
-	if (!ast_strlen_zero(complete_sound)) {
-		complete_sound = ast_strdupa(complete_sound);
-	} else {
-		complete_sound = NULL;
-	}
-	ast_channel_unlock(bridge_channel->chan);
-	if (complete_sound) {
-		pbx_builtin_setvar_helper(peer, "BRIDGE_PLAY_SOUND", complete_sound);
-	}
-
-	xfer_failed = -1;
-	switch (transfer_code) {
-	case ATXFER_INCOMPLETE:
-		/* Peer hungup */
-		break;
-	case ATXFER_COMPLETE:
-		/* The peer takes our place in the bridge. */
-		ast_bridge_channel_write_unhold(bridge_channel);
-		ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_HANGUP);
-		xfer_failed = ast_bridge_impart(bridge_channel->bridge, peer, bridge_channel->chan, NULL, 1);
-		break;
-	case ATXFER_THREEWAY:
-		/*
-		 * Transferer wants to convert to a threeway call.
-		 *
-		 * Just impart the peer onto the bridge and have us return to it
-		 * as normal.
-		 */
-		ast_bridge_channel_write_unhold(bridge_channel);
-		xfer_failed = ast_bridge_impart(bridge_channel->bridge, peer, NULL, NULL, 1);
-		break;
-	case ATXFER_ABORT:
-		/* Transferer decided not to transfer the call after all. */
-		break;
-	}
-	ast_bridge_merge_inhibit(bridge, -1);
-	ao2_ref(bridge, -1);
-	if (xfer_failed) {
-		ast_hangup(peer);
-		if (!ast_check_hangup_locked(bridge_channel->chan)) {
-			ast_stream_and_wait(bridge_channel->chan, fail_sound, AST_DIGIT_NONE);
-		}
-		ast_bridge_channel_write_unhold(bridge_channel);
-	}
-
-	return 0;
-}
-
 enum set_touch_variables_res {
 	SET_TOUCH_SUCCESS,
 	SET_TOUCH_UNSET,
@@ -898,7 +483,7 @@
 	 * bridge_channel to force the channel out of the bridge and the
 	 * core takes care of the rest.
 	 */
-	ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
+	ast_bridge_channel_leave_bridge(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
 	return 0;
 }
 
@@ -909,8 +494,6 @@
 
 static int load_module(void)
 {
-	ast_bridge_features_register(AST_BRIDGE_BUILTIN_BLINDTRANSFER, feature_blind_transfer, NULL);
-	ast_bridge_features_register(AST_BRIDGE_BUILTIN_ATTENDEDTRANSFER, feature_attended_transfer, NULL);
 	ast_bridge_features_register(AST_BRIDGE_BUILTIN_HANGUP, feature_hangup, NULL);
 	ast_bridge_features_register(AST_BRIDGE_BUILTIN_AUTOMON, feature_automonitor, NULL);
 	ast_bridge_features_register(AST_BRIDGE_BUILTIN_AUTOMIXMON, feature_automixmonitor, NULL);

Modified: team/may/ooh323_qsig/bridges/bridge_builtin_interval_features.c
URL: http://svnview.digium.com/svn/asterisk/team/may/ooh323_qsig/bridges/bridge_builtin_interval_features.c?view=diff&rev=397836&r1=397835&r2=397836
==============================================================================
--- team/may/ooh323_qsig/bridges/bridge_builtin_interval_features.c (original)
+++ team/may/ooh323_qsig/bridges/bridge_builtin_interval_features.c Tue Aug 27 14:50:01 2013
@@ -58,7 +58,7 @@
 		ast_stream_and_wait(bridge_channel->chan, limits->duration_sound, AST_DIGIT_NONE);
 	}
 
-	ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
+	ast_bridge_channel_leave_bridge(bridge_channel, AST_BRIDGE_CHANNEL_STATE_END);
 
 	ast_test_suite_event_notify("BRIDGE_TIMELIMIT", "Channel1: %s", ast_channel_name(bridge_channel->chan));
 	return -1;

Modified: team/may/ooh323_qsig/bridges/bridge_native_rtp.c
URL: http://svnview.digium.com/svn/asterisk/team/may/ooh323_qsig/bridges/bridge_native_rtp.c?view=diff&rev=397836&r1=397835&r2=397836
==============================================================================
--- team/may/ooh323_qsig/bridges/bridge_native_rtp.c (original)
+++ team/may/ooh323_qsig/bridges/bridge_native_rtp.c Tue Aug 27 14:50:01 2013
@@ -84,7 +84,7 @@
 /*! \brief Internal helper function which checks whether the channels are compatible with our native bridging */
 static int native_rtp_bridge_capable(struct ast_channel *chan)
 {
-	return ast_channel_has_audio_frame_or_monitor(chan);
+	return !ast_channel_has_audio_frame_or_monitor(chan);
 }
 
 /*! \brief Internal helper function which gets all RTP information (glue and instances) relating to the given channels */
@@ -249,7 +249,7 @@
 	ast_channel_lock(bridge_channel->chan);
 	data->id = ast_framehook_attach(bridge_channel->chan, &hook);
 	ast_channel_unlock(bridge_channel->chan);
-	if (!data->id < 0) {
+	if (data->id < 0) {
 		ao2_cleanup(data);
 		return -1;
 	}
@@ -323,11 +323,15 @@
 		}
 		ast_rtp_instance_set_bridged(instance0, instance1);
 		ast_rtp_instance_set_bridged(instance1, instance0);
+		ast_debug(2, "Locally RTP bridged '%s' and '%s' in stack\n",
+			ast_channel_name(c0->chan), ast_channel_name(c1->chan));
 		break;
 
 	case AST_RTP_GLUE_RESULT_REMOTE:
 		glue0->update_peer(c0->chan, instance1, vinstance1, tinstance1, cap1, 0);
 		glue1->update_peer(c1->chan, instance0, vinstance0, tinstance0, cap0, 0);
+		ast_debug(2, "Remotely bridged '%s' and '%s' - media will flow directly between them\n",
+			ast_channel_name(c0->chan), ast_channel_name(c1->chan));
 		break;
 	case AST_RTP_GLUE_RESULT_FORBID:
 		break;
@@ -378,6 +382,9 @@
 	case AST_RTP_GLUE_RESULT_FORBID:
 		break;
 	}
+
+	ast_debug(2, "Discontinued RTP bridging of '%s' and '%s' - media will flow through Asterisk core\n",
+		ast_channel_name(c0->chan), ast_channel_name(c1->chan));
 }
 
 static int native_rtp_bridge_write(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, struct ast_frame *frame)

Modified: team/may/ooh323_qsig/bridges/bridge_softmix.c
URL: http://svnview.digium.com/svn/asterisk/team/may/ooh323_qsig/bridges/bridge_softmix.c?view=diff&rev=397836&r1=397835&r2=397836
==============================================================================
--- team/may/ooh323_qsig/bridges/bridge_softmix.c (original)
+++ team/may/ooh323_qsig/bridges/bridge_softmix.c Tue Aug 27 14:50:01 2013
@@ -477,7 +477,7 @@
 	int video_src_priority;
 
 	/* Determine if the video frame should be distributed or not */
-	switch (bridge->video_mode.mode) {
+	switch (bridge->softmix.video_mode.mode) {
 	case AST_BRIDGE_VIDEO_MODE_NONE:
 		break;
 	case AST_BRIDGE_VIDEO_MODE_SINGLE_SRC:
@@ -533,7 +533,7 @@
 	ast_mutex_lock(&sc->lock);
 	ast_dsp_silence_with_energy(sc->dsp, frame, &totalsilence, &cur_energy);
 
-	if (bridge->video_mode.mode == AST_BRIDGE_VIDEO_MODE_TALKER_SRC) {
+	if (bridge->softmix.video_mode.mode == AST_BRIDGE_VIDEO_MODE_TALKER_SRC) {
 		int cur_slot = sc->video_talker.energy_history_cur_slot;
 
 		sc->video_talker.energy_accum -= sc->video_talker.energy_history[cur_slot];
@@ -623,6 +623,9 @@
 	}
 
 	switch (frame->frametype) {
+	case AST_FRAME_NULL:
+		/* "Accept" the frame and discard it. */
+		break;
 	case AST_FRAME_DTMF_BEGIN:
 	case AST_FRAME_DTMF_END:
 		res = ast_bridge_queue_everyone_else(bridge, bridge_channel, frame);
@@ -848,7 +851,7 @@
 		/* These variables help determine if a rate change is required */
 		if (!stat_iteration_counter) {
 			memset(&stats, 0, sizeof(stats));
-			stats.locked_rate = bridge->internal_sample_rate;
+			stats.locked_rate = bridge->softmix.internal_sample_rate;
 		}
 
 		/* If the sample rate has changed, update the translator helper */
@@ -939,8 +942,9 @@
 		ast_bridge_lock(bridge);
 
 		/* make sure to detect mixing interval changes if they occur. */
-		if (bridge->internal_mixing_interval && (bridge->internal_mixing_interval != softmix_data->internal_mixing_interval)) {
-			softmix_data->internal_mixing_interval = bridge->internal_mixing_interval;
+		if (bridge->softmix.internal_mixing_interval
+			&& (bridge->softmix.internal_mixing_interval != softmix_data->internal_mixing_interval)) {
+			softmix_data->internal_mixing_interval = bridge->softmix.internal_mixing_interval;
 			ast_timer_set_rate(timer, (1000 / softmix_data->internal_mixing_interval));
 			update_all_rates = 1; /* if the interval changes, the rates must be adjusted as well just to be notified new interval.*/
 		}

Modified: team/may/ooh323_qsig/channels/Makefile
URL: http://svnview.digium.com/svn/asterisk/team/may/ooh323_qsig/channels/Makefile?view=diff&rev=397836&r1=397835&r2=397836
==============================================================================
--- team/may/ooh323_qsig/channels/Makefile (original)
+++ team/may/ooh323_qsig/channels/Makefile Tue Aug 27 14:50:01 2013
@@ -1,6 +1,6 @@
 #
 # Asterisk -- An open source telephony toolkit.
-# 
+#
 # Makefile for channel drivers
 #
 # Copyright (C) 1999-2006, Digium, Inc.
@@ -72,10 +72,19 @@
 
 $(if $(filter chan_iax2,$(EMBEDDED_MODS)),modules.link,chan_iax2.so): $(subst .c,.o,$(wildcard iax2/*.c))
 $(subst .c,.o,$(wildcard iax2/*.c)): _ASTCFLAGS+=$(call MOD_ASTCFLAGS,chan_iax2)
+
 $(if $(filter chan_sip,$(EMBEDDED_MODS)),modules.link,chan_sip.so): $(subst .c,.o,$(wildcard sip/*.c))
 $(subst .c,.o,$(wildcard sip/*.c)): _ASTCFLAGS+=$(call MOD_ASTCFLAGS,chan_sip)
-$(if $(filter chan_dahdi,$(EMBEDDED_MODS)),modules.link,chan_dahdi.so): sig_analog.o sig_pri.o sig_ss7.o
-sig_analog.o sig_pri.o sig_ss7.o: _ASTCFLAGS+=$(call MOD_ASTCFLAGS,chan_dahdi)
+
+# Additional objects to combine with chan_dahdi.so
+CHAN_DAHDI_OBJS= \
+	$(subst .c,.o,$(wildcard dahdi/*.c))	\
+	sig_analog.o	\
+	sig_pri.o	\
+	sig_ss7.o	\
+
+$(if $(filter chan_dahdi,$(EMBEDDED_MODS)),modules.link,chan_dahdi.so): $(CHAN_DAHDI_OBJS)
+$(CHAN_DAHDI_OBJS): _ASTCFLAGS+=$(call MOD_ASTCFLAGS,chan_dahdi)
 
 ifneq ($(filter chan_h323,$(EMBEDDED_MODS)),)
 modules.link: h323/libchanh323.a

Modified: team/may/ooh323_qsig/channels/chan_dahdi.c
URL: http://svnview.digium.com/svn/asterisk/team/may/ooh323_qsig/channels/chan_dahdi.c?view=diff&rev=397836&r1=397835&r2=397836
==============================================================================
--- team/may/ooh323_qsig/channels/chan_dahdi.c (original)
+++ team/may/ooh323_qsig/channels/chan_dahdi.c Tue Aug 27 14:50:01 2013
@@ -62,13 +62,9 @@
 #else
 #include <sys/signal.h>
 #endif
-#include <sys/ioctl.h>
 #include <sys/stat.h>
 #include <math.h>
-#include <ctype.h>
-
-#include <dahdi/user.h>
-#include <dahdi/tonezone.h>
+
 #include "sig_analog.h"
 /* Analog signaling is currently still present in chan_dahdi for use with
  * radio. Sig_analog does not currently handle any radio operations. If
@@ -90,11 +86,10 @@
 #endif
 #endif	/* defined(HAVE_SS7) */
 
-#ifdef HAVE_OPENR2
+#if defined(HAVE_OPENR2)
 /* put this here until sig_mfcr2 comes along */
 #define SIG_MFCR2_MAX_CHANNELS	672		/*!< No more than a DS3 per trunk group */
-#include <openr2.h>
-#endif
+#endif	/* defined(HAVE_OPENR2) */
 
 #include "asterisk/lock.h"
 #include "asterisk/channel.h"
@@ -131,6 +126,8 @@
 #include "asterisk/features_config.h"
 #include "asterisk/bridging.h"
 #include "asterisk/stasis_channels.h"
+#include "chan_dahdi.h"
+#include "dahdi/bridge_native_dahdi.h"
 
 /*** DOCUMENTATION
 	<application name="DAHDISendKeypadFacility" language="en_US">
@@ -422,7 +419,7 @@
 /*! \brief Signaling types that need to use MF detection should be placed in this macro */
 #define NEED_MFDETECT(p) (((p)->sig == SIG_FEATDMF) || ((p)->sig == SIG_FEATDMF_TA) || ((p)->sig == SIG_E911) || ((p)->sig == SIG_FGC_CAMA) || ((p)->sig == SIG_FGC_CAMAMF) || ((p)->sig == SIG_FEATB))
 
-static const char tdesc[] = "DAHDI Telephony Driver"
+static const char tdesc[] = "DAHDI Telephony"
 #if defined(HAVE_PRI) || defined(HAVE_SS7) || defined(HAVE_OPENR2)
 	" w/"
 	#if defined(HAVE_PRI)
@@ -445,33 +442,6 @@
 
 static const char config[] = "chan_dahdi.conf";
 
-#define SIG_EM		DAHDI_SIG_EM
-#define SIG_EMWINK 	(0x0100000 | DAHDI_SIG_EM)
-#define SIG_FEATD	(0x0200000 | DAHDI_SIG_EM)
-#define	SIG_FEATDMF	(0x0400000 | DAHDI_SIG_EM)
-#define	SIG_FEATB	(0x0800000 | DAHDI_SIG_EM)
-#define	SIG_E911	(0x1000000 | DAHDI_SIG_EM)
-#define	SIG_FEATDMF_TA	(0x2000000 | DAHDI_SIG_EM)
-#define	SIG_FGC_CAMA	(0x4000000 | DAHDI_SIG_EM)
-#define	SIG_FGC_CAMAMF	(0x8000000 | DAHDI_SIG_EM)
-#define SIG_FXSLS	DAHDI_SIG_FXSLS
-#define SIG_FXSGS	DAHDI_SIG_FXSGS
-#define SIG_FXSKS	DAHDI_SIG_FXSKS
-#define SIG_FXOLS	DAHDI_SIG_FXOLS
-#define SIG_FXOGS	DAHDI_SIG_FXOGS
-#define SIG_FXOKS	DAHDI_SIG_FXOKS
-#define SIG_PRI		DAHDI_SIG_CLEAR
-#define SIG_BRI		(0x2000000 | DAHDI_SIG_CLEAR)
-#define SIG_BRI_PTMP	(0X4000000 | DAHDI_SIG_CLEAR)
-#define SIG_SS7		(0x1000000 | DAHDI_SIG_CLEAR)
-#define SIG_MFCR2 	DAHDI_SIG_CAS
-#define	SIG_SF		DAHDI_SIG_SF
-#define SIG_SFWINK 	(0x0100000 | DAHDI_SIG_SF)
-#define SIG_SF_FEATD	(0x0200000 | DAHDI_SIG_SF)
-#define	SIG_SF_FEATDMF	(0x0400000 | DAHDI_SIG_SF)
-#define	SIG_SF_FEATB	(0x0800000 | DAHDI_SIG_SF)
-#define SIG_EM_E1	DAHDI_SIG_EM_E1
-
 #ifdef LOTS_OF_SPANS
 #define NUM_SPANS	DAHDI_MAX_SPANS
 #else
@@ -578,8 +548,6 @@
 
 static int restart_monitor(void);
 
-static enum ast_bridge_result dahdi_bridge(struct ast_channel *c0, struct ast_channel *c1, int flags, struct ast_frame **fo, struct ast_channel **rc, int timeoutms);
-
 static int dahdi_sendtext(struct ast_channel *c, const char *text);
 
 static void mwi_event_cb(void *userdata, struct stasis_subscription *sub, struct stasis_topic *topic, struct stasis_message *msg)
@@ -624,8 +592,6 @@
 #define MIN_MS_SINCE_FLASH				((2000) )	/*!< 2000 ms */
 #define DEFAULT_RINGT 					((8000 * 8) / READ_SIZE) /*!< 8,000 ms */
 #define DEFAULT_DIALTONE_DETECT_TIMEOUT ((10000 * 8) / READ_SIZE) /*!< 10,000 ms */
-
-struct dahdi_pvt;
 
 /*!
  * \brief Configured ring timeout base.
@@ -722,642 +688,14 @@
 struct dahdi_pri;
 #endif
 
-#define SUB_REAL	0			/*!< Active call */
-#define SUB_CALLWAIT	1			/*!< Call-Waiting call on hold */
-#define SUB_THREEWAY	2			/*!< Three-way call */
-
 /* Polarity states */
 #define POLARITY_IDLE   0
 #define POLARITY_REV    1
 
-
-struct distRingData {
-	int ring[3];
-	int range;
-};
-struct ringContextData {
-	char contextData[AST_MAX_CONTEXT];
-};
-struct dahdi_distRings {
-	struct distRingData ringnum[3];
-	struct ringContextData ringContext[3];
-};
-
-static const char * const subnames[] = {
+const char * const subnames[] = {
 	"Real",
 	"Callwait",
 	"Threeway"
-};
-
-struct dahdi_subchannel {
-	int dfd;
-	struct ast_channel *owner;
-	int chan;
-	short buffer[AST_FRIENDLY_OFFSET/2 + READ_SIZE];
-	struct ast_frame f;		/*!< One frame for each channel.  How did this ever work before? */
-	unsigned int needringing:1;
-	unsigned int needbusy:1;
-	unsigned int needcongestion:1;
-	unsigned int needanswer:1;
-	unsigned int needflash:1;
-	unsigned int needhold:1;
-	unsigned int needunhold:1;
-	unsigned int linear:1;
-	unsigned int inthreeway:1;
-	struct dahdi_confinfo curconf;
-};
-
-#define CONF_USER_REAL		(1 << 0)
-#define CONF_USER_THIRDCALL	(1 << 1)
-
-#define MAX_SLAVES	4
-
-/* States for sending MWI message

[... 12459 lines stripped ...]



More information about the asterisk-commits mailing list