From df5c3d292ac2e27a508295952d836d854be1c242 Mon Sep 17 00:00:00 2001 From: Anthony Minessale <anthony.minessale@gmail.com> Date: Fri, 7 Mar 2008 20:13:40 +0000 Subject: [PATCH] late neg + video issues git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@7834 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/mod/endpoints/mod_sofia/sofia_glue.c | 11 ++++++- src/switch_rtp.c | 39 ++++++++++++++++++------ 2 files changed, 40 insertions(+), 10 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index f4215d9705..586a37b556 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -532,6 +532,7 @@ switch_status_t sofia_glue_tech_choose_video_port(private_object_t *tech_pvt) return SWITCH_STATUS_FALSE; } sdp_port = tech_pvt->local_sdp_video_port; + if (tech_pvt->profile->extrtpip) { if (sofia_glue_ext_address_lookup(&ip, &sdp_port, tech_pvt->profile->extrtpip, switch_core_session_get_pool(tech_pvt->session)) != @@ -1633,6 +1634,10 @@ switch_status_t sofia_glue_activate_rtp(private_object_t *tech_pvt, switch_rtp_f sofia_glue_check_video_codecs(tech_pvt); + if (!tech_pvt->local_sdp_video_port) { + sofia_glue_tech_choose_video_port(tech_pvt); + } + if (switch_test_flag(tech_pvt, TFLAG_VIDEO) && tech_pvt->video_rm_encoding) { flags = (switch_rtp_flag_t) (SWITCH_RTP_FLAG_USE_TIMER | SWITCH_RTP_FLAG_AUTOADJ | SWITCH_RTP_FLAG_DATAWAIT | SWITCH_RTP_FLAG_NOBLOCK | SWITCH_RTP_FLAG_RAW_WRITE); @@ -1662,10 +1667,14 @@ switch_status_t sofia_glue_activate_rtp(private_object_t *tech_pvt, switch_rtp_f if (switch_rtp_ready(tech_pvt->video_rtp_session)) { switch_channel_set_flag(tech_pvt->channel, CF_VIDEO); + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "VIDEO RTP REPORTS ERROR: [%s]\n", switch_str_nil(err)); + switch_channel_hangup(tech_pvt->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); + goto end; } } } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "RTP REPORTS ERROR: [%s]\n", switch_str_nil(err)); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "AUDIO RTP REPORTS ERROR: [%s]\n", switch_str_nil(err)); switch_channel_hangup(tech_pvt->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); switch_clear_flag_locked(tech_pvt, TFLAG_IO); status = SWITCH_STATUS_FALSE; diff --git a/src/switch_rtp.c b/src/switch_rtp.c index 230dffb789..c55b4da8bf 100644 --- a/src/switch_rtp.c +++ b/src/switch_rtp.c @@ -428,6 +428,11 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_set_local_address(switch_rtp_t *rtp_s *err = NULL; + if (switch_strlen_zero(host) || !port) { + *err = "Address Error"; + goto done; + } + if (switch_sockaddr_info_get(&rtp_session->local_addr, host, SWITCH_UNSPEC, port, 0, rtp_session->pool) != SWITCH_STATUS_SUCCESS) { *err = "Local Address Error!"; goto done; @@ -468,17 +473,13 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_set_local_address(switch_rtp_t *rtp_s break; } - if (++x > 500) { + if (++x > 1000) { break; } switch_yield(1000); } switch_socket_opt_set(new_sock, SWITCH_SO_NONBLOCK, FALSE); - if (!ilen) { - *err = "Send myself a packet failed!"; - goto done; - } #endif old_sock = rtp_session->sock; @@ -740,13 +741,28 @@ SWITCH_DECLARE(switch_rtp_t *) switch_rtp_new(const char *rx_host, switch_memory_pool_t *pool) { switch_rtp_t *rtp_session = NULL; - - if (switch_rtp_create(&rtp_session, payload, samples_per_interval, ms_per_packet, flags, timer_name, err, pool) != SWITCH_STATUS_SUCCESS) { + + if (switch_strlen_zero(rx_host)) { + *err = "Missing local host"; + goto end; + } + + if (!rx_port) { + *err = "Missing local port"; + goto end; + } + + if (switch_strlen_zero(tx_host)) { + *err = "Missing remote host"; + goto end; + } + + if (!tx_port) { + *err = "Missing local port"; goto end; } - if (switch_rtp_set_remote_address(rtp_session, tx_host, tx_port, err) != SWITCH_STATUS_SUCCESS) { - rtp_session = NULL; + if (switch_rtp_create(&rtp_session, payload, samples_per_interval, ms_per_packet, flags, timer_name, err, pool) != SWITCH_STATUS_SUCCESS) { goto end; } @@ -754,6 +770,11 @@ SWITCH_DECLARE(switch_rtp_t *) switch_rtp_new(const char *rx_host, rtp_session = NULL; } + if (switch_rtp_set_remote_address(rtp_session, tx_host, tx_port, err) != SWITCH_STATUS_SUCCESS) { + rtp_session = NULL; + goto end; + } + end: if (rtp_session) {