29#include <pjnath/stun_config.h>
33#include <condition_variable>
64 listener->destroy(listener);
78 std::shared_ptr<dht::crypto::Certificate>
peerCert {};
118 inline std::string_view
deviceId()
const {
return deviceId_; }
120 inline const std::weak_ptr<SIPAccountBase>&
getAccount()
const {
return account_; }
129 std::unique_ptr<
pjsip_transport,
decltype(deleteTransport)&> transport_;
130 std::shared_ptr<TlsListener> tlsListener_;
131 std::mutex stateListenersMutex_;
132 std::map<uintptr_t, SipTransportStateCallback> stateListeners_;
133 std::weak_ptr<SIPAccountBase> account_ {};
135 bool connected_ {
false};
136 std::string deviceId_ {};
158 std::shared_ptr<SipTransport>
getTlsTransport(
const std::shared_ptr<TlsListener>&,
159 const dhtnet::IpAddr& remote,
165 const std::shared_ptr<SIPAccountBase>&
account,
166 const std::shared_ptr<dhtnet::ChannelSocket>& socket,
187 std::shared_ptr<SipTransport> createUdpTransport(
const dhtnet::IpAddr&);
192 std::map<pjsip_transport*, std::weak_ptr<SipTransport>> transports_ {};
193 std::mutex transportMapMutex_ {};
199 std::map<dhtnet::IpAddr, pjsip_transport*> udpTransports_;
202 std::atomic_bool isDestroying_ {
false};
Manages the transports and receive callbacks from PJSIP.
std::shared_ptr< SipTransport > addTransport(pjsip_transport *)
std::shared_ptr< SipTransport > getChanneledTransport(const std::shared_ptr< SIPAccountBase > &account, const std::shared_ptr< dhtnet::ChannelSocket > &socket, onShutdownCb &&cb)
void transportStateChanged(pjsip_transport *, pjsip_transport_state, const pjsip_transport_state_info *)
std::shared_ptr< SipTransport > getTlsTransport(const std::shared_ptr< TlsListener > &, const dhtnet::IpAddr &remote, const std::string &remote_name={})
std::shared_ptr< TlsListener > getTlsListener(const dhtnet::IpAddr &, const pjsip_tls_setting *)
void shutdown()
Start graceful shutdown procedure for all transports.
std::shared_ptr< SipTransport > getUdpTransport(const dhtnet::IpAddr &)
SIP transport wraps pjsip_transport.
bool removeStateListener(uintptr_t lid)
void addStateListener(uintptr_t lid, SipTransportStateCallback cb)
void setDeviceId(const std::string &deviceId)
void stateCallback(pjsip_transport_state state, const pjsip_transport_state_info *info)
const std::weak_ptr< SIPAccountBase > & getAccount() const
std::string_view deviceId() const
void setAccount(const std::shared_ptr< SIPAccountBase > &account)
static const char * stateToStr(pjsip_transport_state state)
const TlsInfos & getTlsInfos() const
static bool isAlive(pjsip_transport_state state)
bool isConnected() const noexcept
Only makes sense for connection-oriented transports.
void emitSignal(Args... args)
std::function< void(pjsip_transport_state, const pjsip_transport_state_info *)> SipTransportStateCallback
std::function< void(void)> onShutdownCb
Simple macro to hide class' copy constructor and assignment operator.
#define NON_COPYABLE(ClassName)
pj_ssl_cert_verify_flag_t verifyStatus
std::shared_ptr< dht::crypto::Certificate > peerCert
TlsListener(pjsip_tpfactory *f)