Merged revisions 169510 via svnmerge from

https://origsvn.digium.com/svn/asterisk/trunk

........
  r169510 | twilson | 2009-01-20 13:22:24 -0600 (Tue, 20 Jan 2009) | 7 lines
  
  Make a proper builtin attended transfer to parking work
  
  This is an ugly hack from 1.4 that allows the timeout callback from a parked
  call to use the right channel name for the callback when the park is done with
  a builtin attended transfer (that isn't completed early).  This hasn't ever
  worked in trunk and no one has complained yet, so eh.
........


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.1@169554 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Terry Wilson
2009-01-20 19:31:56 +00:00
parent 18c4a532b4
commit 44f7d9e631

View File

@@ -580,8 +580,30 @@ static int ast_park_call_full(struct ast_channel *chan, struct ast_channel *peer
if (args->extout)
*(args->extout) = x;
if (peer)
ast_copy_string(pu->peername, S_OR(args->orig_chan_name, peer->name), sizeof(pu->peername));
if (peer) {
/* This is so ugly that it hurts, but implementing get_base_channel() on local channels
could have ugly side effects. We could have transferer<->local,1<->local,2<->parking
and we need the callback name to be that of transferer. Since local,1/2 have the same
name we can be tricky and just grab the bridged channel from the other side of the local
*/
if (!strcasecmp(peer->tech->type, "Local")) {
struct ast_channel *tmpchan, *base_peer;
char other_side[AST_CHANNEL_NAME];
char *c;
ast_copy_string(other_side, S_OR(args->orig_chan_name, peer->name), sizeof(other_side));
if ((c = strrchr(other_side, ';'))) {
*++c = '1';
}
if ((tmpchan = ast_get_channel_by_name_locked(other_side))) {
if ((base_peer = ast_bridged_channel(tmpchan))) {
ast_copy_string(pu->peername, base_peer->name, sizeof(pu->peername));
}
ast_channel_unlock(tmpchan);
}
} else {
ast_copy_string(pu->peername, S_OR(args->orig_chan_name, peer->name), sizeof(pu->peername));
}
}
/* Remember what had been dialed, so that if the parking
expires, we try to come back to the same place */