[Asterisk-Users] INFO method and DTMF translation

Brancaleoni Matteo mbrancaleoni at espia.it
Sun Oct 12 02:39:32 MST 2003


Hi.

The implementation is correct, I can use sip info
method to get all the DMTF, *,# included (eg voicemail
works great with sip info dtmf)

the line atoi(buf) is needed 'cause buf is a char, and
we need a int value to do the comparisons below that line.

and I don't see why they get set to 0 ... probably
'cause the INFO dtmf on your gw is broken.

sip info method describes dmtf as numbers (not chars) ,
so 0-9 are the digits, 10,11 are respectively *,#
and 12-16 are A,B,C,D

if you get translated to 0, I can assume that your gw
sends out # or * as char and not as numbers, as sip info
method requires.

matteo.

Il dom, 2003-10-12 alle 09:38, Nguyen Hoang Lan ha scritto:
> Hello guys,
> I have searched high and low, but not found any information about
> rules of using DTMF in SIP INFO method. Cisco has described something with
> Signal=, but it look like this feature is dependent on implementors?
> 
> The problem is chan_sip.c cannot correctly translate received DTMF
> digits, especially #,*. At least with my Antek EGW-804 gateway.
> 
> Looking into chan_sip.c, I found this code:
> 
> line 3982
> if (p->owner) {
>                 if (strlen(buf)) {
>                         if (sipdebug)
>                                 ast_verbose("DTMF received: '%c'\n", buf[0]);
>                         event = atoi(buf); << WHY?
>                         if (event < 10) {
>                                 resp = '0' + event;
>                         } else if (event < 11) {
>                                 resp = '*';
>                         } else if (event < 12) {
>                                 resp = '#';
>                         } else if (event < 16) {
>                                 resp = 'A' + (event - 12);
>                         }
>                         memset(&f, 0, sizeof(f));
>                         f.frametype = AST_FRAME_DTMF;
>                         f.subclass = resp;
>                         f.offset = 0;
>                         f.data = NULL;
>                         f.datalen = 0;
>                         ast_queue_frame(p->owner, &f, 0);
>                 }
> 
> On line 3986, any # or * digit I entered was translated to 0(zero). So
> any apps depends on # for terminating (voicemail for example) won't
> work.
> 
> My question is , why not take just buf[0]? why translate? my UA
> always send something like d= (one digit) at a time.
-- 
Brancaleoni Matteo <mbrancaleoni at espia.it>
Espia - Emmegi Srl




More information about the asterisk-users mailing list