diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 3453c4e464..8129df3360 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -546,7 +546,7 @@ static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_f tech_pvt = (private_object_t *) switch_core_session_get_private(session); switch_assert(tech_pvt != NULL); - if (!(tech_pvt->profile->pflags & PFLAG_RUNNING)) { + if (0 && !(tech_pvt->profile->pflags & PFLAG_RUNNING)) { switch_channel_hangup(tech_pvt->channel, SWITCH_CAUSE_NORMAL_CLEARING); return SWITCH_STATUS_FALSE; } diff --git a/src/switch_rtp.c b/src/switch_rtp.c index be903f4428..5c6ce7e64b 100644 --- a/src/switch_rtp.c +++ b/src/switch_rtp.c @@ -139,6 +139,7 @@ struct switch_rtp { uint32_t ts; uint32_t last_write_ts; uint32_t last_write_samplecount; + uint32_t next_write_samplecount; uint32_t flags; switch_memory_pool_t *pool; switch_sockaddr_t *from_addr; @@ -843,6 +844,7 @@ static void do_2833(switch_rtp_t *rtp_session) if (rtp_session->timer.interval) { switch_core_timer_check(&rtp_session->timer); rtp_session->last_write_samplecount = rtp_session->timer.samplecount; + rtp_session->next_write_samplecount = rtp_session->timer.samplecount + samples * 5; } rtp_session->dtmf_data.out_digit_dur = 0; } @@ -851,6 +853,13 @@ static void do_2833(switch_rtp_t *rtp_session) if (!rtp_session->dtmf_data.out_digit_dur && rtp_session->dtmf_data.dtmf_queue && switch_queue_size(rtp_session->dtmf_data.dtmf_queue)) { void *pop; + if (rtp_session->timer.interval) { + switch_core_timer_check(&rtp_session->timer); + if (rtp_session->timer.samplecount < rtp_session->next_write_samplecount) { + return; + } + } + if (switch_queue_trypop(rtp_session->dtmf_data.dtmf_queue, &pop) == SWITCH_STATUS_SUCCESS) { switch_dtmf_t *rdigit = pop; int64_t offset;