Index: webrtc/p2p/stunprober/stunprober.cc |
diff --git a/webrtc/p2p/stunprober/stunprober.cc b/webrtc/p2p/stunprober/stunprober.cc |
index f32a2002fb0fed3069f01671ca15ec32ba42a137..2ec77323daa315a244d915cb28f1a997363d2278 100644 |
--- a/webrtc/p2p/stunprober/stunprober.cc |
+++ b/webrtc/p2p/stunprober/stunprober.cc |
@@ -280,6 +280,19 @@ bool StunProber::Prepare(const std::vector<rtc::SocketAddress>& servers, |
timeout_ms_ = timeout_ms; |
servers_ = servers; |
observer_ = observer; |
+ // Remove addresses that are already resolved. |
+ for (auto it = servers_.begin(); it != servers_.end();) { |
+ if (it->ipaddr().family() != AF_UNSPEC) { |
+ all_servers_addrs_.push_back(*it); |
+ it = servers_.erase(it); |
+ } else { |
+ ++it; |
+ } |
+ } |
+ if (servers_.empty()) { |
+ CreateSockets(); |
+ return true; |
+ } |
return ResolveServerName(servers_.back()); |
} |
@@ -339,6 +352,10 @@ void StunProber::OnServerResolved(rtc::AsyncResolverInterface* resolver) { |
return; |
} |
+ CreateSockets(); |
+} |
+ |
+void StunProber::CreateSockets() { |
// Dedupe. |
std::set<rtc::SocketAddress> addrs(all_servers_addrs_.begin(), |
all_servers_addrs_.end()); |