summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2011-12-06 23:58:44 +0000
committerRichard Mudgett <rmudgett@digium.com>2011-12-06 23:58:44 +0000
commit7e634c21f80f88ed6b7b57451a6aef4cb2293d05 (patch)
treefa6a4a9d421f639ef1a12cdb57b8bfa85fbc9c30 /channels
parent9b33408ba137aa4f9d988d02073d71e1d8b4ff94 (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.c30
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);