[asterisk-commits] rmudgett: branch rmudgett/cel_accountcode r416650 - in /team/rmudgett/cel_acc...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed Jun 18 14:56:53 CDT 2014


Author: rmudgett
Date: Wed Jun 18 14:56:45 2014
New Revision: 416650

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=416650
Log:
accountcode propagation: Change accountcode propagation some more.

* Changed accountcode propagation over local channels (core unreal
channels) to cross over the local bridge just like a normal bridge.

* Fixed a few places dealing with accountcodes that were reading from
channels without the lock held.

Found that the requestor channel to ast_request() is not necessarily a
bridge peer channel.  It could be the channel being replaced by the new
channel.  I also found that the accountcodes were not being propagated
before these accouncode changes for FollowMe and Queue when local channels
were involved.

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/core_unreal.c
    team/rmudgett/cel_accountcode/main/dial.c
    team/rmudgett/cel_accountcode/main/pbx.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=416650&r1=416649&r2=416650
==============================================================================
--- team/rmudgett/cel_accountcode/UPGRADE.txt (original)
+++ team/rmudgett/cel_accountcode/UPGRADE.txt Wed Jun 18 14:56:45 2014
@@ -23,20 +23,19 @@
 
 From 12.3.1 to 12.4.0:
 
- - The accountcode propagation changed from always using the calling
-   channel's CHANNEL(accountcode) value if present as the outgoing
-   channel's CHANNEL(accountcode) value to using the calling channel's
-   CHANNEL(peeraccount) or CHANNEL(accountcode) value if present to set an
-   empty outgoing channel's CHANNEL(accountcode) value.  In other words,
-   if a channel already has an accountcode it will not be changed unless
-   explicitly set by CHANNEL(accountcode) or an originate method that can
-   specify an accountcode value.  The change has two visible effects.  One,
-   if the channel driver is configured with an accountcode for new
-   channels then those channels will always have that accountcode unless
-   explicitly changed.  Two, the CHANNEL(peeraccount) value can be set
-   before Dial to set an empty accountcode on the outgoing channel.  The
-   FollowMe and Queue applications already propagated the
-   CHANNEL(peeraccount) to the outgoing channel this way.
+ - The accountcode propagation is now consistently propagated to outgoing
+   channels before dialing.  In addition, if a channel already has an
+   accountcode then it will not be changed unless explicitly set by
+   CHANNEL(accountcode) or an originate method that can specify an
+   accountcode value.  The change has four visible effects.  One, if the
+   channel driver is configured with an accountcode for new channels then
+   those channels will always have that accountcode unless explicitly
+   changed.  Two, local channels now cross accountcode and peeraccount
+   over the local bridge between the ;1 and ;2 channels just like channels
+   in normal bridges.  Three, FollowMe outgoing channels and Queue local
+   channel members now propagate accountcodes.  Four, the
+   CHANNEL(peeraccount) value can be set before Dial to set an empty
+   accountcode on the outgoing channel.
 
  - The safe_asterisk script was previously not installed on top of an existing
    version. This caused bug-fixes in that script not to be deployed. If your

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=416650&r1=416649&r2=416650
==============================================================================
--- team/rmudgett/cel_accountcode/apps/app_dial.c (original)
+++ team/rmudgett/cel_accountcode/apps/app_dial.c Wed Jun 18 14:56:45 2014
@@ -949,6 +949,8 @@
 		} else {
 			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_appl_set(c, "AppDial");
 		ast_channel_data_set(c, "(Outgoing Line)");
@@ -2515,6 +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);
 		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=416650&r1=416649&r2=416650
==============================================================================
--- team/rmudgett/cel_accountcode/apps/app_followme.c (original)
+++ team/rmudgett/cel_accountcode/apps/app_followme.c Wed Jun 18 14:56:45 2014
@@ -1070,6 +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_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=416650&r1=416649&r2=416650
==============================================================================
--- team/rmudgett/cel_accountcode/apps/app_queue.c (original)
+++ team/rmudgett/cel_accountcode/apps/app_queue.c Wed Jun 18 14:56:45 2014
@@ -4125,6 +4125,7 @@
 
 	ast_channel_lock_both(tmp->chan, qe->chan);
 
+	ast_channel_request_accountcodes(tmp->chan, qe->chan, AST_CHANNEL_REQUESTOR_BRIDGE_PEER);
 	if (qe->cancel_answered_elsewhere) {
 		ast_channel_hangupcause_set(tmp->chan, AST_CAUSE_ANSWERED_ELSEWHERE);
 	}
@@ -4662,6 +4663,8 @@
 							o->pending_connected_update = 0;
 							ast_party_connected_line_copy(&o->connected, ast_channel_connected(in));
 						}
+
+						ast_channel_request_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=416650&r1=416649&r2=416650
==============================================================================
--- team/rmudgett/cel_accountcode/include/asterisk/channel.h (original)
+++ team/rmudgett/cel_accountcode/include/asterisk/channel.h Wed Jun 18 14:56:45 2014
@@ -1380,6 +1380,27 @@
  * \retval non-NULL channel on success
  */
 struct ast_channel *ast_request(const char *type, struct ast_format_cap *request_cap, const struct ast_assigned_ids *assignedids, const struct ast_channel *requestor, const char *addr, int *cause);
+
+enum ast_channel_requestor_relationship {
+	/*! The requestor is the future bridge peer of the channel. */
+	AST_CHANNEL_REQUESTOR_BRIDGE_PEER,
+	/*! The requestor is to be replaced by the channel. */
+	AST_CHANNEL_REQUESTOR_REPLACEMENT,
+};
+
+/*!
+ * \brief Setup new channel accountcodes from the requestor channel after ast_request().
+ * \since 12.4.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.
+ *
+ * \return Nothing
+ */
+void ast_channel_request_accountcodes(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=416650&r1=416649&r2=416650
==============================================================================
--- team/rmudgett/cel_accountcode/main/bridge.c (original)
+++ team/rmudgett/cel_accountcode/main/bridge.c Wed Jun 18 14:56:45 2014
@@ -3731,7 +3731,11 @@
 		return AST_BRIDGE_TRANSFER_FAIL;
 	}
 
+	ast_channel_lock_both(local, transferer);
+	ast_channel_request_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);
 
 	if (new_channel_cb) {
 		new_channel_cb(local, user_data_wrapper, AST_BRIDGE_TRANSFER_MULTI_PARTY);
@@ -3890,12 +3894,15 @@
 
 	local_chan = ast_request("Local", ast_channel_nativeformats(chan1), NULL, chan1,
 			dest, &cause);
-
 	if (!local_chan) {
 		return AST_BRIDGE_TRANSFER_FAIL;
 	}
 
+	ast_channel_lock_both(local_chan, chan1);
+	ast_channel_request_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);
 
 	if (bridge2) {
 		res = ast_local_setup_bridge(local_chan, bridge2, chan2, NULL);

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=416650&r1=416649&r2=416650
==============================================================================
--- team/rmudgett/cel_accountcode/main/bridge_basic.c (original)
+++ team/rmudgett/cel_accountcode/main/bridge_basic.c Wed Jun 18 14:56:45 2014
@@ -2982,10 +2982,17 @@
 		return NULL;
 	}
 
+	ast_channel_lock_both(chan, caller);
+
+	ast_channel_request_accountcodes(chan, caller, AST_CHANNEL_REQUESTOR_BRIDGE_PEER);
+
 	/* Who is transferring the call. */
 	pbx_builtin_setvar_helper(chan, "TRANSFERERNAME", ast_channel_name(caller));
 
 	ast_bridge_set_transfer_variables(chan, ast_channel_name(caller), 1);
+
+	ast_channel_unlock(chan);
+	ast_channel_unlock(caller);
 
 	/* Before we actually dial out let's inherit appropriate information. */
 	copy_caller_data(chan, 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=416650&r1=416649&r2=416650
==============================================================================
--- team/rmudgett/cel_accountcode/main/channel.c (original)
+++ team/rmudgett/cel_accountcode/main/channel.c Wed Jun 18 14:56:45 2014
@@ -5637,7 +5637,10 @@
 		}
 		if (!ast_strlen_zero(oh->account)) {
 			ast_channel_lock(new_chan);
+			ast_channel_stage_snapshot(new_chan);
 			ast_channel_accountcode_set(new_chan, oh->account);
+			ast_channel_peeraccount_set(new_chan, oh->account);
+			ast_channel_stage_snapshot_done(new_chan);
 			ast_channel_unlock(new_chan);
 		}
 	} else if (caller) { /* no outgoing helper so use caller if available */
@@ -5648,6 +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_unlock(new_chan);
 	ast_channel_unlock(orig);
 
@@ -5712,7 +5716,10 @@
 		}
 		if (!ast_strlen_zero(oh->account)) {
 			ast_channel_lock(chan);
+			ast_channel_stage_snapshot(chan);
 			ast_channel_accountcode_set(chan, oh->account);
+			ast_channel_peeraccount_set(chan, oh->account);
+			ast_channel_stage_snapshot_done(chan);
 			ast_channel_unlock(chan);
 		}
 	}
@@ -5740,6 +5747,12 @@
 		connected.id.name.presentation = AST_PRES_ALLOWED_USER_NUMBER_NOT_SCREENED;
 	}
 	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_unlock(chan);
+		ast_channel_unlock((struct ast_channel *) requestor);
+	}
 
 	if (ast_call(chan, addr, 0)) {	/* ast_call failed... */
 		ast_log(LOG_NOTICE, "Unable to call channel %s/%s\n", type, addr);
@@ -5965,29 +5978,11 @@
 
 			ast_channel_lock_both(c, (struct ast_channel *) requestor);
 
-			/* Set newly created channel callid to the same as the requestor */
+			/* Set the newly created channel's callid to the same as the requestor. */
 			callid = ast_channel_callid(requestor);
 			if (callid) {
 				ast_channel_callid_set(c, callid);
 				callid = ast_callid_unref(callid);
-			}
-
-			if (ast_strlen_zero(ast_channel_accountcode(c))) {
-				/* The newly created channel does not have an accountcode. */
-				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(c, 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(c, ast_channel_accountcode(requestor));
-				}
 			}
 
 			ast_channel_unlock(c);
@@ -6012,6 +6007,52 @@
 	AST_RWLIST_UNLOCK(&backends);
 
 	return NULL;
+}
+
+void ast_channel_request_accountcodes(struct ast_channel *chan, const struct ast_channel *requestor, enum ast_channel_requestor_relationship relationship)
+{
+	/*
+	 * The primary reason for the existence of this function is
+	 * so local channels can propagate accountcodes to the ;2
+	 * channel before ast_call().
+	 */
+	switch (relationship) {
+	case AST_CHANNEL_REQUESTOR_BRIDGE_PEER:
+		/* Crossover the requestor's accountcode and peeraccount */
+		if (ast_strlen_zero(ast_channel_accountcode(chan))) {
+			/* The newly created channel does not have an accountcode. */
+			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 (!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(chan))
+			&& !ast_strlen_zero(ast_channel_accountcode(requestor))) {
+			ast_channel_peeraccount_set(chan, ast_channel_accountcode(requestor));
+		}
+		break;
+	case AST_CHANNEL_REQUESTOR_REPLACEMENT:
+		/* Pass the requestor's accountcode and peeraccount straight. */
+		if (ast_strlen_zero(ast_channel_accountcode(chan))
+			&& !ast_strlen_zero(ast_channel_accountcode(requestor))) {
+			ast_channel_accountcode_set(chan, ast_channel_accountcode(requestor));
+		}
+		if (ast_strlen_zero(ast_channel_peeraccount(chan))
+			&& !ast_strlen_zero(ast_channel_peeraccount(requestor))) {
+			ast_channel_peeraccount_set(chan, ast_channel_peeraccount(requestor));
+		}
+		break;
+	}
 }
 
 int ast_pre_call(struct ast_channel *chan, const char *sub_args)

Modified: team/rmudgett/cel_accountcode/main/core_unreal.c
URL: http://svnview.digium.com/svn/asterisk/team/rmudgett/cel_accountcode/main/core_unreal.c?view=diff&rev=416650&r1=416649&r2=416650
==============================================================================
--- team/rmudgett/cel_accountcode/main/core_unreal.c (original)
+++ team/rmudgett/cel_accountcode/main/core_unreal.c Wed Jun 18 14:56:45 2014
@@ -654,12 +654,16 @@
 
 	ast_party_dialed_copy(ast_channel_dialed(semi2), ast_channel_dialed(semi1));
 
+	/* Crossover the CallerID and conected-line to cross the local bridge. */
 	ast_connected_line_copy_to_caller(ast_channel_caller(semi2), ast_channel_connected(semi1));
 	ast_connected_line_copy_from_caller(ast_channel_connected(semi2), ast_channel_caller(semi1));
 
 	ast_channel_language_set(semi2, ast_channel_language(semi1));
-	ast_channel_accountcode_set(semi2, ast_channel_accountcode(semi1));
-	ast_channel_peeraccount_set(semi2, ast_channel_peeraccount(semi1));
+
+	/* Crossover the accountcode and peeraccount to cross the local bridge. */
+	ast_channel_accountcode_set(semi2, ast_channel_peeraccount(semi1));
+	ast_channel_peeraccount_set(semi2, ast_channel_accountcode(semi1));
+
 	ast_channel_musicclass_set(semi2, ast_channel_musicclass(semi1));
 
 	ast_channel_cc_params_init(semi2, ast_channel_get_cc_config_params(semi1));
@@ -902,8 +906,6 @@
 {
 	struct ast_channel *owner;
 	struct ast_channel *chan;
-	const char *accountcode = NULL;
-	const char *peeraccount = NULL;
 	struct ast_format fmt;
 	struct ast_assigned_ids id1 = {NULL, NULL};
 	struct ast_assigned_ids id2 = {NULL, NULL};
@@ -923,23 +925,6 @@
 		strcpy(uniqueid2, id1.uniqueid);/* Safe */
 		strcat(uniqueid2, ";2");/* Safe */
 		id2.uniqueid = uniqueid2;
-	}
-
-	if (requestor) {
-		ast_channel_lock((struct ast_channel *) requestor);
-		accountcode = ast_channel_accountcode(requestor);
-		if (!ast_strlen_zero(accountcode)) {
-			accountcode = ast_strdupa(accountcode);
-		} else {
-			accountcode = NULL;
-		}
-		peeraccount = ast_channel_peeraccount(requestor);
-		if (!ast_strlen_zero(peeraccount)) {
-			peeraccount = ast_strdupa(peeraccount);
-		} else {
-			peeraccount = NULL;
-		}
-		ast_channel_unlock((struct ast_channel *) requestor);
 	}
 
 	/*
@@ -949,7 +934,7 @@
 	 * You can't pass linkedid to both allocations since if linkedid
 	 * isn't set, then each channel will generate its own linkedid.
 	 */
-	owner = ast_channel_alloc(1, semi1_state, NULL, NULL, accountcode,
+	owner = ast_channel_alloc(1, semi1_state, NULL, NULL, NULL,
 		exten, context, &id1, requestor, 0,
 		"%s/%s-%08x;1", tech->type, p->name, (unsigned)generated_seqno);
 	if (!owner) {
@@ -966,10 +951,6 @@
 	ast_channel_tech_pvt_set(owner, p);
 
 	ast_format_cap_copy(ast_channel_nativeformats(owner), p->reqcap);
-
-	if (peeraccount) {
-		ast_channel_peeraccount_set(owner, peeraccount);
-	}
 
 	/* Determine our read/write format and set it on each channel */
 	ast_best_codec(p->reqcap, &fmt);
@@ -994,7 +975,7 @@
 	p->owner = owner;
 	ast_channel_unlock(owner);
 
-	chan = ast_channel_alloc(1, semi2_state, NULL, NULL, accountcode,
+	chan = ast_channel_alloc(1, semi2_state, NULL, NULL, NULL,
 		exten, context, &id2, owner, 0,
 		"%s/%s-%08x;2", tech->type, p->name, (unsigned)generated_seqno);
 	if (!chan) {

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=416650&r1=416649&r2=416650
==============================================================================
--- team/rmudgett/cel_accountcode/main/dial.c (original)
+++ team/rmudgett/cel_accountcode/main/dial.c Wed Jun 18 14:56:45 2014
@@ -301,7 +301,12 @@
 	cap_request = NULL;
 	cap_all_audio = ast_format_cap_destroy(cap_all_audio);
 
-	ast_channel_lock(channel->owner);
+	if (chan) {
+		ast_channel_lock_both(chan, channel->owner);
+	} else {
+		ast_channel_lock(channel->owner);
+	}
+
 	ast_channel_stage_snapshot(channel->owner);
 
 	ast_channel_appl_set(channel->owner, "AppDial2");
@@ -322,11 +327,13 @@
 		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);
 		if (ast_strlen_zero(ast_channel_musicclass(channel->owner)))
 			ast_channel_musicclass_set(channel->owner, ast_channel_musicclass(chan));
 
 		ast_channel_adsicpe_set(channel->owner, ast_channel_adsicpe(chan));
 		ast_channel_transfercapability_set(channel->owner, ast_channel_transfercapability(chan));
+		ast_channel_unlock(chan);
 	}
 
 	ast_channel_stage_snapshot_done(channel->owner);

Modified: team/rmudgett/cel_accountcode/main/pbx.c
URL: http://svnview.digium.com/svn/asterisk/team/rmudgett/cel_accountcode/main/pbx.c?view=diff&rev=416650&r1=416649&r2=416650
==============================================================================
--- team/rmudgett/cel_accountcode/main/pbx.c (original)
+++ team/rmudgett/cel_accountcode/main/pbx.c Wed Jun 18 14:56:45 2014
@@ -10324,7 +10324,10 @@
 		ast_set_variables(dialed, vars);
 	}
 	if (!ast_strlen_zero(account)) {
+		ast_channel_stage_snapshot(dialed);
 		ast_channel_accountcode_set(dialed, account);
+		ast_channel_peeraccount_set(dialed, account);
+		ast_channel_stage_snapshot_done(dialed);
 	}
 	ast_set_flag(ast_channel_flags(dialed), AST_FLAG_ORIGINATED);
 	ast_channel_unlock(dialed);

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=416650&r1=416649&r2=416650
==============================================================================
--- team/rmudgett/cel_accountcode/res/parking/parking_bridge_features.c (original)
+++ team/rmudgett/cel_accountcode/res/parking/parking_bridge_features.c Wed Jun 18 14:56:45 2014
@@ -235,6 +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_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 asterisk-commits mailing list