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)
}