diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 904d957f00..3453c4e464 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -760,7 +760,7 @@ static switch_status_t sofia_send_dtmf(switch_core_session_t *session, const swi return switch_rtp_queue_rfc2833(tech_pvt->rtp_session, dtmf); case DTMF_INFO: - snprintf(message, sizeof(message), "Signal=%c\r\nDuration=%d\r\n", dtmf->digit, dtmf->duration); + snprintf(message, sizeof(message), "Signal=%c\r\nDuration=%d\r\n", dtmf->digit, dtmf->duration / 8); nua_info(tech_pvt->nh, //NUTAG_WITH_THIS(tech_pvt->profile->nua), SIPTAG_CONTENT_TYPE_STR("application/dtmf-relay"), diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index c77ebe4920..cdbc96ee29 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -2097,7 +2097,7 @@ void sofia_handle_sip_i_info(nua_t *nua, sofia_profile_t *profile, nua_handle_t if (sip && sip->sip_content_type && sip->sip_content_type->c_type && sip->sip_content_type->c_subtype && sip->sip_payload && sip->sip_payload->pl_data) { - if (!strcasecmp(sip->sip_content_type->c_type, "dtmf") && !strcasecmp(sip->sip_content_type->c_subtype, "relay")) { + if (!strncasecmp(sip->sip_content_type->c_type, "application", 11) && !strcasecmp(sip->sip_content_type->c_subtype, "dtmf-relay")) { /* Try and find signal information in the payload */ if ((signal_ptr = switch_stristr("Signal=", sip->sip_payload->pl_data))) { /* move signal_ptr where we need it (right past Signal=) */ @@ -2110,13 +2110,13 @@ void sofia_handle_sip_i_info(nua_t *nua, sofia_profile_t *profile, nua_handle_t if ((signal_ptr = switch_stristr("Duration=", sip->sip_payload->pl_data))) { int tmp; - signal_ptr += 8; - if ((tmp = atoi(signal_ptr)) < 0) { + signal_ptr += 9; + if ((tmp = atoi(signal_ptr)) <= 0) { tmp = SWITCH_DEFAULT_DTMF_DURATION; } - dtmf.duration = tmp; + dtmf.duration = tmp * 8; } - } else if (!strcasecmp(sip->sip_content_type->c_type, "application") && !strcasecmp(sip->sip_content_type->c_subtype, "dtmf")) { + } else if (!strncasecmp(sip->sip_content_type->c_type, "application", 11) && !strcasecmp(sip->sip_content_type->c_subtype, "dtmf")) { dtmf.digit = *sip->sip_payload->pl_data; } else { goto fail;