mod_sofia: Resolved issue #1547 - SIP INFO not working
The dtmf_type member was incorrectly being set to NONE if the SDP does not advertise RFC2833 support (which has nothing to do with SIP INFO)
This commit is contained in:
parent
4c64d53efb
commit
339b26e83d
|
@ -1359,10 +1359,12 @@ static switch_status_t sofia_send_dtmf(switch_core_session_t *session, const swi
|
||||||
switch (dtmf_type) {
|
switch (dtmf_type) {
|
||||||
case DTMF_2833:
|
case DTMF_2833:
|
||||||
{
|
{
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Enqueuing RFC2833 DTMF %c of length %d\n", dtmf->digit, dtmf->duration);
|
||||||
return switch_rtp_queue_rfc2833(tech_pvt->rtp_session, dtmf);
|
return switch_rtp_queue_rfc2833(tech_pvt->rtp_session, dtmf);
|
||||||
}
|
}
|
||||||
case DTMF_INFO:
|
case DTMF_INFO:
|
||||||
{
|
{
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Sending INFO DTMF %c of length %d\n", dtmf->digit, dtmf->duration);
|
||||||
snprintf(message, sizeof(message), "Signal=%c\r\nDuration=%d\r\n", dtmf->digit, dtmf->duration / 8);
|
snprintf(message, sizeof(message), "Signal=%c\r\nDuration=%d\r\n", dtmf->digit, dtmf->duration / 8);
|
||||||
switch_mutex_lock(tech_pvt->sofia_mutex);
|
switch_mutex_lock(tech_pvt->sofia_mutex);
|
||||||
nua_info(tech_pvt->nh, SIPTAG_CONTENT_TYPE_STR("application/dtmf-relay"), SIPTAG_PAYLOAD_STR(message), TAG_END());
|
nua_info(tech_pvt->nh, SIPTAG_CONTENT_TYPE_STR("application/dtmf-relay"), SIPTAG_PAYLOAD_STR(message), TAG_END());
|
||||||
|
@ -1370,6 +1372,9 @@ static switch_status_t sofia_send_dtmf(switch_core_session_t *session, const swi
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DTMF_NONE:
|
case DTMF_NONE:
|
||||||
|
{
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Discarding DTMF %c of length %d, DTMF type is NONE\n", dtmf->digit, dtmf->duration);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "Unhandled DTMF type!\n");
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "Unhandled DTMF type!\n");
|
||||||
|
|
|
@ -4847,11 +4847,13 @@ uint8_t sofia_glue_negotiate_sdp(switch_core_session_t *session, const char *r_s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (tech_pvt->dtmf_type == DTMF_2833) {
|
||||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Disable 2833 dtmf\n");
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Disable 2833 dtmf\n");
|
||||||
switch_channel_set_variable(tech_pvt->channel, "dtmf_type", "none");
|
switch_channel_set_variable(tech_pvt->channel, "dtmf_type", "none");
|
||||||
tech_pvt->dtmf_type = DTMF_NONE;
|
tech_pvt->dtmf_type = DTMF_NONE;
|
||||||
te = tech_pvt->recv_te = 0;
|
te = tech_pvt->recv_te = 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!match && greedy && mine < total_codecs) {
|
if (!match && greedy && mine < total_codecs) {
|
||||||
|
|
Loading…
Reference in New Issue