Changeset 259690 in webkit
- Timestamp:
- Apr 7, 2020, 5:32:31 PM (6 years ago)
- Location:
- branches/safari-609-branch/Source
- Files:
-
- 6 edited
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/platform/network/DNS.h (modified) (3 diffs)
-
WebCore/platform/network/soup/DNSResolveQueueSoup.cpp (modified) (1 diff)
-
WebKit/ChangeLog (modified) (1 diff)
-
WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp (modified) (2 diffs)
-
WebKit/NetworkProcess/webrtc/NetworkRTCResolverCocoa.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/safari-609-branch/Source/WebCore/ChangeLog
r259689 r259690 1 2020-04-07 Russell Epstein <repstein@apple.com> 2 3 Cherry-pick r259338. rdar://problem/61269727 4 5 Support resolution of IPv6 STUN/TURN addresses 6 https://bugs.webkit.org/show_bug.cgi?id=209808 7 8 Reviewed by Eric Carlson. 9 10 Source/WebCore: 11 12 Add family access to IPAddress to support both IPv4 and IPv6. 13 Store IPAddress internal value as IPv6 and cast them to IPv4 on demand. 14 15 * platform/network/DNS.h: 16 * platform/network/soup/DNSResolveQueueSoup.cpp: 17 (WebCore::resolvedWithObserverCallback): 18 19 Source/WebKit: 20 21 Update code to support IPv6 addresses when doing DNS resolution of TURN/STUN servers. 22 Refactor code to share more code between Cocoa ports and non Cocoa ports. 23 Manually tested with external IPv6 TURN servers. 24 25 * NetworkProcess/webrtc/NetworkRTCProvider.cpp: 26 (WebKit::NetworkRTCProvider::createResolver): 27 * NetworkProcess/webrtc/NetworkRTCResolverCocoa.cpp: 28 (WebKit::resolvedName): 29 30 git-svn-id: https://svn.webkit.org/repository/webkit/trunk@259338 268f45cc-cd09-0410-ab3c-d52691b4dbfc 31 32 2020-04-01 youenn fablet <youenn@apple.com> 33 34 Support resolution of IPv6 STUN/TURN addresses 35 https://bugs.webkit.org/show_bug.cgi?id=209808 36 37 Reviewed by Eric Carlson. 38 39 Add family access to IPAddress to support both IPv4 and IPv6. 40 Store IPAddress internal value as IPv6 and cast them to IPv4 on demand. 41 42 * platform/network/DNS.h: 43 * platform/network/soup/DNSResolveQueueSoup.cpp: 44 (WebCore::resolvedWithObserverCallback): 45 1 46 2020-04-07 Russell Epstein <repstein@apple.com> 2 47 -
branches/safari-609-branch/Source/WebCore/platform/network/DNS.h
r237944 r259690 28 28 #if OS(WINDOWS) 29 29 #include <winsock2.h> 30 #include <ws2tcpip.h> 30 31 #else 31 32 #include <netinet/in.h> … … 33 34 34 35 #include <wtf/Forward.h> 36 #include <wtf/Optional.h> 37 #include <wtf/Variant.h> 35 38 36 39 namespace WebCore { 37 40 38 class WEBCORE_EXPORTIPAddress {41 class IPAddress { 39 42 public: 40 explicit IPAddress(const struct sockaddr_in& address) 43 static Optional<IPAddress> fromSockAddrIn6(const struct sockaddr_in6&); 44 explicit IPAddress(const struct in_addr& address) 45 : m_address(address) 41 46 { 42 memset(&m_address, 0, sizeof(struct sockaddr_in));43 m_address = address;44 47 } 45 48 46 const struct in_addr& getSinAddr() { return m_address.sin_addr; }; 49 explicit IPAddress(const struct in6_addr& address) 50 : m_address(address) 51 { 52 } 53 54 bool isIPv4() const { return WTF::holds_alternative<struct in_addr>(m_address); } 55 bool isIPv6() const { return WTF::holds_alternative<struct in6_addr>(m_address); } 56 57 const struct in_addr& ipv4Address() const { return WTF::get<struct in_addr>(m_address); } 58 const struct in6_addr& ipv6Address() const { return WTF::get<struct in6_addr>(m_address); } 47 59 48 60 private: 49 struct sockaddr_inm_address;61 Variant<struct in_addr, struct in6_addr> m_address; 50 62 }; 51 63 52 64 enum class DNSError { Unknown, CannotResolve, Cancelled }; 53 65 54 using DNSAddressesOrError = Expected<Vector< WebCore::IPAddress>, DNSError>;55 using DNSCompletionHandler = WTF::CompletionHandler<void(DNSAddressesOrError&&)>;66 using DNSAddressesOrError = Expected<Vector<IPAddress>, DNSError>; 67 using DNSCompletionHandler = CompletionHandler<void(DNSAddressesOrError&&)>; 56 68 57 69 WEBCORE_EXPORT void prefetchDNS(const String& hostname); … … 59 71 WEBCORE_EXPORT void stopResolveDNS(uint64_t identifier); 60 72 73 inline Optional<IPAddress> IPAddress::fromSockAddrIn6(const struct sockaddr_in6& address) 74 { 75 if (address.sin6_family == AF_INET6) 76 return IPAddress { address.sin6_addr }; 77 if (address.sin6_family == AF_INET) 78 return IPAddress {reinterpret_cast<const struct sockaddr_in&>(address).sin_addr }; 79 return { }; 61 80 } 81 82 } -
branches/safari-609-branch/Source/WebCore/platform/network/soup/DNSResolveQueueSoup.cpp
r248846 r259690 144 144 addresses.reserveInitialCapacity(1); 145 145 int len; 146 auto* ipAddress = reinterpret_cast<const struct sockaddr_in*>(soup_address_get_sockaddr(address, &len)); 147 for (unsigned i = 0; i < sizeof(*ipAddress) / len; i++) 148 addresses.uncheckedAppend(WebCore::IPAddress(ipAddress[i])); 146 // FIXME: Support multiple addresses, IPv6 and IPv4. 147 auto* ipAddress = soup_address_get_sockaddr(address, &len); 148 if (ipAddress) { 149 if (auto address = IPAddress::fromSockAddrIn6(reinterpret_cast<const struct sockaddr_in6&>(*ipAddress))) 150 addresses.uncheckedAppend(*address); 151 } 152 if (addresses.isEmpty()) { 153 completionHandler(makeUnexpected(WebCore::DNSError::CannotResolve)); 154 return; 155 } 149 156 150 157 completionHandler(addresses); -
branches/safari-609-branch/Source/WebKit/ChangeLog
r259689 r259690 1 2020-04-07 Russell Epstein <repstein@apple.com> 2 3 Cherry-pick r259338. rdar://problem/61269727 4 5 Support resolution of IPv6 STUN/TURN addresses 6 https://bugs.webkit.org/show_bug.cgi?id=209808 7 8 Reviewed by Eric Carlson. 9 10 Source/WebCore: 11 12 Add family access to IPAddress to support both IPv4 and IPv6. 13 Store IPAddress internal value as IPv6 and cast them to IPv4 on demand. 14 15 * platform/network/DNS.h: 16 * platform/network/soup/DNSResolveQueueSoup.cpp: 17 (WebCore::resolvedWithObserverCallback): 18 19 Source/WebKit: 20 21 Update code to support IPv6 addresses when doing DNS resolution of TURN/STUN servers. 22 Refactor code to share more code between Cocoa ports and non Cocoa ports. 23 Manually tested with external IPv6 TURN servers. 24 25 * NetworkProcess/webrtc/NetworkRTCProvider.cpp: 26 (WebKit::NetworkRTCProvider::createResolver): 27 * NetworkProcess/webrtc/NetworkRTCResolverCocoa.cpp: 28 (WebKit::resolvedName): 29 30 git-svn-id: https://svn.webkit.org/repository/webkit/trunk@259338 268f45cc-cd09-0410-ab3c-d52691b4dbfc 31 32 2020-04-01 youenn fablet <youenn@apple.com> 33 34 Support resolution of IPv6 STUN/TURN addresses 35 https://bugs.webkit.org/show_bug.cgi?id=209808 36 37 Reviewed by Eric Carlson. 38 39 Update code to support IPv6 addresses when doing DNS resolution of TURN/STUN servers. 40 Refactor code to share more code between Cocoa ports and non Cocoa ports. 41 Manually tested with external IPv6 TURN servers. 42 43 * NetworkProcess/webrtc/NetworkRTCProvider.cpp: 44 (WebKit::NetworkRTCProvider::createResolver): 45 * NetworkProcess/webrtc/NetworkRTCResolverCocoa.cpp: 46 (WebKit::resolvedName): 47 1 48 2020-04-07 Russell Epstein <repstein@apple.com> 2 49 -
branches/safari-609-branch/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp
r253699 r259690 202 202 } 203 203 204 #if PLATFORM(COCOA)205 204 206 205 void NetworkRTCProvider::createResolver(uint64_t identifier, const String& address) 207 206 { 208 auto resolver = NetworkRTCResolver::create(identifier, [this, identifier](WebCore::DNSAddressesOrError&& result) mutable{207 WebCore::DNSCompletionHandler completionHandler = [this, identifier](auto&& result) { 209 208 if (!result.has_value()) { 210 209 if (result.error() != WebCore::DNSError::Cancelled) … … 213 212 } 214 213 215 auto addresses = WTF::map(result.value(), [] (auto& address) { 216 return RTCNetwork::IPAddress { rtc::IPAddress { address.getSinAddr() } }; 217 }); 218 219 m_connection->connection().send(Messages::WebRTCResolver::SetResolvedAddress(addresses), identifier); 220 }); 214 Vector<RTCNetwork::IPAddress> ipAddresses; 215 ipAddresses.reserveInitialCapacity(result.value().size()); 216 for (auto& address : result.value()) { 217 if (address.isIPv4()) 218 ipAddresses.uncheckedAppend(rtc::IPAddress { address.ipv4Address() }); 219 else if (address.isIPv6()) 220 ipAddresses.uncheckedAppend(rtc::IPAddress { address.ipv6Address() }); 221 } 222 223 m_connection->connection().send(Messages::WebRTCResolver::SetResolvedAddress(ipAddresses), identifier); 224 }; 225 226 #if PLATFORM(COCOA) 227 auto resolver = NetworkRTCResolver::create(identifier, WTFMove(completionHandler)); 221 228 resolver->start(address); 222 229 m_resolvers.add(identifier, WTFMove(resolver)); 230 #else 231 WebCore::resolveDNS(address, identifier.toUInt64(), WTFMove(completionHandler)); 232 #endif 223 233 } 224 234 225 235 void NetworkRTCProvider::stopResolver(uint64_t identifier) 226 236 { 237 #if PLATFORM(COCOA) 227 238 if (auto resolver = m_resolvers.take(identifier)) 228 239 resolver->stop(); 229 }230 231 240 #else 232 233 void NetworkRTCProvider::createResolver(uint64_t identifier, const String& address) 234 { 235 auto completionHandler = [this, identifier](WebCore::DNSAddressesOrError&& result) mutable { 236 if (!result.has_value()) { 237 if (result.error() != WebCore::DNSError::Cancelled) 238 m_connection->connection().send(Messages::WebRTCResolver::ResolvedAddressError(1), identifier); 239 return; 240 } 241 242 auto addresses = WTF::map(result.value(), [] (auto& address) { 243 return RTCNetwork::IPAddress { rtc::IPAddress { address.getSinAddr() } }; 244 }); 245 246 m_connection->connection().send(Messages::WebRTCResolver::SetResolvedAddress(addresses), identifier); 247 }; 248 249 WebCore::resolveDNS(address, identifier, WTFMove(completionHandler)); 250 } 251 252 void NetworkRTCProvider::stopResolver(uint64_t identifier) 253 { 254 WebCore::stopResolveDNS(identifier); 255 } 256 257 #endif 241 WebCore::stopResolveDNS(identifier.toUInt64()); 242 #endif 243 } 258 244 259 245 void NetworkRTCProvider::closeListeningSockets(Function<void()>&& completionHandler) -
branches/safari-609-branch/Source/WebKit/NetworkProcess/webrtc/NetworkRTCResolverCocoa.cpp
r231235 r259690 56 56 for (size_t index = 0; index < count; ++index) { 57 57 CFDataRef data = (CFDataRef)CFArrayGetValueAtIndex(resolvedAddresses, index); 58 auto* address = reinterpret_cast<const struct sockaddr_in*>(CFDataGetBytePtr(data)); 59 if (address->sin_family == AF_INET) 60 addresses.uncheckedAppend(WebCore::IPAddress(*address)); 61 // FIXME: We should probably return AF_INET6 addresses as well. 58 if (auto address = IPAddress::fromSockAddrIn6(*reinterpret_cast<const struct sockaddr_in6*>(CFDataGetBytePtr(data)))) 59 addresses.uncheckedAppend(*address); 62 60 } 63 61 if (addresses.isEmpty()) {
Note:
See TracChangeset
for help on using the changeset viewer.