<!-- <param name="shutdown-on-fail" value="true"/> -->
<param name="sip-trace" value="no"/>
+
+ <!-- Don't be picky about negotiated DTMF just always offer 2833 and accept both 2833 and INFO -->
+ <!--<param name="liberal-dtmf" value="true"/>-->
+
+
<!--
Sometimes, in extremely rare edge cases, the Sofia SIP stack may stop
responding. These options allow you to enable and control a watchdog
PFLAG_RENEG_ON_HOLD,
PFLAG_RENEG_ON_REINVITE,
PFLAG_RTP_NOTIMER_DURING_BRIDGE,
+ PFLAG_LIBERAL_DTMF,
/* No new flags below this line */
PFLAG_MAX
} PFLAGS;
TFLAG_JB_PAUSED,
TFLAG_3PCC_INVITE,
TFLAG_NOREPLY,
+ TFLAG_LIBERAL_DTMF,
/* No new flags below this line */
TFLAG_MAX
} TFLAGS;
} else {
sofia_clear_pflag(profile, PFLAG_LOG_AUTH_FAIL);
}
+ } else if (!strcasecmp(var, "liberal-dtmf")) {
+ if (switch_true(val)) {
+ sofia_set_pflag(profile, PFLAG_LIBERAL_DTMF);
+ } else {
+ sofia_clear_pflag(profile, PFLAG_LIBERAL_DTMF);
+ }
} else if (!strcasecmp(var, "forward-unsolicited-mwi-notify")) {
if (switch_true(val)) {
sofia_set_pflag(profile, PFLAG_FORWARD_MWI_NOTIFY);
} else {
sofia_clear_pflag(profile, PFLAG_LOG_AUTH_FAIL);
}
+ } else if (!strcasecmp(var, "liberal-dtmf")) {
+ if (switch_true(val)) {
+ sofia_set_pflag(profile, PFLAG_LIBERAL_DTMF);
+ } else {
+ sofia_clear_pflag(profile, PFLAG_LIBERAL_DTMF);
+ }
} else if (!strcasecmp(var, "watchdog-enabled")) {
profile->watchdog_enabled = switch_true(val);
} else if (!strcasecmp(var, "watchdog-step-timeout")) {
goto end;
}
- if (dtmf.digit && tech_pvt->dtmf_type == DTMF_INFO) {
+ if (dtmf.digit && (tech_pvt->dtmf_type == DTMF_INFO ||
+ sofia_test_pflag(tech_pvt->profile, PFLAG_LIBERAL_DTMF) || sofia_test_flag(tech_pvt, TFLAG_LIBERAL_DTMF))) {
/* queue it up */
switch_channel_queue_dtmf(channel, &dtmf);
}
- if (tech_pvt->dtmf_type == DTMF_2833 && tech_pvt->te > 95) {
+ if ((tech_pvt->dtmf_type == DTMF_2833 || sofia_test_pflag(tech_pvt->profile, PFLAG_LIBERAL_DTMF) || sofia_test_flag(tech_pvt, TFLAG_LIBERAL_DTMF))
+ && tech_pvt->te > 95) {
switch_snprintf(buf + strlen(buf), buflen - strlen(buf), "a=rtpmap:%d telephone-event/8000\na=fmtp:%d 0-16\n", tech_pvt->te, tech_pvt->te);
}
}
- if (tech_pvt->dtmf_type == DTMF_2833 && tech_pvt->te > 95) {
+ if ((tech_pvt->dtmf_type == DTMF_2833 || sofia_test_pflag(tech_pvt->profile, PFLAG_LIBERAL_DTMF) || sofia_test_flag(tech_pvt, TFLAG_LIBERAL_DTMF))
+ && tech_pvt->te > 95) {
switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=rtpmap:%d telephone-event/8000\na=fmtp:%d 0-16\n", tech_pvt->te, tech_pvt->te);
}
if (!sofia_test_pflag(tech_pvt->profile, PFLAG_SUPPRESS_CNG) && tech_pvt->cng_pt && use_cng) {
sofia_set_flag_locked(tech_pvt, TFLAG_SECURE);
}
+ if ((var = switch_channel_get_variable(tech_pvt->channel, "sip_liberal_dtmf")) && switch_true(var)) {
+ sofia_set_flag_locked(tech_pvt, TFLAG_LIBERAL_DTMF);
+ }
+
if (switch_channel_test_flag(tech_pvt->channel, CF_PROXY_MODE)) {
status = SWITCH_STATUS_SUCCESS;
goto end;