]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
late neg + video issues
authorAnthony Minessale <anthony.minessale@gmail.com>
Fri, 7 Mar 2008 20:13:40 +0000 (20:13 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Fri, 7 Mar 2008 20:13:40 +0000 (20:13 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@7834 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/endpoints/mod_sofia/sofia_glue.c
src/switch_rtp.c

index f4215d97050f2067af61040b7cc14c2cb1971524..586a37b5567e7bb1328b8c44c78d524da9a69137 100644 (file)
@@ -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;
index 230dffb7894ccbfd64f7c1e36c4453b33c2e4177..c55b4da8bfb165f645c74686797dbdc3b6a4fedf 100644 (file)
@@ -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) {