diff --git a/src/call.cpp b/src/call.cpp index 01b2ed5df0c5b919764df2adca357bfa919ce4c4..27a88efbd98faa264876428439fed576bcadfbad 100644 --- a/src/call.cpp +++ b/src/call.cpp @@ -134,6 +134,8 @@ Call::Call(const std::shared_ptr<Account>& account, // kill pending subcalls at disconnect if (call_state == CallState::OVER) hangupCalls(safePopSubcalls(), 0); + + return true; }); time(×tamp_start_); @@ -265,8 +267,12 @@ Call::setState(CallState call_state, ConnectionState cnx_state, signed code) connectionState_ = cnx_state; auto new_client_state = getStateStr(); - for (auto& l : stateChangedListeners_) - l(callState_, connectionState_, code); + for (auto it = stateChangedListeners_.begin(); it != stateChangedListeners_.end(); ) { + if ((*it)(callState_, connectionState_, code)) + ++it; + else + it = stateChangedListeners_.erase(it); + } if (old_client_state != new_client_state) { if (not parent_) { @@ -481,6 +487,7 @@ Call::addSubCall(Call& subcall) } } }); + return true; }); } diff --git a/src/call.h b/src/call.h index 972860cd69d401fa99a09087754888125ad77e59..8e4e930c30a4ed1529c8502d722ddebfd4fd47f4 100644 --- a/src/call.h +++ b/src/call.h @@ -109,7 +109,7 @@ public: using SubcallSet = std::set<std::shared_ptr<Call>, std::owner_less<std::shared_ptr<Call>>>; using OnReadyCb = std::function<void(bool)>; - using StateListenerCb = std::function<void(CallState, ConnectionState, int)>; + using StateListenerCb = std::function<bool(CallState, ConnectionState, int)>; /** * This determines if the call originated from the local user (OUTGOING) diff --git a/src/jamidht/jamiaccount.cpp b/src/jamidht/jamiaccount.cpp index 5fbf2411b8a63d33da178c9ba42b5ae0a5533c5c..542cf42f24bd85c3021b9860dc601428f45dd9f2 100644 --- a/src/jamidht/jamiaccount.cpp +++ b/src/jamidht/jamiaccount.cpp @@ -604,7 +604,9 @@ JamiAccount::startOutgoingCall(const std::shared_ptr<SIPCall>& call, const std:: and state != Call::ConnectionState::TRYING) { if (auto shared = w.lock()) shared->callConnectionClosed(deviceId, true); + return false; } + return true; }); call->addSubCall(*dev_call); dev_call->setIceMedia(call->getIceMedia()); @@ -665,7 +667,9 @@ JamiAccount::startOutgoingCall(const std::shared_ptr<SIPCall>& call, const std:: and state != Call::ConnectionState::TRYING) { if (auto shared = w.lock()) shared->callConnectionClosed(deviceId, true); + return false; } + return true; }); auto remote_address = ice->getRemoteAddress(ICE_COMP_ID_SIP_TRANSPORT);