[asterisk-commits] mmichelson: branch mmichelson/features_config r390666 - in /team/mmichelson/f...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Jun 6 09:00:55 CDT 2013


Author: mmichelson
Date: Thu Jun  6 09:00:53 2013
New Revision: 390666

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=390666
Log:
Resolve conflict and reset automerge.


Modified:
    team/mmichelson/features_config/   (props changed)
    team/mmichelson/features_config/bridges/bridge_builtin_interval_features.c
    team/mmichelson/features_config/channels/chan_dahdi.c
    team/mmichelson/features_config/include/asterisk/bridging_features.h
    team/mmichelson/features_config/include/asterisk/stasis.h
    team/mmichelson/features_config/main/bridging.c
    team/mmichelson/features_config/main/bridging_basic.c
    team/mmichelson/features_config/main/core_local.c
    team/mmichelson/features_config/main/features.c
    team/mmichelson/features_config/main/manager_channels.c
    team/mmichelson/features_config/res/parking/parking_bridge_features.c

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

Propchange: team/mmichelson/features_config/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Thu Jun  6 09:00:53 2013
@@ -1,1 +1,1 @@
-/trunk:1-390522
+/trunk:1-390665

Modified: team/mmichelson/features_config/bridges/bridge_builtin_interval_features.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/features_config/bridges/bridge_builtin_interval_features.c?view=diff&rev=390666&r1=390665&r2=390666
==============================================================================
--- team/mmichelson/features_config/bridges/bridge_builtin_interval_features.c (original)
+++ team/mmichelson/features_config/bridges/bridge_builtin_interval_features.c Thu Jun  6 09:00:53 2013
@@ -146,7 +146,8 @@
 	ast_string_field_set(dst, connect_sound, src->connect_sound);
 }
 
-static int bridge_builtin_set_limits(struct ast_bridge_features *features, struct ast_bridge_features_limits *limits, int remove_on_pull)
+static int bridge_builtin_set_limits(struct ast_bridge_features *features,
+		struct ast_bridge_features_limits *limits, enum ast_bridge_hook_remove_flags remove_flags)
 {
 	struct ast_bridge_features_limits *feature_limits;
 
@@ -173,7 +174,7 @@
 
 /* BUGBUG feature interval hooks need to be reimplemented to be more stand alone. */
 	if (ast_bridge_interval_hook(features, feature_limits->duration,
-		bridge_features_duration_callback, feature_limits, NULL, remove_on_pull)) {
+		bridge_features_duration_callback, feature_limits, NULL, remove_flags)) {
 		ast_log(LOG_ERROR, "Failed to schedule the duration limiter to the bridge channel.\n");
 		return -1;
 	}
@@ -182,14 +183,14 @@
 
 	if (!ast_strlen_zero(feature_limits->connect_sound)) {
 		if (ast_bridge_interval_hook(features, 1,
-			bridge_features_connect_callback, feature_limits, NULL, remove_on_pull)) {
+			bridge_features_connect_callback, feature_limits, NULL, remove_flags)) {
 			ast_log(LOG_WARNING, "Failed to schedule connect sound to the bridge channel.\n");
 		}
 	}
 
 	if (feature_limits->warning && feature_limits->warning < feature_limits->duration) {
 		if (ast_bridge_interval_hook(features, feature_limits->duration - feature_limits->warning,
-			bridge_features_warning_callback, feature_limits, NULL, remove_on_pull)) {
+			bridge_features_warning_callback, feature_limits, NULL, remove_flags)) {
 			ast_log(LOG_WARNING, "Failed to schedule warning sound playback to the bridge channel.\n");
 		}
 	}

Modified: team/mmichelson/features_config/channels/chan_dahdi.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/features_config/channels/chan_dahdi.c?view=diff&rev=390666&r1=390665&r2=390666
==============================================================================
--- team/mmichelson/features_config/channels/chan_dahdi.c (original)
+++ team/mmichelson/features_config/channels/chan_dahdi.c Thu Jun  6 09:00:53 2013
@@ -1555,6 +1555,7 @@
 static int dahdi_cc_callback(struct ast_channel *inbound, const char *dest, ast_cc_callback_fn callback);
 
 /* BUGBUG The DAHDI channel driver needs its own native bridge technology. */
+/* BUGBUG The transfer=yes option is broken for ISDN to push tromboned calls to the peer. */
 static struct ast_channel_tech dahdi_tech = {
 	.type = "DAHDI",
 	.description = tdesc,

Modified: team/mmichelson/features_config/include/asterisk/bridging_features.h
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/features_config/include/asterisk/bridging_features.h?view=diff&rev=390666&r1=390665&r2=390666
==============================================================================
--- team/mmichelson/features_config/include/asterisk/bridging_features.h (original)
+++ team/mmichelson/features_config/include/asterisk/bridging_features.h Thu Jun  6 09:00:53 2013
@@ -182,7 +182,7 @@
 
 enum ast_bridge_hook_remove_flags {
 	/*! The hook is removed when the channel is pulled from the bridge. */
-	AST_BRIDGE_HOOK_REMOVE_ON_PULL,
+	AST_BRIDGE_HOOK_REMOVE_ON_PULL = (1 << 0),
 };
 
 /* BUGBUG Need to be able to selectively remove DTMF, hangup, and interval hooks. */
@@ -336,12 +336,13 @@
  *
  * \param features Bridge features structure
  * \param limits Configured limits applicable to the channel
- * \param remove_on_pull TRUE if remove the hook when the channel is pulled from the bridge.
- *
- * \retval 0 on success
- * \retval -1 on failure
- */
-typedef int (*ast_bridge_builtin_set_limits_fn)(struct ast_bridge_features *features, struct ast_bridge_features_limits *limits, int remove_on_pull);
+ * \param remove_flags Dictates what situations the hook should be removed.
+ *
+ * \retval 0 on success
+ * \retval -1 on failure
+ */
+typedef int (*ast_bridge_builtin_set_limits_fn)(struct ast_bridge_features *features,
+		struct ast_bridge_features_limits *limits, enum ast_bridge_hook_remove_flags remove_flags);
 
 /*!
  * \brief Register a handler for a built in interval feature
@@ -388,7 +389,7 @@
  * \param callback Function to execute upon activation
  * \param hook_pvt Unique data
  * \param destructor Optional destructor callback for hook_pvt data
- * \param remove_on_pull TRUE if remove the hook when the channel is pulled from the bridge.
+ * \param remove_flags Dictates what situations the hook should be removed.
  *
  * \retval 0 on success
  * \retval -1 on failure
@@ -409,7 +410,7 @@
 	ast_bridge_hook_callback callback,
 	void *hook_pvt,
 	ast_bridge_hook_pvt_destructor destructor,
-	int remove_on_pull);
+	enum ast_bridge_hook_remove_flags remove_flags);
 
 /*!
  * \brief Attach a bridge channel leave hook to a bridge features structure
@@ -418,7 +419,7 @@
  * \param callback Function to execute upon activation
  * \param hook_pvt Unique data
  * \param destructor Optional destructor callback for hook_pvt data
- * \param remove_on_pull TRUE if remove the hook when the channel is pulled from the bridge.
+ * \param remove_flags Dictates what situations the hook should be removed.
  *
  * \retval 0 on success
  * \retval -1 on failure
@@ -439,7 +440,7 @@
 	ast_bridge_hook_callback callback,
 	void *hook_pvt,
 	ast_bridge_hook_pvt_destructor destructor,
-	int remove_on_pull);
+	enum ast_bridge_hook_remove_flags remove_flags);
 
 /*!
  * \brief Attach a hangup hook to a bridge features structure
@@ -448,7 +449,7 @@
  * \param callback Function to execute upon activation
  * \param hook_pvt Unique data
  * \param destructor Optional destructor callback for hook_pvt data
- * \param remove_on_pull TRUE if remove the hook when the channel is pulled from the bridge.
+ * \param remove_flags Dictates what situations the hook should be removed.
  *
  * \retval 0 on success
  * \retval -1 on failure
@@ -469,7 +470,7 @@
 	ast_bridge_hook_callback callback,
 	void *hook_pvt,
 	ast_bridge_hook_pvt_destructor destructor,
-	int remove_on_pull);
+	enum ast_bridge_hook_remove_flags remove_flags);
 
 /*!
  * \brief Attach a DTMF hook to a bridge features structure
@@ -479,7 +480,7 @@
  * \param callback Function to execute upon activation
  * \param hook_pvt Unique data
  * \param destructor Optional destructor callback for hook_pvt data
- * \param remove_on_pull TRUE if remove the hook when the channel is pulled from the bridge.
+ * \param remove_flags Dictates what situations the hook should be removed.
  *
  * \retval 0 on success
  * \retval -1 on failure
@@ -501,7 +502,7 @@
 	ast_bridge_hook_callback callback,
 	void *hook_pvt,
 	ast_bridge_hook_pvt_destructor destructor,
-	int remove_on_pull);
+	enum ast_bridge_hook_remove_flags remove_flags);
 
 /*!
  * \brief attach an interval hook to a bridge features structure
@@ -511,7 +512,7 @@
  * \param callback Function to execute upon activation
  * \param hook_pvt Unique data
  * \param destructor Optional destructor callback for hook_pvt data
- * \param remove_on_pull TRUE if remove the hook when the channel is pulled from the bridge.
+ * \param remove_flags Dictates what situations the hook should be removed.
  *
  * \retval 0 on success
  * \retval -1 on failure
@@ -530,7 +531,7 @@
 	ast_bridge_hook_callback callback,
 	void *hook_pvt,
 	ast_bridge_hook_pvt_destructor destructor,
-	int remove_on_pull);
+	enum ast_bridge_hook_remove_flags remove_flags);
 
 /*!
  * \brief Set a callback on the features structure to receive talking notifications on.
@@ -555,7 +556,7 @@
  * \param dtmf Optionally the DTMF stream to trigger the feature, if not specified it will be the default
  * \param config Configuration structure unique to the built in type
  * \param destructor Optional destructor callback for config data
- * \param remove_on_pull TRUE if remove the hook when the channel is pulled from the bridge.
+ * \param remove_flags Dictates what situations the hook should be removed.
  *
  * \retval 0 on success
  * \retval -1 on failure
@@ -577,7 +578,7 @@
 	const char *dtmf,
 	void *config,
 	ast_bridge_hook_pvt_destructor destructor,
-	int remove_on_pull);
+	enum ast_bridge_hook_remove_flags remove_flags);
 
 /*!
  * \brief Constructor function for ast_bridge_features_limits
@@ -604,7 +605,7 @@
  *
  * \param features Bridge features structure
  * \param limits Configured limits applicable to the channel
- * \param remove_on_pull TRUE if remove the hook when the channel is pulled from the bridge.
+ * \param remove_flags Dictates what situations the hook should be removed.
  *
  * \retval 0 on success
  * \retval -1 on failure
@@ -625,7 +626,7 @@
  * \note This API call can only be used on a features structure that will be used in association with a bridge channel.
  * \note The ast_bridge_features_limits structure must remain accessible for the lifetime of the features structure.
  */
-int ast_bridge_features_set_limits(struct ast_bridge_features *features, struct ast_bridge_features_limits *limits, int remove_on_pull);
+int ast_bridge_features_set_limits(struct ast_bridge_features *features, struct ast_bridge_features_limits *limits, enum ast_bridge_hook_remove_flags remove_flags);
 
 /*!
  * \brief Set a flag on a bridge channel features structure

Modified: team/mmichelson/features_config/include/asterisk/stasis.h
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/features_config/include/asterisk/stasis.h?view=diff&rev=390666&r1=390665&r2=390666
==============================================================================
--- team/mmichelson/features_config/include/asterisk/stasis.h (original)
+++ team/mmichelson/features_config/include/asterisk/stasis.h Thu Jun  6 09:00:53 2013
@@ -605,11 +605,13 @@
 
 /*!
  * \brief Retrieve an item from the cache.
+ *
+ * The returned item is AO2 managed, so ao2_cleanup() when you're done with it.
+ *
  * \param caching_topic The topic returned from stasis_caching_topic_create().
  * \param type Type of message to retrieve.
  * \param id Identity of the snapshot to retrieve.
- * \return Message from the cache. The cache still owns the message, so
- *         ao2_ref() if you want to keep it.
+ * \return Message from the cache.
  * \return \c NULL if message is not found.
  * \since 12
  */

Modified: team/mmichelson/features_config/main/bridging.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/features_config/main/bridging.c?view=diff&rev=390666&r1=390665&r2=390666
==============================================================================
--- team/mmichelson/features_config/main/bridging.c (original)
+++ team/mmichelson/features_config/main/bridging.c Thu Jun  6 09:00:53 2013
@@ -2032,7 +2032,10 @@
 static void after_bridge_move_channel(struct ast_channel *chan_bridged, void *data)
 {
 	RAII_VAR(struct ast_channel *, chan_target, data, ao2_cleanup);
-	ast_channel_move(chan_target, chan_bridged);
+
+	if (ast_channel_move(chan_target, chan_bridged)) {
+		ast_softhangup(chan_target, AST_SOFTHANGUP_DEV);
+	}
 }
 
 static void after_bridge_move_channel_fail(enum ast_after_bridge_cb_reason reason, void *data)
@@ -2040,7 +2043,8 @@
 	RAII_VAR(struct ast_channel *, chan_target, data, ao2_cleanup);
 
 	ast_log(LOG_WARNING, "Unable to complete transfer: %s\n",
-			ast_after_bridge_cb_reason_string(reason));
+		ast_after_bridge_cb_reason_string(reason));
+	ast_softhangup(chan_target, AST_SOFTHANGUP_DEV);
 }
 
 static void bridge_channel_attended_transfer(struct ast_bridge_channel *bridge_channel,
@@ -2052,21 +2056,22 @@
 	chan_target = ast_channel_get_by_name(target_chan_name);
 	if (!chan_target) {
 		/* Dang, it disappeared somehow */
+		bridge_handle_hangup(bridge_channel);
 		return;
 	}
 
-	{
-		SCOPED_CHANNELLOCK(lock, bridge_channel);
-		chan_bridged = bridge_channel->chan;
-		if (!chan_bridged) {
-			return;
-		}
-		ao2_ref(chan_bridged, +1);
-	}
+	ast_bridge_channel_lock(bridge_channel);
+	chan_bridged = bridge_channel->chan;
+	ast_assert(chan_bridged != NULL);
+	ao2_ref(chan_bridged, +1);
+	ast_bridge_channel_unlock(bridge_channel);
 
 	if (ast_after_bridge_callback_set(chan_bridged, after_bridge_move_channel,
-			after_bridge_move_channel_fail, ast_channel_ref(chan_target))) {
-		return;
+		after_bridge_move_channel_fail, ast_channel_ref(chan_target))) {
+		ast_softhangup(chan_target, AST_SOFTHANGUP_DEV);
+
+		/* Release the ref we tried to pass to ast_after_bridge_callback_set(). */
+		ast_channel_unref(chan_target);
 	}
 	bridge_handle_hangup(bridge_channel);
 }
@@ -4384,7 +4389,7 @@
  * \param callback Function to execute upon activation
  * \param hook_pvt Unique data
  * \param destructor Optional destructor callback for hook_pvt data
- * \param remove_on_pull TRUE if remove the hook when the channel is pulled from the bridge.
+ * \param remove_flags Dictates what situations the hook should be removed.
  *
  * \retval hook on success.
  * \retval NULL on error.
@@ -4393,7 +4398,7 @@
 	ast_bridge_hook_callback callback,
 	void *hook_pvt,
 	ast_bridge_hook_pvt_destructor destructor,
-	int remove_on_pull)
+	enum ast_bridge_hook_remove_flags remove_flags)
 {
 	struct ast_bridge_hook *hook;
 
@@ -4403,7 +4408,7 @@
 		hook->callback = callback;
 		hook->destructor = destructor;
 		hook->hook_pvt = hook_pvt;
-		ast_set_flag(&hook->remove_flags, AST_BRIDGE_HOOK_REMOVE_ON_PULL);
+		ast_set_flag(&hook->remove_flags, remove_flags);
 	}
 
 	return hook;
@@ -4414,14 +4419,14 @@
 	ast_bridge_hook_callback callback,
 	void *hook_pvt,
 	ast_bridge_hook_pvt_destructor destructor,
-	int remove_on_pull)
+	enum ast_bridge_hook_remove_flags remove_flags)
 {
 	struct ast_bridge_hook *hook;
 	int res;
 
 	/* Allocate new hook and setup it's various variables */
 	hook = bridge_hook_generic(sizeof(*hook), callback, hook_pvt, destructor,
-		remove_on_pull);
+		remove_flags);
 	if (!hook) {
 		return -1;
 	}
@@ -4438,14 +4443,14 @@
 	ast_bridge_hook_callback callback,
 	void *hook_pvt,
 	ast_bridge_hook_pvt_destructor destructor,
-	int remove_on_pull)
+	enum ast_bridge_hook_remove_flags remove_flags)
 {
 	struct ast_bridge_hook *hook;
 	int res;
 
 	/* Allocate new hook and setup it's various variables */
 	hook = bridge_hook_generic(sizeof(*hook), callback, hook_pvt, destructor,
-		remove_on_pull);
+		remove_flags);
 	if (!hook) {
 		return -1;
 	}
@@ -4461,14 +4466,14 @@
 	ast_bridge_hook_callback callback,
 	void *hook_pvt,
 	ast_bridge_hook_pvt_destructor destructor,
-	int remove_on_pull)
+	enum ast_bridge_hook_remove_flags remove_flags)
 {
 	struct ast_bridge_hook *hook;
 	int res;
 
 	/* Allocate new hook and setup it's various variables */
 	hook = bridge_hook_generic(sizeof(*hook), callback, hook_pvt, destructor,
-		remove_on_pull);
+		remove_flags);
 	if (!hook) {
 		return -1;
 	}
@@ -4484,14 +4489,14 @@
 	ast_bridge_hook_callback callback,
 	void *hook_pvt,
 	ast_bridge_hook_pvt_destructor destructor,
-	int remove_on_pull)
+	enum ast_bridge_hook_remove_flags remove_flags)
 {
 	struct ast_bridge_hook *hook;
 	int res;
 
 	/* Allocate new hook and setup it's various variables */
 	hook = bridge_hook_generic(sizeof(*hook), callback, hook_pvt, destructor,
-		remove_on_pull);
+		remove_flags);
 	if (!hook) {
 		return -1;
 	}
@@ -4518,7 +4523,7 @@
 	ast_bridge_hook_callback callback,
 	void *hook_pvt,
 	ast_bridge_hook_pvt_destructor destructor,
-	int remove_on_pull)
+	enum ast_bridge_hook_remove_flags remove_flags)
 {
 	struct ast_bridge_hook *hook;
 	int res;
@@ -4537,7 +4542,7 @@
 
 	/* Allocate new hook and setup it's various variables */
 	hook = bridge_hook_generic(sizeof(*hook), callback, hook_pvt, destructor,
-		remove_on_pull);
+		remove_flags);
 	if (!hook) {
 		return -1;
 	}
@@ -4563,7 +4568,7 @@
 	const char *dtmf,
 	void *config,
 	ast_bridge_hook_pvt_destructor destructor,
-	int remove_on_pull)
+	enum ast_bridge_hook_remove_flags remove_flags)
 {
 	if (ARRAY_LEN(builtin_features_handlers) <= feature
 		|| !builtin_features_handlers[feature]) {
@@ -4586,7 +4591,7 @@
 	 * using the built in feature's DTMF callback.  Easy as pie.
 	 */
 	return ast_bridge_dtmf_hook(features, dtmf, builtin_features_handlers[feature],
-		config, destructor, remove_on_pull);
+		config, destructor, remove_flags);
 }
 
 int ast_bridge_features_limits_construct(struct ast_bridge_features_limits *limits)
@@ -4606,13 +4611,14 @@
 	ast_string_field_free_memory(limits);
 }
 
-int ast_bridge_features_set_limits(struct ast_bridge_features *features, struct ast_bridge_features_limits *limits, int remove_on_pull)
+int ast_bridge_features_set_limits(struct ast_bridge_features *features,
+		struct ast_bridge_features_limits *limits, enum ast_bridge_hook_remove_flags remove_flags)
 {
 	if (builtin_interval_handlers[AST_BRIDGE_BUILTIN_INTERVAL_LIMITS]) {
 		ast_bridge_builtin_set_limits_fn bridge_features_set_limits_callback;
 
 		bridge_features_set_limits_callback = builtin_interval_handlers[AST_BRIDGE_BUILTIN_INTERVAL_LIMITS];
-		return bridge_features_set_limits_callback(features, limits, remove_on_pull);
+		return bridge_features_set_limits_callback(features, limits, remove_flags);
 	}
 
 	ast_log(LOG_ERROR, "Attempted to set limits without an AST_BRIDGE_BUILTIN_INTERVAL_LIMITS callback registered.\n");
@@ -4627,7 +4633,7 @@
 
 /*!
  * \internal
- * \brief ao2 object match remove_on_pull hooks.
+ * \brief ao2 object match hooks with appropriate remove_flags.
  * \since 12.0.0
  *
  * \param obj Feature hook object.
@@ -4651,7 +4657,7 @@
 
 /*!
  * \internal
- * \brief Remove all remove_on_pull hooks in the container.
+ * \brief Remove all hooks with appropriate remove_flags in the container.
  * \since 12.0.0
  *
  * \param hooks Hooks container to work on.
@@ -4667,7 +4673,7 @@
 
 /*!
  * \internal
- * \brief Remove all remove_on_pull hooks in the heap.
+ * \brief Remove all hooks in the heap with appropriate remove_flags set.
  * \since 12.0.0
  *
  * \param hooks Hooks heap to work on.
@@ -5374,11 +5380,11 @@
 	}
 
 	ast_copy_string(unbridged_chan_name, ast_channel_name(unbridged_chan),
-			sizeof(unbridged_chan_name));
+		sizeof(unbridged_chan_name));
 
 	ast_bridge_channel_queue_action_data(transferee_bridge_channel,
-			AST_BRIDGE_ACTION_ATTENDED_TRANSFER, unbridged_chan_name,
-			sizeof(unbridged_chan_name));
+		AST_BRIDGE_ACTION_ATTENDED_TRANSFER, unbridged_chan_name,
+		sizeof(unbridged_chan_name));
 
 	return 0;
 }
@@ -5513,6 +5519,7 @@
 
 	{
 		SCOPED_LOCK(lock, bridge, ast_bridge_lock, ast_bridge_unlock);
+
 		channels = ast_bridge_peers_nolock(bridge);
 		if (!channels) {
 			return AST_BRIDGE_TRANSFER_FAIL;
@@ -5575,11 +5582,17 @@
 	struct ast_bridge_channel *bridged_to_source;
 
 	bridged_to_source = ast_bridge_channel_peer(source_bridge_channel);
-	if (bridged_to_source && bridged_to_source->state == AST_BRIDGE_CHANNEL_STATE_WAIT
-			&& !ast_test_flag(&bridged_to_source->features->feature_flags, AST_BRIDGE_CHANNEL_FLAG_IMMOVABLE)) {
+	if (bridged_to_source
+		&& bridged_to_source->state == AST_BRIDGE_CHANNEL_STATE_WAIT
+		&& !ast_test_flag(&bridged_to_source->features->feature_flags,
+			AST_BRIDGE_CHANNEL_FLAG_IMMOVABLE)) {
 		bridged_to_source->swap = swap_channel;
-		return bridge_move_do(dest_bridge, bridged_to_source, 1) ?
-			AST_BRIDGE_TRANSFER_FAIL : AST_BRIDGE_TRANSFER_SUCCESS;
+		if (bridge_move_do(dest_bridge, bridged_to_source, 1)) {
+			return AST_BRIDGE_TRANSFER_FAIL;
+		}
+		/* Must kick the source channel out of its bridge. */
+		ast_bridge_change_state(source_bridge_channel, AST_BRIDGE_CHANNEL_STATE_HANGUP);
+		return AST_BRIDGE_TRANSFER_SUCCESS;
 	} else {
 		return AST_BRIDGE_TRANSFER_INVALID;
 	}

Modified: team/mmichelson/features_config/main/bridging_basic.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/features_config/main/bridging_basic.c?view=diff&rev=390666&r1=390665&r2=390666
==============================================================================
--- team/mmichelson/features_config/main/bridging_basic.c (original)
+++ team/mmichelson/features_config/main/bridging_basic.c Thu Jun  6 09:00:53 2013
@@ -126,7 +126,7 @@
  */
 static int bridge_basic_push(struct ast_bridge *self, struct ast_bridge_channel *bridge_channel, struct ast_bridge_channel *swap)
 {
-	if (ast_bridge_hangup_hook(bridge_channel->features, basic_hangup_hook, NULL, NULL, 1)
+	if (ast_bridge_hangup_hook(bridge_channel->features, basic_hangup_hook, NULL, NULL, AST_BRIDGE_HOOK_REMOVE_ON_PULL)
 		|| ast_bridge_channel_setup_features(bridge_channel)) {
 		return -1;
 	}

Modified: team/mmichelson/features_config/main/core_local.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/features_config/main/core_local.c?view=diff&rev=390666&r1=390665&r2=390666
==============================================================================
--- team/mmichelson/features_config/main/core_local.c (original)
+++ team/mmichelson/features_config/main/core_local.c Thu Jun  6 09:00:53 2013
@@ -445,9 +445,8 @@
 	case LOCAL_CALL_ACTION_MASQUERADE:
 		local_bridge_event(p);
 		ast_answer(chan);
-		res = ast_channel_masquerade(p->action.masq, chan);
+		res = ast_channel_move(p->action.masq, chan);
 		if (!res) {
-			ast_do_masquerade(p->action.masq);
 			/* Chan is now an orphaned zombie.  Destroy it. */
 			ast_hangup(chan);
 		}

Modified: team/mmichelson/features_config/main/features.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/features_config/main/features.c?view=diff&rev=390666&r1=390665&r2=390666
==============================================================================
--- team/mmichelson/features_config/main/features.c (original)
+++ team/mmichelson/features_config/main/features.c Thu Jun  6 09:00:53 2013
@@ -3246,33 +3246,39 @@
 				&& !ast_strlen_zero(dtmf)) {
 		/* Add atxfer and blind transfer. */
 /* BUGBUG need to supply a blind transfer structure and destructor to use other than defaults */
-			res |= ast_bridge_features_enable(features, AST_BRIDGE_BUILTIN_BLINDTRANSFER, dtmf, NULL, NULL, 1);
+			res |= ast_bridge_features_enable(features, AST_BRIDGE_BUILTIN_BLINDTRANSFER, dtmf,
+					NULL, NULL, AST_BRIDGE_HOOK_REMOVE_ON_PULL);
 		}
 		if (!builtin_feature_get_exten(chan, "atxfer", dtmf, sizeof(dtmf)) &&
 				!ast_strlen_zero(dtmf)) {
 /* BUGBUG need to supply an attended transfer structure and destructor to use other than defaults */
-			res |= ast_bridge_features_enable(features, AST_BRIDGE_BUILTIN_ATTENDEDTRANSFER, dtmf, NULL, NULL, 1);
+			res |= ast_bridge_features_enable(features, AST_BRIDGE_BUILTIN_ATTENDEDTRANSFER, dtmf,
+					NULL, NULL, AST_BRIDGE_HOOK_REMOVE_ON_PULL);
 		}
 	}
 	if (ast_test_flag(flags, AST_FEATURE_DISCONNECT) &&
 			!builtin_feature_get_exten(chan, "disconnect", dtmf, sizeof(dtmf)) &&
 			!ast_strlen_zero(dtmf)) {
-		res |= ast_bridge_features_enable(features, AST_BRIDGE_BUILTIN_HANGUP, dtmf, NULL, NULL, 1);
+		res |= ast_bridge_features_enable(features, AST_BRIDGE_BUILTIN_HANGUP, dtmf,
+				NULL, NULL, AST_BRIDGE_HOOK_REMOVE_ON_PULL1);
 	}
 	if (ast_test_flag(flags, AST_FEATURE_PARKCALL) &&
 			!builtin_feature_get_exten(chan, "parkcall", dtmf, sizeof(dtmf)) &&
 			!ast_strlen_zero(dtmf)) {
-		res |= ast_bridge_features_enable(features, AST_BRIDGE_BUILTIN_PARKCALL, dtmf, NULL, NULL, 1);
+		res |= ast_bridge_features_enable(features, AST_BRIDGE_BUILTIN_PARKCALL, dtmf,
+				NULL, NULL, AST_BRIDGE_HOOK_REMOVE_ON_PULL1);
 	}
 	if (ast_test_flag(flags, AST_FEATURE_AUTOMON) &&
 			!builtin_feature_get_exten(chan, "automon", dtmf, sizeof(dtmf)) &&
 			!ast_strlen_zero(dtmf)) {
-		res |= ast_bridge_features_enable(features, AST_BRIDGE_BUILTIN_AUTOMON, dtmf, NULL, NULL, 1);
+		res |= ast_bridge_features_enable(features, AST_BRIDGE_BUILTIN_AUTOMON, dtmf,
+				NULL, NULL, AST_BRIDGE_HOOK_REMOVE_ON_PULL1);
 	}
 	if (ast_test_flag(flags, AST_FEATURE_AUTOMIXMON) &&
 			!builtin_feature_get_exten(chan, "automixmon", dtmf, sizeof(dtmf)) &&
 			!ast_strlen_zero(dtmf)) {
-		res |= ast_bridge_features_enable(features, AST_BRIDGE_BUILTIN_AUTOMIXMON, dtmf, NULL, NULL, 1);
+		res |= ast_bridge_features_enable(features, AST_BRIDGE_BUILTIN_AUTOMIXMON, dtmf,
+				NULL, NULL, AST_BRIDGE_HOOK_REMOVE_ON_PULL1);
 	}
 
 #if 0	/* BUGBUG don't report errors untill all of the builtin features are supported. */

Modified: team/mmichelson/features_config/main/manager_channels.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/features_config/main/manager_channels.c?view=diff&rev=390666&r1=390665&r2=390666
==============================================================================
--- team/mmichelson/features_config/main/manager_channels.c (original)
+++ team/mmichelson/features_config/main/manager_channels.c Thu Jun  6 09:00:53 2013
@@ -859,7 +859,7 @@
 		struct stasis_topic *topic, struct stasis_message *message)
 {
 	RAII_VAR(struct ast_str *, spyer_channel_string, NULL, ast_free);
-	RAII_VAR(struct ast_channel_snapshot *, spyer, NULL, ao2_cleanup);
+	struct ast_channel_snapshot *spyer;
 	struct ast_multi_channel_blob *payload = stasis_message_data(message);
 
 	spyer = ast_multi_channel_blob_get_channel(payload, "spyer_channel");
@@ -883,8 +883,8 @@
 {
 	RAII_VAR(struct ast_str *, spyer_channel_string, NULL, ast_free);
 	RAII_VAR(struct ast_str *, spyee_channel_string, NULL, ast_free);
-	RAII_VAR(struct ast_channel_snapshot *, spyer, NULL, ao2_cleanup);
-	RAII_VAR(struct ast_channel_snapshot *, spyee, NULL, ao2_cleanup);
+	struct ast_channel_snapshot *spyer;
+	struct ast_channel_snapshot *spyee;
 	struct ast_multi_channel_blob *payload = stasis_message_data(message);
 
 	spyer = ast_multi_channel_blob_get_channel(payload, "spyer_channel");

Modified: team/mmichelson/features_config/res/parking/parking_bridge_features.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/features_config/res/parking/parking_bridge_features.c?view=diff&rev=390666&r1=390665&r2=390666
==============================================================================
--- team/mmichelson/features_config/res/parking/parking_bridge_features.c (original)
+++ team/mmichelson/features_config/res/parking/parking_bridge_features.c Thu Jun  6 09:00:53 2013
@@ -458,7 +458,7 @@
 	ao2_ref(user, +1);
 
 	if (ast_bridge_interval_hook(features, time_limit,
-		parking_duration_callback, user, parking_duration_cb_destroyer, 1)) {
+		parking_duration_callback, user, parking_duration_cb_destroyer, AST_BRIDGE_HOOK_REMOVE_ON_PULL)) {
 		ast_log(LOG_ERROR, "Failed to apply duration limits to the parking call.\n");
 	}
 }




More information about the asterisk-commits mailing list