mod_rayo: dtmf #*A-D was broken

This commit is contained in:
Chris Rienzo 2013-06-28 11:16:06 -04:00
parent ba6bf28a5e
commit 007ddda560
2 changed files with 36 additions and 1 deletions

View File

@ -3674,6 +3674,10 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_rayo_load)
"<![CDATA[<grammar mode=\"dtmf\"><rule id=\"digits\" scope=\"public\"><item repeat=\"4\"><one-of><item>0</item><item>1</item><item>2</item><item>3</item><item>4</item><item>5</item><item>6</item><item>7</item><item>8</item><item>9</item></one-of></item></rule></grammar>]]>" "<![CDATA[<grammar mode=\"dtmf\"><rule id=\"digits\" scope=\"public\"><item repeat=\"4\"><one-of><item>0</item><item>1</item><item>2</item><item>3</item><item>4</item><item>5</item><item>6</item><item>7</item><item>8</item><item>9</item></one-of></item></rule></grammar>]]>"
"</grammar></input>" "</grammar></input>"
"</prompt>"); "</prompt>");
rayo_add_cmd_alias("input", "<input xmlns=\""RAYO_INPUT_NS"\" mode=\"dtmf\" initial-timeout=\"5000\" inter-digit-timeout=\"3000\">"
"<grammar content-type=\"application/srgs+xml\">"
"<![CDATA[<grammar mode=\"dtmf\"><rule id=\"digits\" scope=\"public\"><item><one-of><item>0</item><item>1</item><item>2</item><item>3</item><item>4</item><item>5</item><item>6</item><item>7</item><item>8</item><item>9</item><item>*</item><item>#</item></one-of></item></rule></grammar>]]>"
"</grammar></input>");
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }

View File

@ -363,6 +363,37 @@ iks *nlsml_normalize(const char *result)
return result_xml; return result_xml;
} }
/**
* @return true if digit is a DTMF
*/
static int isdtmf(const char digit)
{
switch(digit) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '*':
case '#':
case 'a':
case 'A':
case 'b':
case 'B':
case 'c':
case 'C':
case 'd':
case 'D':
return 1;
}
return 0;
}
/** /**
* Construct an NLSML result for digit match * Construct an NLSML result for digit match
* @param digits the matching digits * @param digits the matching digits
@ -387,7 +418,7 @@ iks *nlsml_create_dtmf_match(const char *digits)
SWITCH_STANDARD_STREAM(stream); SWITCH_STANDARD_STREAM(stream);
for (i = 0; i < num_digits; i++) { for (i = 0; i < num_digits; i++) {
if (isdigit(digits[i])) { if (isdtmf(digits[i])) {
if (first) { if (first) {
stream.write_function(&stream, "%c", digits[i]); stream.write_function(&stream, "%c", digits[i]);
first = 0; first = 0;