From abcc0357d49b40c1b7a1b6d307bccd23206f233c Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Tue, 18 Nov 2008 23:26:25 +0000 Subject: [PATCH] update git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@10447 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/include/switch_rtp.h | 2 +- src/mod/endpoints/mod_sofia/mod_sofia.c | 9 ++++++--- src/switch_rtp.c | 16 ++++++++++++---- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/include/switch_rtp.h b/src/include/switch_rtp.h index c398eb95c2..03141d51eb 100644 --- a/src/include/switch_rtp.h +++ b/src/include/switch_rtp.h @@ -111,7 +111,7 @@ SWITCH_DECLARE(switch_port_t) switch_rtp_set_end_port(switch_port_t port); SWITCH_DECLARE(switch_port_t) switch_rtp_request_port(const char *ip); SWITCH_DECLARE(void) switch_rtp_release_port(const char *ip, switch_port_t port); -SWITCH_DECLARE(void) switch_rtp_change_interval(switch_rtp_t *rtp_session, uint32_t ms_per_packet, uint32_t samples_per_interval); +SWITCH_DECLARE(switch_status_t) switch_rtp_change_interval(switch_rtp_t *rtp_session, uint32_t ms_per_packet, uint32_t samples_per_interval); /*! \brief create a new RTP session handle \param new_rtp_session a poiter to aim at the new session diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 68ebb2e633..5395929ef4 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -757,9 +757,12 @@ static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_f tech_pvt->read_codec.implementation->samples_per_packet; } - switch_rtp_change_interval(tech_pvt->rtp_session, - tech_pvt->read_codec.implementation->samples_per_packet, - tech_pvt->codec_ms * 1000); + if (switch_rtp_change_interval(tech_pvt->rtp_session, + tech_pvt->read_codec.implementation->samples_per_packet, + tech_pvt->codec_ms * 1000) != SWITCH_STATUS_SUCCESS) { + switch_channel_hangup(tech_pvt->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); + + } tech_pvt->check_frames = MAX_CODEC_CHECK_FRAMES; } diff --git a/src/switch_rtp.c b/src/switch_rtp.c index cbc311322a..17d751346d 100644 --- a/src/switch_rtp.c +++ b/src/switch_rtp.c @@ -754,7 +754,7 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_add_crypto_key(switch_rtp_t *rtp_sess return SWITCH_STATUS_SUCCESS; } -SWITCH_DECLARE(void) switch_rtp_change_interval(switch_rtp_t *rtp_session, uint32_t ms_per_packet, uint32_t samples_per_interval) +SWITCH_DECLARE(switch_status_t) switch_rtp_change_interval(switch_rtp_t *rtp_session, uint32_t ms_per_packet, uint32_t samples_per_interval) { rtp_session->ms_per_packet = ms_per_packet; rtp_session->samples_per_interval = rtp_session->conf_samples_per_interval = samples_per_interval; @@ -764,11 +764,19 @@ SWITCH_DECLARE(void) switch_rtp_change_interval(switch_rtp_t *rtp_session, uint3 if (rtp_session->timer.timer_interface) { switch_core_timer_destroy(&rtp_session->timer); } - switch_core_timer_init(&rtp_session->timer, rtp_session->timer_name, ms_per_packet / 1000, samples_per_interval, rtp_session->pool); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, - "RE-Starting timer [%s] %d bytes per %dms\n", rtp_session->timer_name, samples_per_interval, ms_per_packet); + if (switch_core_timer_init(&rtp_session->timer, + rtp_session->timer_name, ms_per_packet / 1000, samples_per_interval, rtp_session->pool) == SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, + "RE-Starting timer [%s] %d bytes per %dms\n", rtp_session->timer_name, samples_per_interval, ms_per_packet); + } else { + memset(&rtp_session->timer, 0, sizeof(rtp_session->timer)); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, + "Problem RE-Starting timer [%s] %d bytes per %dms\n", rtp_session->timer_name, samples_per_interval, ms_per_packet); + return SWITCH_STATUS_FALSE; + } } + return SWITCH_STATUS_SUCCESS; } SWITCH_DECLARE(switch_status_t) switch_rtp_create(switch_rtp_t **new_rtp_session,