#pragma once
#if ENABLE(WEB_RTC)
#include <WebCore/DocumentIdentifier.h>
#include <WebCore/LibWebRTCProvider.h>
#include <wtf/Expected.h>
#include <wtf/Forward.h>
#include <wtf/HashMap.h>
namespace IPC {
class Connection;
class Decoder;
}
namespace WebKit {
class WebMDNSRegister {
public:
WebMDNSRegister() = default;
void unregisterMDNSNames(uint64_t documentIdentifier);
void registerMDNSName(PAL::SessionID, uint64_t documentIdentifier, const String& ipAddress, CompletionHandler<void(WebCore::LibWebRTCProvider::MDNSNameOrError&&)>&&);
void resolveMDNSName(PAL::SessionID, const String& name, CompletionHandler<void(WebCore::LibWebRTCProvider::IPAddressOrError&&)>&&);
void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
private:
void finishedRegisteringMDNSName(uint64_t, WebCore::LibWebRTCProvider::MDNSNameOrError&&);
void finishedResolvingMDNSName(uint64_t, WebCore::LibWebRTCProvider::IPAddressOrError&&);
struct PendingRegistration {
CompletionHandler<void(WebCore::LibWebRTCProvider::MDNSNameOrError&&)> callback;
WebCore::DocumentIdentifier documentIdentifier;
String ipAddress;
};
HashMap<uint64_t, PendingRegistration> m_pendingRegistrations;
HashMap<uint64_t, CompletionHandler<void(WebCore::LibWebRTCProvider::IPAddressOrError&&)>> m_pendingResolutions;
uint64_t m_pendingRequestsIdentifier { 0 };
HashMap<WebCore::DocumentIdentifier, HashMap<String, String>> m_registeringDocuments;
};
}
#endif // ENABLE(WEB_RTC)