123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- /**
- * Copyright (c) 2019 Paul-Louis Ageneau
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/.
- */
- #ifndef RTC_PEER_CONNECTION_H
- #define RTC_PEER_CONNECTION_H
- #include "candidate.hpp"
- #include "common.hpp"
- #include "configuration.hpp"
- #include "datachannel.hpp"
- #include "description.hpp"
- #include "reliability.hpp"
- #include "track.hpp"
- #include <chrono>
- #include <functional>
- namespace rtc {
- namespace impl {
- struct PeerConnection;
- }
- struct RTC_CPP_EXPORT DataChannelInit {
- Reliability reliability = {};
- bool negotiated = false;
- optional<uint16_t> id = nullopt;
- string protocol = "";
- };
- struct RTC_CPP_EXPORT LocalDescriptionInit {
- optional<string> iceUfrag;
- optional<string> icePwd;
- };
- class RTC_CPP_EXPORT PeerConnection final : CheshireCat<impl::PeerConnection> {
- public:
- enum class State : int {
- New = RTC_NEW,
- Connecting = RTC_CONNECTING,
- Connected = RTC_CONNECTED,
- Disconnected = RTC_DISCONNECTED,
- Failed = RTC_FAILED,
- Closed = RTC_CLOSED
- };
- enum class IceState : int {
- New = RTC_ICE_NEW,
- Checking = RTC_ICE_CHECKING,
- Connected = RTC_ICE_CONNECTED,
- Completed = RTC_ICE_COMPLETED,
- Failed = RTC_ICE_FAILED,
- Disconnected = RTC_ICE_DISCONNECTED,
- Closed = RTC_ICE_CLOSED
- };
- enum class GatheringState : int {
- New = RTC_GATHERING_NEW,
- InProgress = RTC_GATHERING_INPROGRESS,
- Complete = RTC_GATHERING_COMPLETE
- };
- enum class SignalingState : int {
- Stable = RTC_SIGNALING_STABLE,
- HaveLocalOffer = RTC_SIGNALING_HAVE_LOCAL_OFFER,
- HaveRemoteOffer = RTC_SIGNALING_HAVE_REMOTE_OFFER,
- HaveLocalPranswer = RTC_SIGNALING_HAVE_LOCAL_PRANSWER,
- HaveRemotePranswer = RTC_SIGNALING_HAVE_REMOTE_PRANSWER,
- };
- PeerConnection();
- PeerConnection(Configuration config);
- ~PeerConnection();
- void close();
- const Configuration *config() const;
- State state() const;
- IceState iceState() const;
- GatheringState gatheringState() const;
- SignalingState signalingState() const;
- bool negotiationNeeded() const;
- bool hasMedia() const;
- optional<Description> localDescription() const;
- optional<Description> remoteDescription() const;
- size_t remoteMaxMessageSize() const;
- optional<string> localAddress() const;
- optional<string> remoteAddress() const;
- uint16_t maxDataChannelId() const;
- bool getSelectedCandidatePair(Candidate *local, Candidate *remote);
- void setLocalDescription(Description::Type type = Description::Type::Unspec, LocalDescriptionInit init = {});
- void gatherLocalCandidates(std::vector<IceServer> additionalIceServers = {});
- void setRemoteDescription(Description description);
- void addRemoteCandidate(Candidate candidate);
- // For specific use cases only
- Description createOffer();
- Description createAnswer();
- void setMediaHandler(shared_ptr<MediaHandler> handler);
- shared_ptr<MediaHandler> getMediaHandler();
- [[nodiscard]] shared_ptr<DataChannel> createDataChannel(string label,
- DataChannelInit init = {});
- void onDataChannel(std::function<void(std::shared_ptr<DataChannel> dataChannel)> callback);
- [[nodiscard]] shared_ptr<Track> addTrack(Description::Media description);
- void onTrack(std::function<void(std::shared_ptr<Track> track)> callback);
- void onLocalDescription(std::function<void(Description description)> callback);
- void onLocalCandidate(std::function<void(Candidate candidate)> callback);
- void onStateChange(std::function<void(State state)> callback);
- void onIceStateChange(std::function<void(IceState state)> callback);
- void onGatheringStateChange(std::function<void(GatheringState state)> callback);
- void onSignalingStateChange(std::function<void(SignalingState state)> callback);
- void resetCallbacks();
- CertificateFingerprint remoteFingerprint();
- // Stats
- void clearStats();
- size_t bytesSent();
- size_t bytesReceived();
- optional<std::chrono::milliseconds> rtt();
- };
- RTC_CPP_EXPORT std::ostream &operator<<(std::ostream &out, PeerConnection::State state);
- RTC_CPP_EXPORT std::ostream &operator<<(std::ostream &out, PeerConnection::IceState state);
- RTC_CPP_EXPORT std::ostream &operator<<(std::ostream &out, PeerConnection::GatheringState state);
- RTC_CPP_EXPORT std::ostream &operator<<(std::ostream &out, PeerConnection::SignalingState state);
- } // namespace rtc
- #endif
|