diff options
author | Richard Mudgett <rmudgett@digium.com> | 2011-12-06 23:58:44 +0000 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2011-12-06 23:58:44 +0000 |
commit | 7e634c21f80f88ed6b7b57451a6aef4cb2293d05 (patch) | |
tree | fa6a4a9d421f639ef1a12cdb57b8bfa85fbc9c30 /channels | |
parent | 9b33408ba137aa4f9d988d02073d71e1d8b4ff94 (diff) |
Make SIP INFO messages for dtmf-relay signals case insensitive.
(closes issue ASTERISK-18924)
Reported by: Kevin Taylor
........
Merged revisions 347292 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 347293 from http://svn.asterisk.org/svn/asterisk/branches/10
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@347294 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_sip.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index a7713009e..3bbe11a67 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -10918,14 +10918,20 @@ static int add_digit(struct sip_request *req, char digit, unsigned int duration, int event; if (mode) { /* Application/dtmf short version used by some implementations */ - if (digit == '*') + if ('0' <= digit && digit <= '9') { + event = digit - '0'; + } else if (digit == '*') { event = 10; - else if (digit == '#') + } else if (digit == '#') { event = 11; - else if ((digit >= 'A') && (digit <= 'D')) + } else if ('A' <= digit && digit <= 'D') { event = 12 + digit - 'A'; - else - event = atoi(&digit); + } else if ('a' <= digit && digit <= 'd') { + event = 12 + digit - 'a'; + } else { + /* Unknown digit */ + event = 0; + } snprintf(tmp, sizeof(tmp), "%d\r\n", event); add_header(req, "Content-Type", "application/dtmf"); add_content(req, tmp); @@ -19066,16 +19072,21 @@ static void handle_request_info(struct sip_pvt *p, struct sip_request *req) return; } - if (buf[0] == '*') { + if ('0' <= buf[0] && buf[0] <= '9') { + event = buf[0] - '0'; + } else if (buf[0] == '*') { event = 10; } else if (buf[0] == '#') { event = 11; - } else if ((buf[0] >= 'A') && (buf[0] <= 'D')) { + } else if ('A' <= buf[0] && buf[0] <= 'D') { event = 12 + buf[0] - 'A'; + } else if ('a' <= buf[0] && buf[0] <= 'd') { + event = 12 + buf[0] - 'a'; } else if (buf[0] == '!') { event = 16; } else { - event = atoi(buf); + /* Unknown digit */ + event = 0; } if (event == 16) { /* send a FLASH event */ @@ -19140,6 +19151,9 @@ static void handle_request_info(struct sip_pvt *p, struct sip_request *req) f.subclass.integer = '#'; } else if (event < 16) { f.subclass.integer = 'A' + (event - 12); + } else { + /* Unknown digit. */ + f.subclass.integer = '0'; } f.len = duration; ast_queue_frame(p->owner, &f); |