LibWebRTCSocketFactory.h [plain text]
#pragma once
#if USE(LIBWEBRTC)
#include "LibWebRTCResolver.h"
#include "LibWebRTCSocket.h"
#include <WebCore/LibWebRTCMacros.h>
#include <WebCore/LibWebRTCSocketIdentifier.h>
#include <webrtc/rtc_base/net_helpers.h>
#include <webrtc/api/packet_socket_factory.h>
#include <wtf/Deque.h>
#include <wtf/Function.h>
#include <wtf/HashMap.h>
namespace WebKit {
class LibWebRTCNetwork;
class LibWebRTCSocket;
class LibWebRTCSocketFactory {
public:
LibWebRTCSocketFactory() = default;
void addSocket(LibWebRTCSocket&);
void removeSocket(LibWebRTCSocket&);
LibWebRTCSocket* socket(WebCore::LibWebRTCSocketIdentifier identifier) { return m_sockets.get(identifier); }
void forSocketInGroup(const void* socketGroup, const Function<void(LibWebRTCSocket&)>&);
rtc::AsyncPacketSocket* createUdpSocket(const void* socketGroup, const rtc::SocketAddress&, uint16_t minPort, uint16_t maxPort);
rtc::AsyncPacketSocket* createServerTcpSocket(const void* socketGroup, const rtc::SocketAddress&, uint16_t minPort, uint16_t maxPort, int options);
rtc::AsyncPacketSocket* createClientTcpSocket(const void* socketGroup, const rtc::SocketAddress& localAddress, const rtc::SocketAddress& remoteAddress, String&& userAgent, const rtc::PacketSocketTcpOptions&);
rtc::AsyncPacketSocket* createNewConnectionSocket(LibWebRTCSocket&, WebCore::LibWebRTCSocketIdentifier newConnectionSocketIdentifier, const rtc::SocketAddress&);
LibWebRTCResolver* resolver(LibWebRTCResolverIdentifier identifier) { return m_resolvers.get(identifier); }
std::unique_ptr<LibWebRTCResolver> takeResolver(LibWebRTCResolverIdentifier identifier) { return m_resolvers.take(identifier); }
rtc::AsyncResolverInterface* createAsyncResolver();
void disableNonLocalhostConnections() { m_disableNonLocalhostConnections = true; }
void setConnection(RefPtr<IPC::Connection>&&);
IPC::Connection* connection();
private:
HashMap<WebCore::LibWebRTCSocketIdentifier, LibWebRTCSocket*> m_sockets;
HashMap<LibWebRTCResolverIdentifier, std::unique_ptr<LibWebRTCResolver>> m_resolvers;
bool m_disableNonLocalhostConnections { false };
RefPtr<IPC::Connection> m_connection;
Deque<Function<void(IPC::Connection&)>> m_pendingMessageTasks;
};
}
#endif // USE(LIBWEBRTC)