[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