[asterisk-commits] twilson: branch 1.4 r169485 - /branches/1.4/res/res_features.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue Jan 20 12:40:56 CST 2009
Author: twilson
Date: Tue Jan 20 12:40:56 2009
New Revision: 169485
URL: http://svn.digium.com/svn-view/asterisk?view=rev&rev=169485
Log:
Don't play audio to the channel if we've masqueraded
(closes issue #14066)
Reported by: bluefox
Tested by: otherwiseguy, bluefox
Modified:
branches/1.4/res/res_features.c
Modified: branches/1.4/res/res_features.c
URL: http://svn.digium.com/svn-view/asterisk/branches/1.4/res/res_features.c?view=diff&rev=169485&r1=169484&r2=169485
==============================================================================
--- branches/1.4/res/res_features.c (original)
+++ branches/1.4/res/res_features.c Tue Jan 20 12:40:56 2009
@@ -302,7 +302,7 @@
return AST_DEVICE_INUSE;
}
-static int park_call_full(struct ast_channel *chan, struct ast_channel *peer, int timeout, int *extout, char *orig_chan_name)
+static int park_call_full(struct ast_channel *chan, struct ast_channel *peer, int timeout, int *extout, const char *orig_chan_name)
{
struct parkeduser *pu, *cur;
int i, x = -1, parking_range, parkingnum_copy;
@@ -393,7 +393,7 @@
struct ast_channel *tmpchan, *base_peer;
char other_side[AST_CHANNEL_NAME];
char *c;
- ast_copy_string(other_side, peer->name, sizeof(other_side));
+ ast_copy_string(other_side, S_OR(orig_chan_name, peer->name), sizeof(other_side));
if ((c = strrchr(other_side, ','))) {
*++c = '1';
}
@@ -404,7 +404,7 @@
ast_channel_unlock(tmpchan);
}
} else {
- ast_copy_string(pu->peername, peer->name, sizeof(pu->peername));
+ ast_copy_string(pu->peername, S_OR(orig_chan_name, peer->name), sizeof(pu->peername));
}
}
@@ -484,11 +484,10 @@
return park_call_full(chan, peer, timeout, extout, NULL);
}
-static int masq_park_call(struct ast_channel *rchan, struct ast_channel *peer, int timeout, int *extout, int play_announcement)
+static int masq_park_call(struct ast_channel *rchan, struct ast_channel *peer, int timeout, int *extout, int play_announcement, const char *orig_chan_name)
{
struct ast_channel *chan;
struct ast_frame *f;
- char *orig_chan_name = NULL;
int park_status;
/* Make a new, fake channel that we'll use to masquerade in the real one */
@@ -514,7 +513,7 @@
peer = chan;
}
- if (!play_announcement) {
+ if (!play_announcement || !orig_chan_name) {
orig_chan_name = ast_strdupa(chan->name);
}
@@ -530,12 +529,12 @@
int ast_masq_park_call(struct ast_channel *rchan, struct ast_channel *peer, int timeout, int *extout)
{
- return masq_park_call(rchan, peer, timeout, extout, 0);
-}
-
-static int masq_park_call_announce(struct ast_channel *rchan, struct ast_channel *peer, int timeout, int *extout)
-{
- return masq_park_call(rchan, peer, timeout, extout, 1);
+ return masq_park_call(rchan, peer, timeout, extout, 0, NULL);
+}
+
+static int masq_park_call_announce(struct ast_channel *rchan, struct ast_channel *peer, int timeout, int *extout, const char *orig_chan_name)
+{
+ return masq_park_call(rchan, peer, timeout, extout, 1, orig_chan_name);
}
#define FEATURE_RETURN_HANGUP -1
#define FEATURE_RETURN_SUCCESSBREAK 0
@@ -587,7 +586,7 @@
res = ast_safe_sleep(chan, 1000);
if (!res) { /* one direction used to call park_call.... */
- masq_park_call_announce(parkee, parker, 0, NULL);
+ masq_park_call_announce(parkee, parker, 0, NULL, NULL);
res = 0; /* PBX should hangup zombie channel */
}
@@ -742,7 +741,7 @@
res = finishup(transferee);
if (res)
res = -1;
- else if (!masq_park_call_announce(transferee, transferer, 0, NULL)) { /* success */
+ else if (!masq_park_call_announce(transferee, transferer, 0, NULL, NULL)) { /* success */
/* We return non-zero, but tell the PBX not to hang the channel when
the thread dies -- We have to be careful now though. We are responsible for
hanging up the channel, else it will never be hung up! */
@@ -2065,6 +2064,7 @@
/* Cache the original channel name in case we get masqueraded in the middle
* of a park--it is still theoretically possible for a transfer to happen before
* we get here, but it is _really_ unlikely */
+ char *orig_chan_name = ast_strdupa(chan->name);
char orig_exten[AST_MAX_EXTENSION];
int orig_priority = chan->priority;
@@ -2089,7 +2089,7 @@
res = ast_safe_sleep(chan, 1000);
/* Park the call */
if (!res) {
- res = masq_park_call_announce(chan, chan, 0, NULL);
+ res = masq_park_call_announce(chan, chan, 0, NULL, orig_chan_name);
/* Continue on in the dialplan */
if (res == 1) {
ast_copy_string(chan->exten, orig_exten, sizeof(chan->exten));
More information about the asterisk-commits
mailing list