]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
let relay work if its the only option
authorAnthony Minessale <anthm@freeswitch.org>
Thu, 8 May 2014 20:14:48 +0000 (01:14 +0500)
committerAnthony Minessale <anthm@freeswitch.org>
Thu, 8 May 2014 20:14:52 +0000 (01:14 +0500)
src/switch_rtp.c

index 5035b214e8b6e56dbacd8b3336c0f4710ecf5090..3e6a8e08dda67ae32b540018bf41cc52d83f8cae 100644 (file)
@@ -816,6 +816,8 @@ static void handle_ice(switch_rtp_t *rtp_session, switch_rtp_ice_t *ice, void *d
        int ok = 1;
        uint32_t *pri = NULL;
        int is_rtcp = ice == &rtp_session->rtcp_ice;
+       uint32_t elapsed;
+
 
        if (!switch_rtp_ready(rtp_session) || zstr(ice->user_ice) || zstr(ice->ice_user)) {
                return;
@@ -841,6 +843,12 @@ static void handle_ice(switch_rtp_t *rtp_session, switch_rtp_ice_t *ice, void *d
 
        }
 
+       if (!rtp_session->last_stun) {
+               elapsed = 0;
+       } else {
+               elapsed = (unsigned int) ((switch_micro_time_now() - rtp_session->last_stun) / 1000);
+       }
+
        end_buf = buf + ((sizeof(buf) > packet->header.length) ? packet->header.length : sizeof(buf));
 
        rtp_session->last_stun = switch_micro_time_now();
@@ -945,7 +953,6 @@ static void handle_ice(switch_rtp_t *rtp_session, switch_rtp_ice_t *ice, void *d
                if (ok) {
                        ice->missed_count = 0;
                } else {
-                       uint32_t elapsed = (unsigned int) ((switch_micro_time_now() - rtp_session->last_stun) / 1000);
                        switch_rtp_ice_t *icep[2] = { &rtp_session->ice, &rtp_session->rtcp_ice };
                        switch_port_t port = 0;
                        char *host = NULL;
@@ -1114,17 +1121,24 @@ static void handle_ice(switch_rtp_t *rtp_session, switch_rtp_ice_t *ice, void *d
                                ice->missed_count = 0;
                                ice->rready = 1;
 
+
+
+
                                for (i = 0; i <= ice->ice_params->cand_idx; i++) {
                                        if (ice->ice_params->cands[i][ice->proto].con_port == port) {
                                                if (!strcmp(ice->ice_params->cands[i][ice->proto].con_addr, host) && 
                                                        !strcmp(ice->ice_params->cands[i][ice->proto].cand_type, "relay")) {
 
-                                                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_WARNING,
-                                                                                         "Skiping RELAY stun/%s/dtls port change from %s:%u to %s:%u\n", is_rtcp ? "rtcp" : "rtp", 
-                                                                                         host2, port2,
-                                                                                         host, port);
+                                                       if (elapsed != 0 && elapsed < 5000) {
+                                                               switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_WARNING,
+                                                                                                 "Skiping RELAY stun/%s/dtls port change from %s:%u to %s:%u\n", is_rtcp ? "rtcp" : "rtp", 
+                                                                                                 host2, port2,
+                                                                                                 host, port);
+                                                       
+                                                               goto end;
+                                                       }
 
-                                                       goto end;
+                                                       break;
                                                }
                                        }
                                }