PeerConnectionBackend.h [plain text]
#ifndef PeerConnectionBackend_h
#define PeerConnectionBackend_h
#if ENABLE(WEB_RTC)
#include "JSDOMPromise.h"
#include "PeerConnectionStates.h"
namespace WebCore {
class DOMError;
class Event;
class MediaStream;
class MediaStreamTrack;
class PeerConnectionBackend;
class RTCAnswerOptions;
class RTCConfiguration;
class RTCIceCandidate;
class RTCOfferOptions;
class RTCRtpReceiver;
class RTCRtpSender;
class RTCRtpSenderClient;
class RTCRtpTransceiver;
class RTCSessionDescription;
class RTCStatsResponse;
class ScriptExecutionContext;
namespace PeerConnection {
typedef DOMPromise<RTCSessionDescription> SessionDescriptionPromise;
typedef DOMPromise<std::nullptr_t> VoidPromise;
typedef DOMPromise<RTCStatsResponse> StatsPromise;
}
class PeerConnectionBackendClient {
public:
virtual const Vector<RefPtr<RTCRtpTransceiver>>& getTransceivers() const = 0;
virtual RTCRtpSenderClient& senderClient() = 0;
virtual void fireEvent(Event&) = 0;
virtual void addTransceiver(RefPtr<RTCRtpTransceiver>&&) = 0;
virtual void setSignalingState(PeerConnectionStates::SignalingState) = 0;
virtual void updateIceGatheringState(PeerConnectionStates::IceGatheringState) = 0;
virtual void updateIceConnectionState(PeerConnectionStates::IceConnectionState) = 0;
virtual void scheduleNegotiationNeededEvent() = 0;
virtual ScriptExecutionContext* scriptExecutionContext() const = 0;
virtual PeerConnectionStates::SignalingState internalSignalingState() const = 0;
virtual PeerConnectionStates::IceGatheringState internalIceGatheringState() const = 0;
virtual PeerConnectionStates::IceConnectionState internalIceConnectionState() const = 0;
virtual ~PeerConnectionBackendClient() { }
};
typedef std::unique_ptr<PeerConnectionBackend> (*CreatePeerConnectionBackend)(PeerConnectionBackendClient*);
class PeerConnectionBackend {
public:
WEBCORE_EXPORT static CreatePeerConnectionBackend create;
virtual ~PeerConnectionBackend() { }
virtual void createOffer(RTCOfferOptions&, PeerConnection::SessionDescriptionPromise&&) = 0;
virtual void createAnswer(RTCAnswerOptions&, PeerConnection::SessionDescriptionPromise&&) = 0;
virtual void setLocalDescription(RTCSessionDescription&, PeerConnection::VoidPromise&&) = 0;
virtual RefPtr<RTCSessionDescription> localDescription() const = 0;
virtual RefPtr<RTCSessionDescription> currentLocalDescription() const = 0;
virtual RefPtr<RTCSessionDescription> pendingLocalDescription() const = 0;
virtual void setRemoteDescription(RTCSessionDescription&, PeerConnection::VoidPromise&&) = 0;
virtual RefPtr<RTCSessionDescription> remoteDescription() const = 0;
virtual RefPtr<RTCSessionDescription> currentRemoteDescription() const = 0;
virtual RefPtr<RTCSessionDescription> pendingRemoteDescription() const = 0;
virtual void setConfiguration(RTCConfiguration&) = 0;
virtual void addIceCandidate(RTCIceCandidate&, PeerConnection::VoidPromise&&) = 0;
virtual void getStats(MediaStreamTrack*, PeerConnection::StatsPromise&&) = 0;
virtual Vector<RefPtr<MediaStream>> getRemoteStreams() const = 0;
virtual RefPtr<RTCRtpReceiver> createReceiver(const String& transceiverMid, const String& trackKind, const String& trackId) = 0;
virtual void replaceTrack(RTCRtpSender&, RefPtr<MediaStreamTrack>&&, PeerConnection::VoidPromise&&) = 0;
virtual void stop() = 0;
virtual bool isNegotiationNeeded() const = 0;
virtual void markAsNeedingNegotiation() = 0;
virtual void clearNegotiationNeededState() = 0;
};
}
#endif // ENABLE(WEB_RTC)
#endif // PeerConnectionBackend_h