]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 62218 via svnmerge from
authorRussell Bryant <russell@russellbryant.com>
Fri, 27 Apr 2007 21:11:46 +0000 (21:11 +0000)
committerRussell Bryant <russell@russellbryant.com>
Fri, 27 Apr 2007 21:11:46 +0000 (21:11 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r62218 | russell | 2007-04-27 16:10:51 -0500 (Fri, 27 Apr 2007) | 11 lines

Fix a weird problem where when a caller talking to someone sitting behind an
agent channel sent a digit, the digit would be played to the agent for forever.
This is because chan_agent always returned -1 from its send_digit_begin and _end
callbacks.  This non-zero return value indicates to the Asterisk core that it
would like an inband DTMF generator put on the channel.  However, this is the
wrong thing to do.  It should *always* return 0, instead.  When the digit begin
and end functions are called on the proxied channel, the underlying channel
will indicate whether inband DTMF is needed or not, and the generator will be
put on that one, and not the Agent channel.
(issue #9615, #9616, reported by jiddings and BigJimmy, and fixed by me)

........

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@62219 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_agent.c

index 50b3666d98b4045b5bb0394a797fdf26349717fd..928559bbd80d6c80bdcb3c6a99358959f06f2cad 100644 (file)
@@ -604,21 +604,19 @@ static int agent_indicate(struct ast_channel *ast, int condition, const void *da
 static int agent_digit_begin(struct ast_channel *ast, char digit)
 {
        struct agent_pvt *p = ast->tech_pvt;
-       int res = -1;
        ast_mutex_lock(&p->lock);
        ast_senddigit_begin(p->chan, digit);
        ast_mutex_unlock(&p->lock);
-       return res;
+       return 0;
 }
 
 static int agent_digit_end(struct ast_channel *ast, char digit, unsigned int duration)
 {
        struct agent_pvt *p = ast->tech_pvt;
-       int res = -1;
        ast_mutex_lock(&p->lock);
        ast_senddigit_end(p->chan, digit, duration);
        ast_mutex_unlock(&p->lock);
-       return res;
+       return 0;
 }
 
 static int agent_call(struct ast_channel *ast, char *dest, int timeout)