MediaEndpointPeerConnection.h [plain text]
#pragma once
#if ENABLE(WEB_RTC)
#include "MediaEndpoint.h"
#include "PeerConnectionBackend.h"
#include "RTCSessionDescription.h"
#include <wtf/Function.h>
namespace WebCore {
class MediaEndpointSessionDescription;
class SDPProcessor;
class MediaEndpointPeerConnection final : public PeerConnectionBackend, public MediaEndpointClient {
public:
WEBCORE_EXPORT explicit MediaEndpointPeerConnection(RTCPeerConnection&);
private:
RefPtr<RTCSessionDescription> localDescription() const final;
RefPtr<RTCSessionDescription> currentLocalDescription() const final;
RefPtr<RTCSessionDescription> pendingLocalDescription() const final;
RefPtr<RTCSessionDescription> remoteDescription() const final;
RefPtr<RTCSessionDescription> currentRemoteDescription() const final;
RefPtr<RTCSessionDescription> pendingRemoteDescription() const final;
bool setConfiguration(MediaEndpointConfiguration&&) final;
void getStats(MediaStreamTrack*, Ref<DeferredPromise>&&) final;
Vector<RefPtr<MediaStream>> getRemoteStreams() const final;
Ref<RTCRtpReceiver> createReceiver(const String& transceiverMid, const String& trackKind, const String& trackId) final;
void replaceTrack(RTCRtpSender&, Ref<MediaStreamTrack>&&, DOMPromiseDeferred<void>&&) final;
void emulatePlatformEvent(const String& action) final;
void runTask(Function<void ()>&&);
void startRunningTasks();
void doCreateOffer(RTCOfferOptions&&) final;
void doCreateAnswer(RTCAnswerOptions&&) final;
void doSetLocalDescription(RTCSessionDescription&) final;
void doSetRemoteDescription(RTCSessionDescription&) final;
void doAddIceCandidate(RTCIceCandidate&) final;
void doStop() final;
void createOfferTask(const RTCOfferOptions&);
void createAnswerTask(const RTCAnswerOptions&);
void setLocalDescriptionTask(RefPtr<RTCSessionDescription>&&);
void setRemoteDescriptionTask(RefPtr<RTCSessionDescription>&&);
void addIceCandidateTask(RTCIceCandidate&);
void replaceTrackTask(RTCRtpSender&, const String& mid, Ref<MediaStreamTrack>&&, DOMPromiseDeferred<void>&);
bool localDescriptionTypeValidForState(RTCSdpType) const;
bool remoteDescriptionTypeValidForState(RTCSdpType) const;
MediaEndpointSessionDescription* internalLocalDescription() const;
MediaEndpointSessionDescription* internalRemoteDescription() const;
RefPtr<RTCSessionDescription> createRTCSessionDescription(MediaEndpointSessionDescription*) const;
void gotDtlsFingerprint(const String& fingerprint, const String& fingerprintFunction) final;
void gotIceCandidate(const String& mid, IceCandidate&&) final;
void doneGatheringCandidates(const String& mid) final;
void iceTransportStateChanged(const String& mid, RTCIceTransportState) final;
std::unique_ptr<RTCDataChannelHandler> createDataChannelHandler(const String&, const RTCDataChannelInit&) final;
std::unique_ptr<MediaEndpoint> m_mediaEndpoint;
Function<void ()> m_initialDeferredTask;
std::unique_ptr<SDPProcessor> m_sdpProcessor;
Vector<MediaPayload> m_defaultAudioPayloads;
Vector<MediaPayload> m_defaultVideoPayloads;
String m_cname;
String m_iceUfrag;
String m_icePassword;
String m_dtlsFingerprint;
String m_dtlsFingerprintFunction;
unsigned m_sdpOfferSessionVersion { 0 };
unsigned m_sdpAnswerSessionVersion { 0 };
RefPtr<MediaEndpointSessionDescription> m_currentLocalDescription;
RefPtr<MediaEndpointSessionDescription> m_pendingLocalDescription;
RefPtr<MediaEndpointSessionDescription> m_currentRemoteDescription;
RefPtr<MediaEndpointSessionDescription> m_pendingRemoteDescription;
HashMap<String, RefPtr<MediaStream>> m_remoteStreamMap;
};
}
#endif // ENABLE(WEB_RTC)