[svn-commits] rmudgett: branch rmudgett/cel_accountcode r418214 - in /team/rmudgett/cel_acc...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Tue Jul 8 18:03:52 CDT 2014


Author: rmudgett
Date: Tue Jul  8 18:03:43 2014
New Revision: 418214

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=418214
Log:
app_queue: Keep accountcodes on outgoing channels if present.

* Renamed ast_channel_request_accountcodes() to
ast_channel_req_accountcodes().

* Added ast_channel_req_accountcodes_precious() to preserve accountcodes.

Modified:
    team/rmudgett/cel_accountcode/UPGRADE.txt
    team/rmudgett/cel_accountcode/apps/app_dial.c
    team/rmudgett/cel_accountcode/apps/app_followme.c
    team/rmudgett/cel_accountcode/apps/app_queue.c
    team/rmudgett/cel_accountcode/include/asterisk/channel.h
    team/rmudgett/cel_accountcode/main/bridge.c
    team/rmudgett/cel_accountcode/main/bridge_basic.c
    team/rmudgett/cel_accountcode/main/channel.c
    team/rmudgett/cel_accountcode/main/dial.c
    team/rmudgett/cel_accountcode/res/parking/parking_bridge_features.c

Modified: team/rmudgett/cel_accountcode/UPGRADE.txt
URL: http://svnview.digium.com/svn/asterisk/team/rmudgett/cel_accountcode/UPGRADE.txt?view=diff&rev=418214&r1=418213&r2=418214
==============================================================================
--- team/rmudgett/cel_accountcode/UPGRADE.txt (original)
+++ team/rmudgett/cel_accountcode/UPGRADE.txt Tue Jul  8 18:03:43 2014
@@ -23,20 +23,28 @@
 
 From 12.4.0 to 12.5.0:
 
- - The accountcode propagation is now consistently propagated to outgoing
-   channels before dialing.  The channel accountcode can change from its
-   original non-empty value on channel creation for the following specific
-   reasons.  One, dialplan sets it using CHANNEL(accountcode).  Two, an
-   originate method that can specify an accountcode value.  Three, the
-   calling channel propagates its peeraccount or accountcode to the
-   outgoing channel's accountcode before dialing.  The change has two
+ - Except for Queue, the accountcode propagation is now consistently
+   propagated to outgoing channels before dialing.  The channel
+   accountcode can change from its original non-empty value on channel
+   creation for the following specific reasons.  One, dialplan sets it
+   using CHANNEL(accountcode).  Two, an originate method that can specify
+   an accountcode value.  Three, the calling channel propagates its
+   peeraccount or accountcode to the outgoing channel's accountcode before
+   dialing.  The change has two visible effects.  One, local channels now
+   cross accountcode and peeraccount across the special bridge between the
+   ;1 and ;2 channels just like channels between normal bridges.  Two, the
+   CHANNEL(peeraccount) value can now be set before Dial and FollowMe to
+   set the accountcode on the outgoing channel(s).
+
+   For Queue, an outgoing channel's non-empty accountcode will not change
+   unless explicitly set by CHANNEL(accountcode).  The change has three
    visible effects.  One, local channels now cross accountcode and
    peeraccount across the special bridge between the ;1 and ;2 channels
-   just like channels between normal bridges.  Two, the CHANNEL(peeraccount)
-   value now can be set before Dial, FollowMe, and Queue to set the
-   accountcode on the outgoing channel(s).  For Queue this now includes
-   local channel members where the accountcodes are propagated early
-   enough to be useful on the ;2 channel.
+   just like channels between normal bridges.  Two, the queue member will
+   get an accountcode if it doesn't have one and one is available from the
+   calling channel's peeraccount or accountcode.  Three, accountcode
+   propagation includes local channel members where the accountcodes are
+   propagated early enough to be available on the ;2 channel.
 
 From 12.3.2 to 12.4.0:
 

Modified: team/rmudgett/cel_accountcode/apps/app_dial.c
URL: http://svnview.digium.com/svn/asterisk/team/rmudgett/cel_accountcode/apps/app_dial.c?view=diff&rev=418214&r1=418213&r2=418214
==============================================================================
--- team/rmudgett/cel_accountcode/apps/app_dial.c (original)
+++ team/rmudgett/cel_accountcode/apps/app_dial.c Tue Jul  8 18:03:43 2014
@@ -950,7 +950,7 @@
 			ast_connected_line_copy_from_caller(ast_channel_connected(c), ast_channel_caller(in));
 		}
 
-		ast_channel_request_accountcodes(c, in, AST_CHANNEL_REQUESTOR_BRIDGE_PEER);
+		ast_channel_req_accountcodes(c, in, AST_CHANNEL_REQUESTOR_BRIDGE_PEER);
 
 		ast_channel_appl_set(c, "AppDial");
 		ast_channel_data_set(c, "(Outgoing Line)");
@@ -2517,7 +2517,7 @@
 
 		ast_channel_dialed(tc)->transit_network_select = ast_channel_dialed(chan)->transit_network_select;
 
-		ast_channel_request_accountcodes(tc, chan, AST_CHANNEL_REQUESTOR_BRIDGE_PEER);
+		ast_channel_req_accountcodes(tc, chan, AST_CHANNEL_REQUESTOR_BRIDGE_PEER);
 		if (ast_strlen_zero(ast_channel_musicclass(tc))) {
 			ast_channel_musicclass_set(tc, ast_channel_musicclass(chan));
 		}

Modified: team/rmudgett/cel_accountcode/apps/app_followme.c
URL: http://svnview.digium.com/svn/asterisk/team/rmudgett/cel_accountcode/apps/app_followme.c?view=diff&rev=418214&r1=418213&r2=418214
==============================================================================
--- team/rmudgett/cel_accountcode/apps/app_followme.c (original)
+++ team/rmudgett/cel_accountcode/apps/app_followme.c Tue Jul  8 18:03:43 2014
@@ -1070,7 +1070,7 @@
 			ast_channel_inherit_variables(caller, outbound);
 			ast_channel_datastore_inherit(caller, outbound);
 			ast_channel_language_set(outbound, ast_channel_language(caller));
-			ast_channel_request_accountcodes(outbound, caller, AST_CHANNEL_REQUESTOR_BRIDGE_PEER);
+			ast_channel_req_accountcodes(outbound, caller, AST_CHANNEL_REQUESTOR_BRIDGE_PEER);
 			ast_channel_musicclass_set(outbound, ast_channel_musicclass(caller));
 			ast_channel_unlock(outbound);
 			ast_channel_unlock(caller);

Modified: team/rmudgett/cel_accountcode/apps/app_queue.c
URL: http://svnview.digium.com/svn/asterisk/team/rmudgett/cel_accountcode/apps/app_queue.c?view=diff&rev=418214&r1=418213&r2=418214
==============================================================================
--- team/rmudgett/cel_accountcode/apps/app_queue.c (original)
+++ team/rmudgett/cel_accountcode/apps/app_queue.c Tue Jul  8 18:03:43 2014
@@ -4125,7 +4125,8 @@
 
 	ast_channel_lock_both(tmp->chan, qe->chan);
 
-	ast_channel_request_accountcodes(tmp->chan, qe->chan, AST_CHANNEL_REQUESTOR_BRIDGE_PEER);
+	ast_channel_req_accountcodes_precious(tmp->chan, qe->chan,
+		AST_CHANNEL_REQUESTOR_BRIDGE_PEER);
 	if (qe->cancel_answered_elsewhere) {
 		ast_channel_hangupcause_set(tmp->chan, AST_CAUSE_ANSWERED_ELSEWHERE);
 	}
@@ -4664,7 +4665,7 @@
 							ast_party_connected_line_copy(&o->connected, ast_channel_connected(in));
 						}
 
-						ast_channel_request_accountcodes(o->chan, in, AST_CHANNEL_REQUESTOR_BRIDGE_PEER);
+						ast_channel_req_accountcodes(o->chan, in, AST_CHANNEL_REQUESTOR_BRIDGE_PEER);
 
 						if (!ast_channel_redirecting(o->chan)->from.number.valid
 							|| ast_strlen_zero(ast_channel_redirecting(o->chan)->from.number.str)) {

Modified: team/rmudgett/cel_accountcode/include/asterisk/channel.h
URL: http://svnview.digium.com/svn/asterisk/team/rmudgett/cel_accountcode/include/asterisk/channel.h?view=diff&rev=418214&r1=418213&r2=418214
==============================================================================
--- team/rmudgett/cel_accountcode/include/asterisk/channel.h (original)
+++ team/rmudgett/cel_accountcode/include/asterisk/channel.h Tue Jul  8 18:03:43 2014
@@ -1398,9 +1398,27 @@
  *
  * \pre The chan and requestor channels are already locked.
  *
- * \return Nothing
- */
-void ast_channel_request_accountcodes(struct ast_channel *chan, const struct ast_channel *requestor, enum ast_channel_requestor_relationship relationship);
+ * \note Pre-existing accountcodes on chan will be overwritten.
+ *
+ * \return Nothing
+ */
+void ast_channel_req_accountcodes(struct ast_channel *chan, const struct ast_channel *requestor, enum ast_channel_requestor_relationship relationship);
+
+/*!
+ * \brief Setup new channel accountcodes from the requestor channel after ast_request().
+ * \since 12.5.0
+ *
+ * \param chan New channel to get accountcodes setup.
+ * \param requestor Requesting channel to get accountcodes from.
+ * \param relationship What the new channel was created for.
+ *
+ * \pre The chan and requestor channels are already locked.
+ *
+ * \note Pre-existing accountcodes on chan will not be overwritten.
+ *
+ * \return Nothing
+ */
+void ast_channel_req_accountcodes_precious(struct ast_channel *chan, const struct ast_channel *requestor, enum ast_channel_requestor_relationship relationship);
 
 /*!
  * \brief Request a channel of a given type, with data as optional information used

Modified: team/rmudgett/cel_accountcode/main/bridge.c
URL: http://svnview.digium.com/svn/asterisk/team/rmudgett/cel_accountcode/main/bridge.c?view=diff&rev=418214&r1=418213&r2=418214
==============================================================================
--- team/rmudgett/cel_accountcode/main/bridge.c (original)
+++ team/rmudgett/cel_accountcode/main/bridge.c Tue Jul  8 18:03:43 2014
@@ -3732,7 +3732,7 @@
 	}
 
 	ast_channel_lock_both(local, transferer);
-	ast_channel_request_accountcodes(local, transferer, AST_CHANNEL_REQUESTOR_REPLACEMENT);
+	ast_channel_req_accountcodes(local, transferer, AST_CHANNEL_REQUESTOR_REPLACEMENT);
 	pbx_builtin_setvar_helper(local, BLINDTRANSFER, ast_channel_name(transferer));
 	ast_channel_unlock(local);
 	ast_channel_unlock(transferer);
@@ -3899,7 +3899,7 @@
 	}
 
 	ast_channel_lock_both(local_chan, chan1);
-	ast_channel_request_accountcodes(local_chan, chan1, AST_CHANNEL_REQUESTOR_REPLACEMENT);
+	ast_channel_req_accountcodes(local_chan, chan1, AST_CHANNEL_REQUESTOR_REPLACEMENT);
 	pbx_builtin_setvar_helper(local_chan, ATTENDEDTRANSFER, ast_channel_name(chan1));
 	ast_channel_unlock(local_chan);
 	ast_channel_unlock(chan1);

Modified: team/rmudgett/cel_accountcode/main/bridge_basic.c
URL: http://svnview.digium.com/svn/asterisk/team/rmudgett/cel_accountcode/main/bridge_basic.c?view=diff&rev=418214&r1=418213&r2=418214
==============================================================================
--- team/rmudgett/cel_accountcode/main/bridge_basic.c (original)
+++ team/rmudgett/cel_accountcode/main/bridge_basic.c Tue Jul  8 18:03:43 2014
@@ -2984,7 +2984,7 @@
 
 	ast_channel_lock_both(chan, caller);
 
-	ast_channel_request_accountcodes(chan, caller, AST_CHANNEL_REQUESTOR_BRIDGE_PEER);
+	ast_channel_req_accountcodes(chan, caller, AST_CHANNEL_REQUESTOR_BRIDGE_PEER);
 
 	/* Who is transferring the call. */
 	pbx_builtin_setvar_helper(chan, "TRANSFERERNAME", ast_channel_name(caller));

Modified: team/rmudgett/cel_accountcode/main/channel.c
URL: http://svnview.digium.com/svn/asterisk/team/rmudgett/cel_accountcode/main/channel.c?view=diff&rev=418214&r1=418213&r2=418214
==============================================================================
--- team/rmudgett/cel_accountcode/main/channel.c (original)
+++ team/rmudgett/cel_accountcode/main/channel.c Tue Jul  8 18:03:43 2014
@@ -5651,7 +5651,7 @@
 	ast_channel_lock_both(orig, new_chan);
 	ast_party_connected_line_copy(ast_channel_connected(new_chan), ast_channel_connected(orig));
 	ast_party_redirecting_copy(ast_channel_redirecting(new_chan), ast_channel_redirecting(orig));
-	ast_channel_request_accountcodes(new_chan, orig, AST_CHANNEL_REQUESTOR_REPLACEMENT);
+	ast_channel_req_accountcodes(new_chan, orig, AST_CHANNEL_REQUESTOR_REPLACEMENT);
 	ast_channel_unlock(new_chan);
 	ast_channel_unlock(orig);
 
@@ -5749,7 +5749,7 @@
 	ast_channel_set_connected_line(chan, &connected, NULL);
 	if (requestor) {
 		ast_channel_lock_both(chan, (struct ast_channel *) requestor);
-		ast_channel_request_accountcodes(chan, requestor, AST_CHANNEL_REQUESTOR_BRIDGE_PEER);
+		ast_channel_req_accountcodes(chan, requestor, AST_CHANNEL_REQUESTOR_BRIDGE_PEER);
 		ast_channel_unlock(chan);
 		ast_channel_unlock((struct ast_channel *) requestor);
 	}
@@ -6009,7 +6009,21 @@
 	return NULL;
 }
 
-void ast_channel_request_accountcodes(struct ast_channel *chan, const struct ast_channel *requestor, enum ast_channel_requestor_relationship relationship)
+/*!
+ * \internal
+ * \brief Setup new channel accountcodes from the requestor channel after ast_request().
+ * \since 12.5.0
+ *
+ * \param chan New channel to get accountcodes setup.
+ * \param requestor Requesting channel to get accountcodes from.
+ * \param relationship What the new channel was created for.
+ * \param precious TRUE if pre-existing accountcodes on chan will not be overwritten.
+ *
+ * \pre The chan and requestor channels are already locked.
+ *
+ * \return Nothing
+ */
+static void channel_req_accountcodes(struct ast_channel *chan, const struct ast_channel *requestor, enum ast_channel_requestor_relationship relationship, int precious)
 {
 	/*
 	 * The primary reason for the existence of this function is
@@ -6024,19 +6038,26 @@
 	switch (relationship) {
 	case AST_CHANNEL_REQUESTOR_BRIDGE_PEER:
 		/* Crossover the requestor's accountcode and peeraccount */
-		if (!ast_strlen_zero(ast_channel_peeraccount(requestor))) {
+		if (!precious || ast_strlen_zero(ast_channel_accountcode(chan))) {
 			/*
-			 * Set it to the requestor's peeraccount.  This allows the
-			 * dialplan to indicate the accountcode to use when dialing
-			 * by setting CHANNEL(peeraccount).
+			 * The newly created channel does not have an accountcode
+			 * or we don't care.
 			 */
-			ast_channel_accountcode_set(chan, ast_channel_peeraccount(requestor));
-		} else if (!ast_strlen_zero(ast_channel_accountcode(requestor))) {
-			/*
-			 * Fallback to the historic propagation and set it to the
-			 * requestor's accountcode.
-			 */
-			ast_channel_accountcode_set(chan, ast_channel_accountcode(requestor));
+			if (!ast_strlen_zero(ast_channel_peeraccount(requestor))) {
+				/*
+				 * Set it to the requestor's peeraccount.  This allows the
+				 * dialplan to indicate the accountcode to use when dialing
+				 * by setting CHANNEL(peeraccount).
+				 */
+				ast_channel_accountcode_set(chan, ast_channel_peeraccount(requestor));
+			} else if (!precious
+				&& !ast_strlen_zero(ast_channel_accountcode(requestor))) {
+				/*
+				 * Fallback to the historic propagation and set it to the
+				 * requestor's accountcode.
+				 */
+				ast_channel_accountcode_set(chan, ast_channel_accountcode(requestor));
+			}
 		}
 		if (!ast_strlen_zero(ast_channel_accountcode(requestor))) {
 			ast_channel_peeraccount_set(chan, ast_channel_accountcode(requestor));
@@ -6044,14 +6065,30 @@
 		break;
 	case AST_CHANNEL_REQUESTOR_REPLACEMENT:
 		/* Pass the requestor's accountcode and peeraccount straight. */
-		if (!ast_strlen_zero(ast_channel_accountcode(requestor))) {
-			ast_channel_accountcode_set(chan, ast_channel_accountcode(requestor));
+		if (!precious || ast_strlen_zero(ast_channel_accountcode(chan))) {
+			/*
+			 * The newly created channel does not have an accountcode
+			 * or we don't care.
+			 */
+			if (!ast_strlen_zero(ast_channel_accountcode(requestor))) {
+				ast_channel_accountcode_set(chan, ast_channel_accountcode(requestor));
+			}
 		}
 		if (!ast_strlen_zero(ast_channel_peeraccount(requestor))) {
 			ast_channel_peeraccount_set(chan, ast_channel_peeraccount(requestor));
 		}
 		break;
 	}
+}
+
+void ast_channel_req_accountcodes(struct ast_channel *chan, const struct ast_channel *requestor, enum ast_channel_requestor_relationship relationship)
+{
+	channel_req_accountcodes(chan, requestor, relationship, 0);
+}
+
+void ast_channel_req_accountcodes_precious(struct ast_channel *chan, const struct ast_channel *requestor, enum ast_channel_requestor_relationship relationship)
+{
+	channel_req_accountcodes(chan, requestor, relationship, 1);
 }
 
 int ast_pre_call(struct ast_channel *chan, const char *sub_args)

Modified: team/rmudgett/cel_accountcode/main/dial.c
URL: http://svnview.digium.com/svn/asterisk/team/rmudgett/cel_accountcode/main/dial.c?view=diff&rev=418214&r1=418213&r2=418214
==============================================================================
--- team/rmudgett/cel_accountcode/main/dial.c (original)
+++ team/rmudgett/cel_accountcode/main/dial.c Tue Jul  8 18:03:43 2014
@@ -327,7 +327,7 @@
 		ast_connected_line_copy_from_caller(ast_channel_connected(channel->owner), ast_channel_caller(chan));
 
 		ast_channel_language_set(channel->owner, ast_channel_language(chan));
-		ast_channel_request_accountcodes(channel->owner, chan, AST_CHANNEL_REQUESTOR_BRIDGE_PEER);
+		ast_channel_req_accountcodes(channel->owner, chan, AST_CHANNEL_REQUESTOR_BRIDGE_PEER);
 		if (ast_strlen_zero(ast_channel_musicclass(channel->owner)))
 			ast_channel_musicclass_set(channel->owner, ast_channel_musicclass(chan));
 

Modified: team/rmudgett/cel_accountcode/res/parking/parking_bridge_features.c
URL: http://svnview.digium.com/svn/asterisk/team/rmudgett/cel_accountcode/res/parking/parking_bridge_features.c?view=diff&rev=418214&r1=418213&r2=418214
==============================================================================
--- team/rmudgett/cel_accountcode/res/parking/parking_bridge_features.c (original)
+++ team/rmudgett/cel_accountcode/res/parking/parking_bridge_features.c Tue Jul  8 18:03:43 2014
@@ -235,7 +235,7 @@
 
 	/* Before we actually dial out let's inherit appropriate information. */
 	ast_channel_lock_both(parker, parkee);
-	ast_channel_request_accountcodes(parkee, parker, AST_CHANNEL_REQUESTOR_REPLACEMENT);
+	ast_channel_req_accountcodes(parkee, parker, AST_CHANNEL_REQUESTOR_REPLACEMENT);
 	ast_connected_line_copy_from_caller(ast_channel_connected(parkee), ast_channel_caller(parker));
 	ast_channel_inherit_variables(parker, parkee);
 	ast_channel_datastore_inherit(parker, parkee);




More information about the svn-commits mailing list