diff --git a/src/switch_rtp.c b/src/switch_rtp.c index 16aba214c5..517292bcc1 100644 --- a/src/switch_rtp.c +++ b/src/switch_rtp.c @@ -1197,7 +1197,9 @@ static void handle_ice(switch_rtp_t *rtp_session, switch_rtp_ice_t *ice, void *d uint8_t do_adj = 0; switch_time_t now = switch_micro_time_now(); int cmp = 0; - + int cur_idx = -1;//, is_relay = 0; + int i; + if (is_rtcp) { from_addr = rtp_session->rtcp_from_addr; sock_output = rtp_session->rtcp_sock_output; @@ -1250,46 +1252,42 @@ static void handle_ice(switch_rtp_t *rtp_session, switch_rtp_ice_t *ice, void *d if (!do_adj) { rtp_session->wrong_addrs++; } + + for (i = 0; i < ice->ice_params->cand_idx[ice->proto]; i++) { + if (!strcmp(ice->ice_params->cands[i][ice->proto].con_addr, host)) { + cur_idx = i; + //if (!strcasecmp(ice->ice_params->cands[i][ice->proto].cand_type, "relay")) { + // is_relay = 1; + //} + } + } + + + if (!strcasecmp(ice->ice_params->cands[ice->ice_params->chosen[ice->proto]][ice->proto].cand_type, "relay")) { + do_adj++; + } } - + if ((ice->type & ICE_VANILLA) && ice->ice_params && do_adj) { - int i = 0; - ice->missed_count = 0; ice->rready = 1; - for (i = 0; i < ice->ice_params->cand_idx[ice->proto]; i++) { - if (ice->ice_params->cands[i][ice->proto].con_port == port) { - if (!strcmp(ice->ice_params->cands[i][ice->proto].con_addr, host) && - ice->ice_params->cands[i][ice->proto].cand_type && - !strcmp(ice->ice_params->cands[i][ice->proto].cand_type, "relay")) { - - if (elapsed < 1000) { - 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; - } - - break; - } - } + if (cur_idx > -1) { + ice->ice_params->chosen[ice->proto] = cur_idx; } - + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_NOTICE, - "Auto Changing %s stun/%s/dtls port from %s:%u to %s:%u\n", rtp_type(rtp_session), is_rtcp ? "rtcp" : "rtp", + "Auto Changing %s stun/%s/dtls port from %s:%u to %s:%u idx:%d\n", rtp_type(rtp_session), is_rtcp ? "rtcp" : "rtp", host2, port2, - host, port); + host, port, cur_idx); switch_rtp_change_ice_dest(rtp_session, ice, host, port); ice->last_ok = now; rtp_session->wrong_addrs = 0; } - if (cmp) { - switch_socket_sendto(sock_output, from_addr, 0, (void *) rpacket, &bytes); - } + //if (cmp) { + switch_socket_sendto(sock_output, from_addr, 0, (void *) rpacket, &bytes); + //} } } else if (packet->header.type == SWITCH_STUN_BINDING_ERROR_RESPONSE) {