[asterisk-commits] rmudgett: trunk r401423 - in /trunk: ./ res/parking/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Oct 22 11:33:28 CDT 2013


Author: rmudgett
Date: Tue Oct 22 11:33:16 2013
New Revision: 401423

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=401423
Log:
res_parking: Give parking timeout comebacktoorigin channel DTMF features.

Parking timeouts did not set any DTMF features for the channel calling the
parker back.

* Added code to set the parkedcalltransfers, parkedcallreparking,
parkedcallhangup, and parkedcallrecording options appropriately for the
channels when a parking timeout occurs.  The recall channel DTMF options
are set using the BRIDGE_FEATURES channel variable to allow the other
timeout options to have the DTMF features available.

(closes issue ASTERISK-22542)
Reported by: Kevin Harwell

Review: https://reviewboard.asterisk.org/r/2942/
........

Merged revisions 401422 from http://svn.asterisk.org/svn/asterisk/branches/12

Modified:
    trunk/   (props changed)
    trunk/res/parking/parking_bridge.c
    trunk/res/parking/parking_bridge_features.c

Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-12-merged' - no diff available.

Modified: trunk/res/parking/parking_bridge.c
URL: http://svnview.digium.com/svn/asterisk/trunk/res/parking/parking_bridge.c?view=diff&rev=401423&r1=401422&r2=401423
==============================================================================
--- trunk/res/parking/parking_bridge.c (original)
+++ trunk/res/parking/parking_bridge.c Tue Oct 22 11:33:16 2013
@@ -368,16 +368,16 @@
 	case PARK_UNSET:
 		/* This should be impossible now since the resolution is forcibly set to abandon if it was unset at this point. Resolution
 		   isn't allowed to be changed when it isn't currently PARK_UNSET. */
-		return;
+		break;
 	case PARK_ABANDON:
 		/* Since the call was abandoned without additional handling, we need to issue the give up event and unpark the user. */
 		publish_parked_call(pu, PARKED_CALL_GIVEUP);
 		unpark_parked_user(pu);
-		return;
+		break;
 	case PARK_FORCED:
 		/* PARK_FORCED is currently unused, but it is expected that it would be handled similar to PARK_ANSWERED.
 		 * There is currently no event related to forced parked calls either */
-		return;
+		break;
 	case PARK_ANSWERED:
 		/* If answered or forced, the channel should be pulled from the bridge as part of that process and unlinked from
 		 * the parking lot afterwards. We do need to apply bridge features though and play the courtesy tone if set. */
@@ -387,14 +387,14 @@
 		if (pu->lot->cfg->parkedplay & AST_FEATURE_FLAG_BYCALLEE) {
 			ast_bridge_channel_queue_playfile(bridge_channel, NULL, pu->lot->cfg->courtesytone, NULL);
 		}
-
-		return;
+		break;
 	case PARK_TIMEOUT:
 		/* Timeout is similar to abandon because it simply sets the bridge state to end and doesn't
 		 * actually pull the channel. Because of that, unpark should happen in here. */
 		publish_parked_call(pu, PARKED_CALL_TIMEOUT);
+		parked_call_retrieve_enable_features(bridge_channel->chan, pu->lot, AST_FEATURE_FLAG_BYCALLEE);
 		unpark_parked_user(pu);
-		return;
+		break;
 	}
 }
 

Modified: trunk/res/parking/parking_bridge_features.c
URL: http://svnview.digium.com/svn/asterisk/trunk/res/parking/parking_bridge_features.c?view=diff&rev=401423&r1=401422&r2=401423
==============================================================================
--- trunk/res/parking/parking_bridge_features.c (original)
+++ trunk/res/parking/parking_bridge_features.c Tue Oct 22 11:33:16 2013
@@ -452,6 +452,43 @@
 	return parking_park_call(bridge_channel, NULL, 0);
 }
 
+/*!
+ * \internal
+ * \brief Setup the caller features for when that channel is dialed.
+ * \since 12.0.0
+ *
+ * \param chan Parked channel leaving the parking lot.
+ * \param cfg Parking lot configuration.
+ *
+ * \return Nothing
+ */
+static void parking_timeout_set_caller_features(struct ast_channel *chan, struct parking_lot_cfg *cfg)
+{
+	char features[5];
+	char *pos;
+
+	/*
+	 * We are setting the callee Dial flag values because in the
+	 * timeout case, the caller is who is being called back.
+	 */
+	pos = features;
+	if (cfg->parkedcalltransfers & AST_FEATURE_FLAG_BYCALLER) {
+		*pos++ = 't';
+	}
+	if (cfg->parkedcallreparking & AST_FEATURE_FLAG_BYCALLER) {
+		*pos++ = 'k';
+	}
+	if (cfg->parkedcallhangup & AST_FEATURE_FLAG_BYCALLER) {
+		*pos++ = 'h';
+	}
+	if (cfg->parkedcallrecording & AST_FEATURE_FLAG_BYCALLER) {
+		*pos++ = 'x';
+	}
+	*pos = '\0';
+
+	pbx_builtin_setvar_helper(chan, "BRIDGE_FEATURES", features);
+}
+
 /*! \internal
  * \brief Interval hook. Pulls a parked call from the parking bridge after the timeout is passed and sets the resolution to timeout.
  *
@@ -481,25 +518,26 @@
 		ao2_unlock(user);
 		return -1;
 	}
-
 	user->resolution = PARK_TIMEOUT;
 	ao2_unlock(user);
 
 	ast_bridge_channel_leave_bridge(bridge_channel, BRIDGE_CHANNEL_STATE_END_NO_DISSOLVE,
 		AST_CAUSE_NORMAL_CLEARING);
 
+	dial_string = user->parker_dial_string;
+	dial_string_flat = ast_strdupa(dial_string);
+	flatten_dial_string(dial_string_flat);
+
 	/* Set parking timeout channel variables */
 	snprintf(parking_space, sizeof(parking_space), "%d", user->parking_space);
+	ast_channel_stage_snapshot(chan);
 	pbx_builtin_setvar_helper(chan, "PARKING_SPACE", parking_space);
 	pbx_builtin_setvar_helper(chan, "PARKINGSLOT", parking_space); /* Deprecated version of PARKING_SPACE */
 	pbx_builtin_setvar_helper(chan, "PARKEDLOT", user->lot->name);
-
-	dial_string = user->parker_dial_string;
-	dial_string_flat = ast_strdupa(dial_string);
-	flatten_dial_string(dial_string_flat);
-
 	pbx_builtin_setvar_helper(chan, "PARKER", dial_string);
 	pbx_builtin_setvar_helper(chan, "PARKER_FLAT", dial_string_flat);
+	parking_timeout_set_caller_features(chan, user->lot->cfg);
+	ast_channel_stage_snapshot_done(chan);
 
 	/* Dialplan generation for park-dial extensions */
 
@@ -532,7 +570,6 @@
 		user->lot->cfg->comebackdialtime);
 
 	duplicate_returnexten = ast_strdup(returnexten);
-
 	if (!duplicate_returnexten) {
 		ast_log(LOG_ERROR, "Failed to create parking redial parker extension %s@%s - Dial(%s)\n",
 			dial_string_flat, PARK_DIAL_CONTEXT, returnexten);




More information about the asterisk-commits mailing list