[Asterisk-Users] INFO method and DTMF translation

Brancaleoni Matteo
Sun, 12 Oct 2003 02:58:52 -0000

Just for integration, look here

http://lists.digium.com/pipermail/asterisk-users/2003-July/016464.html

basically sip info dtmf are:

    Event  encoding (decimal)
    _________________________
    0--9                0--9
    *                     10
    #                     11
    A--D              12--15
    Flash                 16

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@espia.it>
Espia - Emmegi Srl