[Asterisk-Users] INFO method and DTMF translation

Nguyen Hoang Lan
Sun, 12 Oct 2003 00:38:46 -0000

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.
--
Best regards,
 Nguyen                          mailto:dtkhang@hn.vnn.vn