diff --git a/src/ice_transport.cpp b/src/ice_transport.cpp index 7adc55d4c891f77539bacfce064ec48869e4c9f6..791b9303a4f2c01e1096a14e18f69289f04a3f75 100644 --- a/src/ice_transport.cpp +++ b/src/ice_transport.cpp @@ -487,6 +487,9 @@ IceTransport::start(const std::vector<uint8_t>& rem_data) return false; } + if (onlyIPv4Private_) + RING_WARN("[ice:%p] no public IPv4 found, your connection may fail!", this); + return start({rem_ufrag, rem_pwd}, rem_candidates); } @@ -854,8 +857,10 @@ IceTransport::getCandidateFromSDP(const std::string& line, IceCandidate& cand) if (strchr(ipaddr, ':')) af = pj_AF_INET6(); - else + else { af = pj_AF_INET(); + onlyIPv4Private_ &= IpAddr(ipaddr).isPrivate(); + } tmpaddr = pj_str(ipaddr); pj_sockaddr_init(af, &cand.addr, NULL, 0); diff --git a/src/ice_transport.h b/src/ice_transport.h index fbd2b54ffda024f0de7b3e1844cab68e7aa4204b..990c88d1de979a95cfff6520a50187623a2ccd2a 100644 --- a/src/ice_transport.h +++ b/src/ice_transport.h @@ -297,6 +297,8 @@ class IceTransport { std::unique_ptr<upnp::Controller> upnp_; + bool onlyIPv4Private_ {true}; + // IO/Timer events are handled by following thread std::thread thread_; std::atomic_bool threadTerminateFlags_ {false};