diff --git a/bin/jni/callmanager.i b/bin/jni/callmanager.i index 0a38464a2a2f6ef2cd7ada4309c7880e70013a35..a66328afd5711cec57a97af621a046ade8375359 100644 --- a/bin/jni/callmanager.i +++ b/bin/jni/callmanager.i @@ -47,6 +47,7 @@ public: virtual void recordStateChange(const std::string& call_id, int state){} virtual void onRtcpReportReceived(const std::string& call_id, const std::map<std::string, int>& stats){} virtual void peerHold(const std::string& call_id, bool holding){} + virtual void connectionUpdate(const std::string& id, int state){} }; @@ -132,4 +133,5 @@ public: virtual void recordStateChange(const std::string& call_id, int state){} virtual void onRtcpReportReceived(const std::string& call_id, const std::map<std::string, int>& stats){} virtual void peerHold(const std::string& call_id, bool holding){} + virtual void connectionUpdate(const std::string& id, int state){} }; diff --git a/bin/jni/jni_interface.i b/bin/jni/jni_interface.i index 463a8b4bd52cfd13fae2265af8d9627c94b7d74f..59007e6f2473263729a3baf339635c8f612e68b5 100644 --- a/bin/jni/jni_interface.i +++ b/bin/jni/jni_interface.i @@ -237,7 +237,8 @@ void init(ConfigurationCallback* confM, Callback* callM, PresenceCallback* presM exportable_callback<CallSignal::ConferenceRemoved>(bind(&Callback::conferenceRemoved, callM, _1)), exportable_callback<CallSignal::RecordingStateChanged>(bind(&Callback::recordingStateChanged, callM, _1, _2)), exportable_callback<CallSignal::RtcpReportReceived>(bind(&Callback::onRtcpReportReceived, callM, _1, _2)), - exportable_callback<CallSignal::PeerHold>(bind(&Callback::peerHold, callM, _1, _2)) + exportable_callback<CallSignal::PeerHold>(bind(&Callback::peerHold, callM, _1, _2)), + exportable_callback<CallSignal::ConnectionUpdate>(bind(&Callback::connectionUpdate, callM, _1, _2)) }; // Configuration event handlers diff --git a/src/client/ring_signal.cpp b/src/client/ring_signal.cpp index 8e11d6c677724cfd58f2914fc877349a1f288fe4..7aa50b41844c916f56244a2f6dccff2d6bae2b50 100644 --- a/src/client/ring_signal.cpp +++ b/src/client/ring_signal.cpp @@ -47,6 +47,7 @@ getSignalHandlers() exported_callback<DRing::CallSignal::VideoMuted>(), exported_callback<DRing::CallSignal::AudioMuted>(), exported_callback<DRing::CallSignal::SmartInfo>(), + exported_callback<DRing::CallSignal::ConnectionUpdate>(), /* Configuration */ exported_callback<DRing::ConfigurationSignal::VolumeChanged>(), diff --git a/src/dring/callmanager_interface.h b/src/dring/callmanager_interface.h index 19c1b5a54439fb5bfbf0289bb08e597afd7a4e49..dd60596032f4cddca64a99fe3f319e9068c286fe 100644 --- a/src/dring/callmanager_interface.h +++ b/src/dring/callmanager_interface.h @@ -185,6 +185,10 @@ struct DRING_PUBLIC CallSignal { constexpr static const char* name = "SmartInfo"; using cb_type = void(const std::map<std::string, std::string>&); }; + struct DRING_PUBLIC ConnectionUpdate { + constexpr static const char* name = "ConnectionUpdate"; + using cb_type = void(const std::string&, int); + }; }; } // namespace DRing diff --git a/src/ice_transport.cpp b/src/ice_transport.cpp index 0612bc3d0be399232e403c440a8c6ab188d3a519..2cbeaae473bcce88ce6672c314693aa46141141a 100644 --- a/src/ice_transport.cpp +++ b/src/ice_transport.cpp @@ -25,6 +25,7 @@ #include "manager.h" #include "upnp/upnp_control.h" #include "transport/peer_channel.h" +#include "dring/callmanager_interface.h" #include <pjlib.h> @@ -387,6 +388,8 @@ IceTransport::Impl::~Impl() if (config_.stun_cfg.timer_heap) pj_timer_heap_destroy(config_.stun_cfg.timer_heap); + + emitSignal<DRing::CallSignal::ConnectionUpdate>(std::to_string((uintptr_t)this), 2); } bool @@ -919,6 +922,8 @@ IceTransport::start(const Attribute& rem_attrs, const std::vector<IceCandidate>& pimpl_->is_stopped_ = true; return false; } + + emitSignal<DRing::CallSignal::ConnectionUpdate>(std::to_string((uintptr_t)pimpl_.get()), 0); return true; } @@ -952,6 +957,8 @@ IceTransport::start(const SDP& sdp) pimpl_->is_stopped_ = true; return false; } + + emitSignal<DRing::CallSignal::ConnectionUpdate>(std::to_string((uintptr_t)pimpl_.get()), 0); return true; }