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


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10@347293 65c4cc65-6c06-0410-ace0-fbb531ad65f3
10-digiumphones
Richard Mudgett 14 years ago
parent 0e2b51ac20
commit 411fc37ea7

@ -10902,14 +10902,20 @@ static int add_digit(struct sip_request *req, char digit, unsigned int duration,
int event; int event;
if (mode) { if (mode) {
/* Application/dtmf short version used by some implementations */ /* Application/dtmf short version used by some implementations */
if (digit == '*') if ('0' <= digit && digit <= '9') {
event = digit - '0';
} else if (digit == '*') {
event = 10; event = 10;
else if (digit == '#') } else if (digit == '#') {
event = 11; event = 11;
else if ((digit >= 'A') && (digit <= 'D')) } else if ('A' <= digit && digit <= 'D') {
event = 12 + digit - 'A'; event = 12 + digit - 'A';
else } else if ('a' <= digit && digit <= 'd') {
event = atoi(&digit); event = 12 + digit - 'a';
} else {
/* Unknown digit */
event = 0;
}
snprintf(tmp, sizeof(tmp), "%d\r\n", event); snprintf(tmp, sizeof(tmp), "%d\r\n", event);
add_header(req, "Content-Type", "application/dtmf"); add_header(req, "Content-Type", "application/dtmf");
add_content(req, tmp); add_content(req, tmp);
@ -19035,16 +19041,21 @@ static void handle_request_info(struct sip_pvt *p, struct sip_request *req)
return; return;
} }
if (buf[0] == '*') { if ('0' <= buf[0] && buf[0] <= '9') {
event = buf[0] - '0';
} else if (buf[0] == '*') {
event = 10; event = 10;
} else if (buf[0] == '#') { } else if (buf[0] == '#') {
event = 11; event = 11;
} else if ((buf[0] >= 'A') && (buf[0] <= 'D')) { } else if ('A' <= buf[0] && buf[0] <= 'D') {
event = 12 + buf[0] - 'A'; event = 12 + buf[0] - 'A';
} else if ('a' <= buf[0] && buf[0] <= 'd') {
event = 12 + buf[0] - 'a';
} else if (buf[0] == '!') { } else if (buf[0] == '!') {
event = 16; event = 16;
} else { } else {
event = atoi(buf); /* Unknown digit */
event = 0;
} }
if (event == 16) { if (event == 16) {
/* send a FLASH event */ /* send a FLASH event */
@ -19109,6 +19120,9 @@ static void handle_request_info(struct sip_pvt *p, struct sip_request *req)
f.subclass.integer = '#'; f.subclass.integer = '#';
} else if (event < 16) { } else if (event < 16) {
f.subclass.integer = 'A' + (event - 12); f.subclass.integer = 'A' + (event - 12);
} else {
/* Unknown digit. */
f.subclass.integer = '0';
} }
f.len = duration; f.len = duration;
ast_queue_frame(p->owner, &f); ast_queue_frame(p->owner, &f);

Loading…
Cancel
Save