19#include <dhtnet/ip_utils.h>
28#include <pjnath/stun_config.h>
60 listener->destroy(listener);
74 std::shared_ptr<dht::crypto::Certificate>
peerCert {};
112 inline std::string_view
deviceId()
const {
return deviceId_; }
114 inline const std::weak_ptr<SIPAccountBase>&
getAccount()
const {
return account_; }
122 struct TransportDeleter
124 void operator()(
pjsip_transport* t)
const noexcept { deleteTransport(t); }
127 std::unique_ptr<pjsip_transport, TransportDeleter> transport_;
128 std::shared_ptr<TlsListener> tlsListener_;
129 std::mutex stateListenersMutex_;
130 std::map<uintptr_t, SipTransportStateCallback> stateListeners_;
131 std::weak_ptr<SIPAccountBase> account_ {};
133 bool connected_ {
false};
134 std::string deviceId_ {};
156 std::shared_ptr<SipTransport>
getTlsTransport(
const std::shared_ptr<TlsListener>&,
157 const dhtnet::IpAddr& remote,
163 const std::shared_ptr<dhtnet::ChannelSocket>& socket,
182 std::shared_ptr<SipTransport> createUdpTransport(
const dhtnet::IpAddr&);
187 std::map<pjsip_transport*, std::weak_ptr<SipTransport>> transports_ {};
188 std::mutex transportMapMutex_ {};
194 std::map<dhtnet::IpAddr, pjsip_transport*> udpTransports_;
197 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, const 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)