Title: [212519] trunk/Source/WebKit2
Revision
212519
Author
[email protected]
Date
2017-02-16 18:52:30 -0800 (Thu, 16 Feb 2017)

Log Message

[WebRTC] libwebrtc socket addresses should not be passed as strings
https://bugs.webkit.org/show_bug.cgi?id=168474

Patch by Youenn Fablet <[email protected]> on 2017-02-16
Reviewed by Alex Christensen.

Removing all seralization of socket addresses as strings.
Instead, a dedicated serialization is provided.
This allows proper handling of various cases like addresses with both hostnames and resolved IPs.

* NetworkProcess/webrtc/LibWebRTCSocketClient.cpp:
(WebKit::LibWebRTCSocketClient::signalReadPacket):
(WebKit::LibWebRTCSocketClient::signalSentPacket):
(WebKit::LibWebRTCSocketClient::signalAddressReady):
* NetworkProcess/webrtc/NetworkRTCProvider.cpp:
(WebKit::NetworkRTCProvider::createUDPSocket):
(WebKit::NetworkRTCProvider::createServerTCPSocket):
(WebKit::NetworkRTCProvider::createClientTCPSocket):
* NetworkProcess/webrtc/NetworkRTCProvider.h:
* NetworkProcess/webrtc/NetworkRTCProvider.messages.in:
* NetworkProcess/webrtc/NetworkRTCSocket.cpp:
(WebKit::NetworkRTCSocket::sendTo):
* NetworkProcess/webrtc/NetworkRTCSocket.h:
* NetworkProcess/webrtc/NetworkRTCSocket.messages.in:
* Shared/RTCNetwork.cpp:
(WebKit::RTCNetwork::SocketAddress::decode):
(WebKit::RTCNetwork::SocketAddress::encode):
* Shared/RTCNetwork.h:
(WebKit::RTCNetwork::SocketAddress::SocketAddress):
* WebProcess/Network/webrtc/LibWebRTCSocket.cpp:
(WebKit::LibWebRTCSocket::signalAddressReady):
(WebKit::LibWebRTCSocket::SendTo):
* WebProcess/Network/webrtc/LibWebRTCSocket.h:
* WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
(WebKit::LibWebRTCSocketFactory::CreateServerTcpSocket):
(WebKit::LibWebRTCSocketFactory::CreateUdpSocket):
(WebKit::LibWebRTCSocketFactory::CreateClientTcpSocket):
* WebProcess/Network/webrtc/WebRTCSocket.cpp:
(WebKit::WebRTCSocket::signalAddressReady):
* WebProcess/Network/webrtc/WebRTCSocket.h:
* WebProcess/Network/webrtc/WebRTCSocket.messages.in:

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (212518 => 212519)


--- trunk/Source/WebKit2/ChangeLog	2017-02-17 02:40:21 UTC (rev 212518)
+++ trunk/Source/WebKit2/ChangeLog	2017-02-17 02:52:30 UTC (rev 212519)
@@ -1,3 +1,46 @@
+2017-02-16  Youenn Fablet  <[email protected]>
+
+        [WebRTC] libwebrtc socket addresses should not be passed as strings
+        https://bugs.webkit.org/show_bug.cgi?id=168474
+
+        Reviewed by Alex Christensen.
+
+        Removing all seralization of socket addresses as strings.
+        Instead, a dedicated serialization is provided.
+        This allows proper handling of various cases like addresses with both hostnames and resolved IPs.
+
+        * NetworkProcess/webrtc/LibWebRTCSocketClient.cpp:
+        (WebKit::LibWebRTCSocketClient::signalReadPacket):
+        (WebKit::LibWebRTCSocketClient::signalSentPacket):
+        (WebKit::LibWebRTCSocketClient::signalAddressReady):
+        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
+        (WebKit::NetworkRTCProvider::createUDPSocket):
+        (WebKit::NetworkRTCProvider::createServerTCPSocket):
+        (WebKit::NetworkRTCProvider::createClientTCPSocket):
+        * NetworkProcess/webrtc/NetworkRTCProvider.h:
+        * NetworkProcess/webrtc/NetworkRTCProvider.messages.in:
+        * NetworkProcess/webrtc/NetworkRTCSocket.cpp:
+        (WebKit::NetworkRTCSocket::sendTo):
+        * NetworkProcess/webrtc/NetworkRTCSocket.h:
+        * NetworkProcess/webrtc/NetworkRTCSocket.messages.in:
+        * Shared/RTCNetwork.cpp:
+        (WebKit::RTCNetwork::SocketAddress::decode):
+        (WebKit::RTCNetwork::SocketAddress::encode):
+        * Shared/RTCNetwork.h:
+        (WebKit::RTCNetwork::SocketAddress::SocketAddress):
+        * WebProcess/Network/webrtc/LibWebRTCSocket.cpp:
+        (WebKit::LibWebRTCSocket::signalAddressReady):
+        (WebKit::LibWebRTCSocket::SendTo):
+        * WebProcess/Network/webrtc/LibWebRTCSocket.h:
+        * WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp:
+        (WebKit::LibWebRTCSocketFactory::CreateServerTcpSocket):
+        (WebKit::LibWebRTCSocketFactory::CreateUdpSocket):
+        (WebKit::LibWebRTCSocketFactory::CreateClientTcpSocket):
+        * WebProcess/Network/webrtc/WebRTCSocket.cpp:
+        (WebKit::WebRTCSocket::signalAddressReady):
+        * WebProcess/Network/webrtc/WebRTCSocket.h:
+        * WebProcess/Network/webrtc/WebRTCSocket.messages.in:
+
 2017-02-16  Daniel Bates  <[email protected]>
 
         Remove Chromium-specific code to call FrameLoaderClient::redirectDataToPlugin(nullptr)

Modified: trunk/Source/WebKit2/NetworkProcess/webrtc/LibWebRTCSocketClient.cpp (212518 => 212519)


--- trunk/Source/WebKit2/NetworkProcess/webrtc/LibWebRTCSocketClient.cpp	2017-02-17 02:40:21 UTC (rev 212518)
+++ trunk/Source/WebKit2/NetworkProcess/webrtc/LibWebRTCSocketClient.cpp	2017-02-17 02:52:30 UTC (rev 212519)
@@ -82,7 +82,7 @@
 void LibWebRTCSocketClient::signalReadPacket(rtc::AsyncPacketSocket*, const char* value, size_t length, const rtc::SocketAddress& address, const rtc::PacketTime& packetTime)
 {
     auto buffer = WebCore::SharedBuffer::create(value, length);
-    m_rtcProvider.sendFromMainThread([identifier = m_identifier, buffer = WTFMove(buffer), address, packetTime](IPC::Connection& connection) {
+    m_rtcProvider.sendFromMainThread([identifier = m_identifier, buffer = WTFMove(buffer), address = RTCNetwork::isolatedCopy(address), packetTime](IPC::Connection& connection) {
         IPC::DataReference data(reinterpret_cast<const uint8_t*>(buffer->data()), buffer->size());
         connection.send(Messages::WebRTCSocket::SignalReadPacket(data, RTCNetwork::IPAddress(address.ipaddr()), address.port(), packetTime.timestamp), identifier);
     });
@@ -97,9 +97,8 @@
 
 void LibWebRTCSocketClient::signalAddressReady(rtc::AsyncPacketSocket*, const rtc::SocketAddress& address)
 {
-    m_rtcProvider.sendFromMainThread([identifier = m_identifier, address](IPC::Connection& connection) {
-        auto addressString = address.ToString();
-        connection.send(Messages::WebRTCSocket::SignalAddressReady(String(addressString.data(), addressString.length())), identifier);
+    m_rtcProvider.sendFromMainThread([identifier = m_identifier, address = RTCNetwork::isolatedCopy(address)](IPC::Connection& connection) {
+        connection.send(Messages::WebRTCSocket::SignalAddressReady(RTCNetwork::SocketAddress(address)), identifier);
     });
 }
 

Modified: trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCProvider.cpp (212518 => 212519)


--- trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCProvider.cpp	2017-02-17 02:40:21 UTC (rev 212518)
+++ trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCProvider.cpp	2017-02-17 02:52:30 UTC (rev 212519)
@@ -67,38 +67,26 @@
     });
 }
 
-void NetworkRTCProvider::createUDPSocket(uint64_t identifier, const String& address, uint16_t minPort, uint16_t maxPort)
+void NetworkRTCProvider::createUDPSocket(uint64_t identifier, const RTCNetwork::SocketAddress& address, uint16_t minPort, uint16_t maxPort)
 {
-    rtc::SocketAddress socketAddress;
-    socketAddress.FromString(address.utf8().data());
-
-    callOnRTCNetworkThread([this, identifier, socketAddress, minPort, maxPort]() {
-        std::unique_ptr<rtc::AsyncPacketSocket> socket(m_packetSocketFactory->CreateUdpSocket(socketAddress, minPort, maxPort));
+    callOnRTCNetworkThread([this, identifier, address = RTCNetwork::isolatedCopy(address.value), minPort, maxPort]() {
+        std::unique_ptr<rtc::AsyncPacketSocket> socket(m_packetSocketFactory->CreateUdpSocket(address, minPort, maxPort));
         addSocket(identifier, std::make_unique<LibWebRTCSocketClient>(identifier, *this, WTFMove(socket), LibWebRTCSocketClient::Type::UDP));
     });
 }
 
-void NetworkRTCProvider::createServerTCPSocket(uint64_t identifier, const String& address, uint16_t minPort, uint16_t maxPort, int options)
+void NetworkRTCProvider::createServerTCPSocket(uint64_t identifier, const RTCNetwork::SocketAddress& address, uint16_t minPort, uint16_t maxPort, int options)
 {
-    rtc::SocketAddress socketAddress;
-    socketAddress.FromString(address.utf8().data());
-
-    callOnRTCNetworkThread([this, identifier, socketAddress, minPort, maxPort, options]() {
-        std::unique_ptr<rtc::AsyncPacketSocket> socket(m_packetSocketFactory->CreateServerTcpSocket(socketAddress, minPort, maxPort, options));
+    callOnRTCNetworkThread([this, identifier, address = RTCNetwork::isolatedCopy(address.value), minPort, maxPort, options]() {
+        std::unique_ptr<rtc::AsyncPacketSocket> socket(m_packetSocketFactory->CreateServerTcpSocket(address, minPort, maxPort, options));
         addSocket(identifier, std::make_unique<LibWebRTCSocketClient>(identifier, *this, WTFMove(socket), LibWebRTCSocketClient::Type::ServerTCP));
     });
 }
 
-void NetworkRTCProvider::createClientTCPSocket(uint64_t identifier, const String& localAddress, const String& remoteAddress, int options)
+void NetworkRTCProvider::createClientTCPSocket(uint64_t identifier, const RTCNetwork::SocketAddress& localAddress, const RTCNetwork::SocketAddress& remoteAddress, int options)
 {
-    rtc::SocketAddress socketLocalAddress;
-    socketLocalAddress.FromString(localAddress.utf8().data());
-
-    rtc::SocketAddress socketRemoteAddress;
-    socketRemoteAddress.FromString(remoteAddress.utf8().data());
-
-    callOnRTCNetworkThread([this, identifier, socketLocalAddress, socketRemoteAddress, options]() {
-        std::unique_ptr<rtc::AsyncPacketSocket> socket(m_packetSocketFactory->CreateClientTcpSocket(socketLocalAddress, socketRemoteAddress, { }, { }, options));
+    callOnRTCNetworkThread([this, identifier, localAddress = RTCNetwork::isolatedCopy(localAddress.value), remoteAddress = RTCNetwork::isolatedCopy(remoteAddress.value), options]() {
+        std::unique_ptr<rtc::AsyncPacketSocket> socket(m_packetSocketFactory->CreateClientTcpSocket(localAddress, remoteAddress, { }, { }, options));
         addSocket(identifier, std::make_unique<LibWebRTCSocketClient>(identifier, *this, WTFMove(socket), LibWebRTCSocketClient::Type::ClientTCP));
     });
 }

Modified: trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCProvider.h (212518 => 212519)


--- trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCProvider.h	2017-02-17 02:40:21 UTC (rev 212518)
+++ trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCProvider.h	2017-02-17 02:52:30 UTC (rev 212519)
@@ -29,6 +29,7 @@
 
 #include "LibWebRTCSocketClient.h"
 #include "NetworkRTCMonitor.h"
+#include "RTCNetwork.h"
 #include <CFNetwork/CFHost.h>
 #include <WebCore/LibWebRTCMacros.h>
 #include <webrtc/base/sigslot.h>
@@ -68,9 +69,9 @@
 private:
     explicit NetworkRTCProvider(NetworkConnectionToWebProcess&);
 
-    void createUDPSocket(uint64_t, const String&, uint16_t, uint16_t);
-    void createClientTCPSocket(uint64_t, const String&, const String&, int);
-    void createServerTCPSocket(uint64_t, const String&, uint16_t minPort, uint16_t maxPort, int);
+    void createUDPSocket(uint64_t, const RTCNetwork::SocketAddress&, uint16_t, uint16_t);
+    void createClientTCPSocket(uint64_t, const RTCNetwork::SocketAddress&, const RTCNetwork::SocketAddress&, int);
+    void createServerTCPSocket(uint64_t, const RTCNetwork::SocketAddress&, uint16_t minPort, uint16_t maxPort, int);
     void createResolver(uint64_t, const String&);
     void stopResolver(uint64_t);
 

Modified: trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCProvider.messages.in (212518 => 212519)


--- trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCProvider.messages.in	2017-02-17 02:40:21 UTC (rev 212518)
+++ trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCProvider.messages.in	2017-02-17 02:52:30 UTC (rev 212519)
@@ -23,9 +23,9 @@
 #if USE(LIBWEBRTC)
 
 messages -> NetworkRTCProvider {
-    CreateUDPSocket(int identifier, String localAddress, uint16_t minPort, uint16_t maxPort)
-    CreateServerTCPSocket(int identifier, String localAddress, uint16_t minPort, uint16_t maxPort, int options)
-    CreateClientTCPSocket(int identifier, String localAddress, String remoteAddress, int options)
+    CreateUDPSocket(int identifier, WebKit::RTCNetwork::SocketAddress localAddress, uint16_t minPort, uint16_t maxPort)
+    CreateServerTCPSocket(int identifier, WebKit::RTCNetwork::SocketAddress localAddress, uint16_t minPort, uint16_t maxPort, int options)
+    CreateClientTCPSocket(int identifier, WebKit::RTCNetwork::SocketAddress localAddress, WebKit::RTCNetwork::SocketAddress remoteAddress, int options)
     CreateResolver(uint64_t identifier, String address)
     StopResolver(uint64_t identifier)
 }

Modified: trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCSocket.cpp (212518 => 212519)


--- trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCSocket.cpp	2017-02-17 02:40:21 UTC (rev 212518)
+++ trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCSocket.cpp	2017-02-17 02:52:30 UTC (rev 212519)
@@ -42,12 +42,10 @@
 {
 }
 
-void NetworkRTCSocket::sendTo(const IPC::DataReference& data, const RTCNetwork::IPAddress& address, uint16_t port, int packetID, int rtpSendtimeExtensionID, String srtpAuth, int64_t srtpPacketIndex, int dscp)
+void NetworkRTCSocket::sendTo(const IPC::DataReference& data, const RTCNetwork::SocketAddress& socketAddress, int packetID, int rtpSendtimeExtensionID, String srtpAuth, int64_t srtpPacketIndex, int dscp)
 {
     auto buffer = WebCore::SharedBuffer::create(data.data(), data.size());
 
-    rtc::SocketAddress socketAddress(address.value, port);
-
     rtc::PacketOptions options;
     options.packet_id = packetID;
     options.packet_time_params.rtp_sendtime_extension_id = rtpSendtimeExtensionID;
@@ -60,7 +58,7 @@
         options.packet_time_params.srtp_auth_tag_len = -1;
     
     m_rtcProvider.callSocket(m_identifier, [buffer = WTFMove(buffer), socketAddress, options](LibWebRTCSocketClient& client) {
-        client.sendTo(buffer.get(), socketAddress, options);
+        client.sendTo(buffer.get(), socketAddress.value, options);
     });
 }
 

Modified: trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCSocket.h (212518 => 212519)


--- trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCSocket.h	2017-02-17 02:40:21 UTC (rev 212518)
+++ trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCSocket.h	2017-02-17 02:52:30 UTC (rev 212519)
@@ -60,7 +60,7 @@
     NetworkRTCSocket(uint64_t, NetworkRTCProvider&);
     void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
 private:
-    void sendTo(const IPC::DataReference&, const RTCNetwork::IPAddress&, uint16_t port, int packetID, int rtpSendtimeExtensionID, String srtpAuth, int64_t srtpPacketIndex, int dscp);
+    void sendTo(const IPC::DataReference&, const RTCNetwork::SocketAddress&, int packetID, int rtpSendtimeExtensionID, String srtpAuth, int64_t srtpPacketIndex, int dscp);
     void close();
     void setOption(int option, int value);
 

Modified: trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCSocket.messages.in (212518 => 212519)


--- trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCSocket.messages.in	2017-02-17 02:40:21 UTC (rev 212518)
+++ trunk/Source/WebKit2/NetworkProcess/webrtc/NetworkRTCSocket.messages.in	2017-02-17 02:52:30 UTC (rev 212519)
@@ -23,7 +23,7 @@
 #if USE(LIBWEBRTC)
 
 messages -> NetworkRTCSocket {
-    void SendTo(IPC::DataReference data, WebKit::RTCNetwork::IPAddress address, uint16_t port, int packetID, int rtpSendtimeExtensionID, String srtpAuth, int64_t srtpPacketIndex, int dscp)
+    void SendTo(IPC::DataReference data, WebKit::RTCNetwork::SocketAddress address, int packetID, int rtpSendtimeExtensionID, String srtpAuth, int64_t srtpPacketIndex, int dscp)
     void Close()
     void SetOption(int option, int value)
 }

Modified: trunk/Source/WebKit2/Shared/RTCNetwork.cpp (212518 => 212519)


--- trunk/Source/WebKit2/Shared/RTCNetwork.cpp	2017-02-17 02:40:21 UTC (rev 212518)
+++ trunk/Source/WebKit2/Shared/RTCNetwork.cpp	2017-02-17 02:52:30 UTC (rev 212519)
@@ -92,6 +92,63 @@
     encoder << IPC::DataReference(reinterpret_cast<const uint8_t*>(&address), sizeof(address));
 }
 
+rtc::SocketAddress RTCNetwork::isolatedCopy(const rtc::SocketAddress& value)
+{
+    rtc::SocketAddress copy;
+    copy.SetPort(value.port());
+    copy.SetScopeID(value.scope_id());
+    copy.SetIP(std::string(value.hostname().data(), value.hostname().size()));
+    if (!value.IsUnresolvedIP())
+        copy.SetResolvedIP(value.ipaddr());
+    return rtc::SocketAddress(copy);
+}
+
+bool RTCNetwork::SocketAddress::decode(IPC::Decoder& decoder, SocketAddress& result)
+{
+    uint16_t port;
+    if (!decoder.decode(port))
+        return false;
+    int scopeId;
+    if (!decoder.decode(scopeId))
+        return false;
+    result.value.SetPort(port);
+    result.value.SetScopeID(scopeId);
+
+    IPC::DataReference hostname;
+    if (!decoder.decode(hostname))
+        return false;
+    result.value.SetIP(std::string(reinterpret_cast<const char*>(hostname.data()), hostname.size()));
+
+    bool isUnresolved;
+    if (!decoder.decode(isUnresolved))
+        return false;
+    if (isUnresolved)
+        return true;
+
+    RTCNetwork::IPAddress ipAddress;
+    if (!decoder.decode(ipAddress))
+        return false;
+    result.value.SetResolvedIP(ipAddress.value);
+    return true;
+}
+
+void RTCNetwork::SocketAddress::encode(IPC::Encoder& encoder) const
+{
+    encoder << value.port();
+    encoder << value.scope_id();
+
+    auto hostname = value.hostname();
+    encoder << IPC::DataReference(reinterpret_cast<const uint8_t*>(hostname.data()), hostname.length());
+
+    encoder << value.IsUnresolvedIP();
+    if (value.IsUnresolvedIP()) {
+        encoder << true;
+        return;
+    }
+    encoder << false;
+    encoder << RTCNetwork::IPAddress(value.ipaddr());
+}
+
 bool RTCNetwork::decode(IPC::Decoder& decoder, RTCNetwork& result)
 {
     IPC::DataReference name, description;

Modified: trunk/Source/WebKit2/Shared/RTCNetwork.h (212518 => 212519)


--- trunk/Source/WebKit2/Shared/RTCNetwork.h	2017-02-17 02:40:21 UTC (rev 212518)
+++ trunk/Source/WebKit2/Shared/RTCNetwork.h	2017-02-17 02:52:30 UTC (rev 212519)
@@ -57,6 +57,18 @@
         rtc::IPAddress value;
     };
 
+    static rtc::SocketAddress isolatedCopy(const rtc::SocketAddress&);
+
+    struct SocketAddress {
+        SocketAddress() = default;
+        explicit SocketAddress(const rtc::SocketAddress& address): value(address) { }
+
+        void encode(IPC::Encoder&) const;
+        static bool decode(IPC::Decoder&, SocketAddress&);
+
+        rtc::SocketAddress value;
+    };
+
     std::string name;
     std::string description;
     IPAddress prefix;

Modified: trunk/Source/WebKit2/WebProcess/Network/webrtc/LibWebRTCSocket.cpp (212518 => 212519)


--- trunk/Source/WebKit2/WebProcess/Network/webrtc/LibWebRTCSocket.cpp	2017-02-17 02:40:21 UTC (rev 212518)
+++ trunk/Source/WebKit2/WebProcess/Network/webrtc/LibWebRTCSocket.cpp	2017-02-17 02:52:30 UTC (rev 212519)
@@ -71,9 +71,9 @@
     return m_remoteAddress;
 }
 
-void LibWebRTCSocket::signalAddressReady(const String& address)
+void LibWebRTCSocket::signalAddressReady(const rtc::SocketAddress& address)
 {
-    m_localAddress.FromString(address.utf8().data());
+    m_localAddress = address;
     m_state = (m_type == Type::ClientTCP) ? STATE_CONNECTED : STATE_BOUND;
     SignalAddressReady(this, m_localAddress);
 }
@@ -136,7 +136,7 @@
     sendOnMainThread([identifier, buffer = WTFMove(buffer), address, options](IPC::Connection& connection) {
         IPC::DataReference data(reinterpret_cast<const uint8_t*>(buffer->data()), buffer->size());
         String srtpAuthKey = authKey(options);
-        Messages::NetworkRTCSocket::SendTo message(data, RTCNetwork::IPAddress(address.ipaddr()), address.port(), options.packet_id, options.packet_time_params.rtp_sendtime_extension_id, srtpAuthKey, options.packet_time_params.srtp_packet_index, options.dscp);
+        Messages::NetworkRTCSocket::SendTo message(data, RTCNetwork::SocketAddress(address), options.packet_id, options.packet_time_params.rtp_sendtime_extension_id, srtpAuthKey, options.packet_time_params.srtp_packet_index, options.dscp);
         connection.send(WTFMove(message), identifier);
     });
     return size;

Modified: trunk/Source/WebKit2/WebProcess/Network/webrtc/LibWebRTCSocket.h (212518 => 212519)


--- trunk/Source/WebKit2/WebProcess/Network/webrtc/LibWebRTCSocket.h	2017-02-17 02:40:21 UTC (rev 212518)
+++ trunk/Source/WebKit2/WebProcess/Network/webrtc/LibWebRTCSocket.h	2017-02-17 02:52:30 UTC (rev 212519)
@@ -66,7 +66,7 @@
     friend class WebRTCSocket;
     void signalReadPacket(const WebCore::SharedBuffer&, rtc::SocketAddress&&, int64_t);
     void signalSentPacket(int, int64_t);
-    void signalAddressReady(const String&);
+    void signalAddressReady(const rtc::SocketAddress&);
     void signalConnect();
     void signalClose(int);
 

Modified: trunk/Source/WebKit2/WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp (212518 => 212519)


--- trunk/Source/WebKit2/WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp	2017-02-17 02:40:21 UTC (rev 212518)
+++ trunk/Source/WebKit2/WebProcess/Network/webrtc/LibWebRTCSocketFactory.cpp	2017-02-17 02:52:30 UTC (rev 212519)
@@ -40,16 +40,13 @@
 uint64_t LibWebRTCSocketFactory::s_uniqueSocketIdentifier = 0;
 uint64_t LibWebRTCSocketFactory::s_uniqueResolverIdentifier = 0;
 
-rtc::AsyncPacketSocket* LibWebRTCSocketFactory::CreateServerTcpSocket(const rtc::SocketAddress& socketAddress, uint16_t minPort, uint16_t maxPort, int options)
+rtc::AsyncPacketSocket* LibWebRTCSocketFactory::CreateServerTcpSocket(const rtc::SocketAddress& address, uint16_t minPort, uint16_t maxPort, int options)
 {
-    auto socket = std::make_unique<LibWebRTCSocket>(*this, ++s_uniqueSocketIdentifier, LibWebRTCSocket::Type::ServerTCP, socketAddress, rtc::SocketAddress());
+    auto socket = std::make_unique<LibWebRTCSocket>(*this, ++s_uniqueSocketIdentifier, LibWebRTCSocket::Type::ServerTCP, address, rtc::SocketAddress());
     m_sockets.set(socket->identifier(), socket.get());
 
-    auto identifier = socket->identifier();
-    auto address = socket->localAddress().ToString();
-    callOnMainThread([identifier, address, minPort, maxPort, options]() {
-        String addressString = String(address.data(), address.length());
-        if (!WebProcess::singleton().networkConnection().connection().send(Messages::NetworkRTCProvider::CreateServerTCPSocket(identifier, addressString, minPort, maxPort, options), 0)) {
+    callOnMainThread([identifier = socket->identifier(), address = RTCNetwork::isolatedCopy(address), minPort, maxPort, options]() {
+        if (!WebProcess::singleton().networkConnection().connection().send(Messages::NetworkRTCProvider::CreateServerTCPSocket(identifier, RTCNetwork::SocketAddress(address), minPort, maxPort, options), 0)) {
             // FIXME: Set error back to socket
             return;
         }
@@ -59,16 +56,13 @@
     return socket.release();
 }
 
-rtc::AsyncPacketSocket* LibWebRTCSocketFactory::CreateUdpSocket(const rtc::SocketAddress& socketAddress, uint16_t minPort, uint16_t maxPort)
+rtc::AsyncPacketSocket* LibWebRTCSocketFactory::CreateUdpSocket(const rtc::SocketAddress& address, uint16_t minPort, uint16_t maxPort)
 {
-    auto socket = std::make_unique<LibWebRTCSocket>(*this, ++s_uniqueSocketIdentifier, LibWebRTCSocket::Type::UDP, socketAddress, rtc::SocketAddress());
+    auto socket = std::make_unique<LibWebRTCSocket>(*this, ++s_uniqueSocketIdentifier, LibWebRTCSocket::Type::UDP, address, rtc::SocketAddress());
     m_sockets.set(socket->identifier(), socket.get());
 
-    auto identifier = socket->identifier();
-    auto address = socket->localAddress().ToString();
-    callOnMainThread([identifier, address, minPort, maxPort]() {
-        String addressString = String(address.data(), address.length());
-        if (!WebProcess::singleton().networkConnection().connection().send(Messages::NetworkRTCProvider::CreateUDPSocket(identifier, addressString, minPort, maxPort), 0)) {
+    callOnMainThread([identifier = socket->identifier(), address = RTCNetwork::isolatedCopy(address), minPort, maxPort]() {
+        if (!WebProcess::singleton().networkConnection().connection().send(Messages::NetworkRTCProvider::CreateUDPSocket(identifier, RTCNetwork::SocketAddress(address), minPort, maxPort), 0)) {
             // FIXME: Set error back to socket
             return;
         }
@@ -76,19 +70,14 @@
     return socket.release();
 }
 
-rtc::AsyncPacketSocket* LibWebRTCSocketFactory::CreateClientTcpSocket(const rtc::SocketAddress& localSocketAddress, const rtc::SocketAddress& remoteSocketAddress, const rtc::ProxyInfo&, const std::string&, int options)
+rtc::AsyncPacketSocket* LibWebRTCSocketFactory::CreateClientTcpSocket(const rtc::SocketAddress& localAddress, const rtc::SocketAddress& remoteAddress, const rtc::ProxyInfo&, const std::string&, int options)
 {
-    auto socket = std::make_unique<LibWebRTCSocket>(*this, ++s_uniqueSocketIdentifier, LibWebRTCSocket::Type::ClientTCP, localSocketAddress, remoteSocketAddress);
+    auto socket = std::make_unique<LibWebRTCSocket>(*this, ++s_uniqueSocketIdentifier, LibWebRTCSocket::Type::ClientTCP, localAddress, remoteAddress);
     socket->setState(LibWebRTCSocket::STATE_CONNECTING);
     m_sockets.set(socket->identifier(), socket.get());
 
-    auto identifier = socket->identifier();
-    auto localAddress = socket->localAddress().ToString();
-    auto remoteAddress = socket->remoteAddress().ToString();
-    callOnMainThread([identifier, localAddress, remoteAddress, options]() {
-        String localAddressString = String(localAddress.data(), localAddress.length());
-        String remoteAddressString = String(remoteAddress.data(), remoteAddress.length());
-        if (!WebProcess::singleton().networkConnection().connection().send(Messages::NetworkRTCProvider::CreateClientTCPSocket(identifier, localAddressString, remoteAddressString, options), 0)) {
+    callOnMainThread([identifier = socket->identifier(), localAddress = RTCNetwork::isolatedCopy(localAddress), remoteAddress = RTCNetwork::isolatedCopy(remoteAddress), options]() {
+        if (!WebProcess::singleton().networkConnection().connection().send(Messages::NetworkRTCProvider::CreateClientTCPSocket(identifier, RTCNetwork::SocketAddress(localAddress), RTCNetwork::SocketAddress(remoteAddress), options), 0)) {
             // FIXME: Set error back to socket
             return;
         }

Modified: trunk/Source/WebKit2/WebProcess/Network/webrtc/WebRTCSocket.cpp (212518 => 212519)


--- trunk/Source/WebKit2/WebProcess/Network/webrtc/WebRTCSocket.cpp	2017-02-17 02:40:21 UTC (rev 212518)
+++ trunk/Source/WebKit2/WebProcess/Network/webrtc/WebRTCSocket.cpp	2017-02-17 02:52:30 UTC (rev 212519)
@@ -54,10 +54,10 @@
 {
 }
 
-void WebRTCSocket::signalAddressReady(const String& address)
+void WebRTCSocket::signalAddressReady(const RTCNetwork::SocketAddress& address)
 {
     signalOnNetworkThread(m_factory, m_identifier, [address](LibWebRTCSocket& socket) {
-        socket.signalAddressReady(address);
+        socket.signalAddressReady(address.value);
     });
 }
 

Modified: trunk/Source/WebKit2/WebProcess/Network/webrtc/WebRTCSocket.h (212518 => 212519)


--- trunk/Source/WebKit2/WebProcess/Network/webrtc/WebRTCSocket.h	2017-02-17 02:40:21 UTC (rev 212518)
+++ trunk/Source/WebKit2/WebProcess/Network/webrtc/WebRTCSocket.h	2017-02-17 02:52:30 UTC (rev 212519)
@@ -52,7 +52,7 @@
 private:
     void signalReadPacket(const IPC::DataReference&, const RTCNetwork::IPAddress&, uint16_t port, int64_t);
     void signalSentPacket(int, int64_t);
-    void signalAddressReady(const String&);
+    void signalAddressReady(const RTCNetwork::SocketAddress&);
     void signalConnect();
     void signalClose(int);
     

Modified: trunk/Source/WebKit2/WebProcess/Network/webrtc/WebRTCSocket.messages.in (212518 => 212519)


--- trunk/Source/WebKit2/WebProcess/Network/webrtc/WebRTCSocket.messages.in	2017-02-17 02:40:21 UTC (rev 212518)
+++ trunk/Source/WebKit2/WebProcess/Network/webrtc/WebRTCSocket.messages.in	2017-02-17 02:52:30 UTC (rev 212519)
@@ -25,7 +25,7 @@
 messages -> WebRTCSocket {
     SignalReadPacket(IPC::DataReference data, WebKit::RTCNetwork::IPAddress address, uint16_t port, int64_t timestamp)
     SignalSentPacket(int packetSize, int64_t timestamp)
-    SignalAddressReady(String address)
+    SignalAddressReady(WebKit::RTCNetwork::SocketAddress address)
     SignalConnect()
     SignalClose(int error)
 }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to