diff --git a/src/call.cpp b/src/call.cpp index 5ffb2a685aebe9a0ab4bbb7f5c7a9ecf8cbfdda1..bfb98328f5f72275f4558ed772502e63c2b9f166 100644 --- a/src/call.cpp +++ b/src/call.cpp @@ -46,7 +46,10 @@ Call::Call(Account& account, const std::string& id, Call::CallType type) { addStateListener([this](UNUSED Call::CallState call_state, UNUSED Call::ConnectionState cnx_state, - UNUSED int code) { checkPendingIM(); }); + UNUSED int code) { + checkPendingIM(); + checkAudio(); + }); time(×tamp_start_); account_.attachCall(id_); @@ -499,4 +502,20 @@ Call::checkPendingIM() } } +/** + * Handle tones for RINGING and BUSY calls + */ +void +Call::checkAudio() +{ + using namespace DRing::Call; + + auto state = getStateStr(); + if (state == StateEvent::RINGING) { + Manager::instance().peerRingingCall(*this); + } else if (state == StateEvent::BUSY) { + Manager::instance().callBusy(*this); + } +} + } // namespace ring diff --git a/src/call.h b/src/call.h index b9da627dc11c47a1d6319b90103f122cb8bba1b6..fa8ad569691e63c7c1be06d1f6310a2b84b2b997 100644 --- a/src/call.h +++ b/src/call.h @@ -371,6 +371,8 @@ class Call : public Recordable, public std::enable_shared_from_this<Call> { void checkPendingIM(); + void checkAudio(); + /** Protect every attribute that can be changed by two threads */ mutable std::recursive_mutex callMutex_ {}; diff --git a/src/sip/sipcall.cpp b/src/sip/sipcall.cpp index 7bec8a9e922b37701f6c14751e9a1a6042c9c5b7..440d7808cecd515d70d6065c5796690d6b807de6 100644 --- a/src/sip/sipcall.cpp +++ b/src/sip/sipcall.cpp @@ -721,7 +721,6 @@ void SIPCall::onPeerRinging() { setState(ConnectionState::RINGING); - Manager::instance().peerRingingCall(*this); } void