diff --git a/src/call.cpp b/src/call.cpp index 177d03899dea5edbc9eac1ee8a2f866b5afaf9b1..364e84229b574b2eb8489b0543ea97fafabac08d 100644 --- a/src/call.cpp +++ b/src/call.cpp @@ -56,8 +56,10 @@ Call::~Call() void Call::removeCall() { + auto this_ = shared_from_this(); Manager::instance().callFactory.removeCall(*this); iceTransport_.reset(); + setState(CallState::OVER); } const std::string& @@ -86,6 +88,11 @@ Call::validStateTransition(CallState newState) // Notice to developper: // - list only permitted transition (return true) // - let non permitted ones as default case (return false) + + // always permited + if (newState == CallState::OVER) + return true; + switch (callState_) { case CallState::INACTIVE: switch (newState) { @@ -219,6 +226,9 @@ Call::getStateStr() const return StateEvent::INACTIVE; } + case CallState::OVER: + return StateEvent::OVER; + case CallState::MERROR: default: return StateEvent::FAILURE; diff --git a/src/call.h b/src/call.h index 29c8f005f0896770a4a70fff000c0e5acd39d922..245451174b6d18fda011b035896c2597582f827b 100644 --- a/src/call.h +++ b/src/call.h @@ -84,7 +84,7 @@ class Call : public Recordable, public std::enable_shared_from_this<Call> { * \note modify validStateTransition/getStateStr if this enum changes */ enum class CallState : unsigned { - INACTIVE, ACTIVE, HOLD, BUSY, MERROR, COUNT__ + INACTIVE, ACTIVE, HOLD, BUSY, MERROR, OVER, COUNT__ }; virtual ~Call(); diff --git a/src/dring/call_const.h b/src/dring/call_const.h index 67b0290f48d0276599b78b3c3a330260b8847123..b0fed89a07c96b19cfcf9acc1374d2c1bd52447b 100644 --- a/src/dring/call_const.h +++ b/src/dring/call_const.h @@ -36,6 +36,7 @@ constexpr static char FAILURE [] = "FAILURE" ; constexpr static char HOLD [] = "HOLD" ; constexpr static char UNHOLD [] = "UNHOLD" ; constexpr static char INACTIVE [] = "INACTIVE" ; +constexpr static char OVER [] = "OVER" ; }