![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /proc/thread-self/root/usr/local/lib/node_modules/mediasoup/worker/include/RTC/ |
Upload File : |
#ifndef MS_RTC_ICE_SERVER_HPP #define MS_RTC_ICE_SERVER_HPP #include "common.hpp" #include "RTC/StunPacket.hpp" #include "RTC/TransportTuple.hpp" #include <list> #include <string> namespace RTC { class IceServer { public: enum class IceState { NEW = 1, CONNECTED, COMPLETED, DISCONNECTED }; public: class Listener { public: virtual ~Listener() = default; public: /** * These callbacks are guaranteed to be called before ProcessStunPacket() * returns, so the given pointers are still usable. */ virtual void OnIceServerSendStunPacket( const RTC::IceServer* iceServer, const RTC::StunPacket* packet, RTC::TransportTuple* tuple) = 0; virtual void OnIceServerSelectedTuple( const RTC::IceServer* iceServer, RTC::TransportTuple* tuple) = 0; virtual void OnIceServerConnected(const RTC::IceServer* iceServer) = 0; virtual void OnIceServerCompleted(const RTC::IceServer* iceServer) = 0; virtual void OnIceServerDisconnected(const RTC::IceServer* iceServer) = 0; }; public: IceServer(Listener* listener, const std::string& usernameFragment, const std::string& password); public: void ProcessStunPacket(RTC::StunPacket* packet, RTC::TransportTuple* tuple); const std::string& GetUsernameFragment() const { return this->usernameFragment; } const std::string& GetPassword() const { return this->password; } IceState GetState() const { return this->state; } RTC::TransportTuple* GetSelectedTuple() const { return this->selectedTuple; } void SetUsernameFragment(const std::string& usernameFragment) { this->oldUsernameFragment = this->usernameFragment; this->usernameFragment = usernameFragment; } void SetPassword(const std::string& password) { this->oldPassword = this->password; this->password = password; } bool IsValidTuple(const RTC::TransportTuple* tuple) const; void RemoveTuple(RTC::TransportTuple* tuple); // This should be just called in 'connected' or completed' state // and the given tuple must be an already valid tuple. void ForceSelectedTuple(const RTC::TransportTuple* tuple); private: void HandleTuple(RTC::TransportTuple* tuple, bool hasUseCandidate); /** * Store the given tuple and return its stored address. */ RTC::TransportTuple* AddTuple(RTC::TransportTuple* tuple); /** * If the given tuple exists return its stored address, nullptr otherwise. */ RTC::TransportTuple* HasTuple(const RTC::TransportTuple* tuple) const; /** * Set the given tuple as the selected tuple. * NOTE: The given tuple MUST be already stored within the list. */ void SetSelectedTuple(RTC::TransportTuple* storedTuple); private: // Passed by argument. Listener* listener{ nullptr }; // Others. std::string usernameFragment; std::string password; std::string oldUsernameFragment; std::string oldPassword; IceState state{ IceState::NEW }; std::list<RTC::TransportTuple> tuples; RTC::TransportTuple* selectedTuple{ nullptr }; }; } // namespace RTC #endif