From f5eb0b47dfc6a64078142a7c2d1dcc1333515610 Mon Sep 17 00:00:00 2001 From: Olivier Dion <olivier.dion@polymtl.ca> Date: Tue, 11 May 2021 08:41:22 -0400 Subject: [PATCH] call: Add getCallDuration() method If `duration_start_` is `time_point::min`, then when calculating the call's duration, there's an signed integer overflow which result in an enormous time duration. Signed-off-by: Olivier Dion <olivier.dion@savoirfairelinux.com> Change-Id: I3ad119ab0f79ef8e9c537d1879d628a29ceed4d7 --- src/call.cpp | 7 +------ src/call.h | 11 +++++++++++ src/sip/sipcall.cpp | 3 +-- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/call.cpp b/src/call.cpp index 8f0ab0b0e2..55d390dafc 100644 --- a/src/call.cpp +++ b/src/call.cpp @@ -125,12 +125,7 @@ Call::Call(const std::shared_ptr<Account>& account, duration_start_ = clock::now(); else if (cnx_state == ConnectionState::DISCONNECTED && call_state == CallState::OVER) { if (auto jamiAccount = std::dynamic_pointer_cast<JamiAccount>(getAccount().lock())) { - auto duration = duration_start_ == time_point::min() - ? 0 - : std::chrono::duration_cast<std::chrono::milliseconds>( - clock::now() - duration_start_) - .count(); - jamiAccount->addCallHistoryMessage(getPeerNumber(), duration); + jamiAccount->addCallHistoryMessage(getPeerNumber(), getCallDuration().count()); monitor(); } diff --git a/src/call.h b/src/call.h index 9ecb37cb78..1410f13e31 100644 --- a/src/call.h +++ b/src/call.h @@ -301,6 +301,17 @@ public: return parent_ != nullptr; } + /** + * @return Call duration in milliseconds + */ + std::chrono::milliseconds getCallDuration() const + { + return duration_start_ == time_point::min() + ? std::chrono::milliseconds::zero() + : std::chrono::duration_cast<std::chrono::milliseconds>(clock::now() + - duration_start_); + } + public: // media management virtual bool toggleRecording(); diff --git a/src/sip/sipcall.cpp b/src/sip/sipcall.cpp index 2314d69e9f..06367b51c8 100644 --- a/src/sip/sipcall.cpp +++ b/src/sip/sipcall.cpp @@ -2352,8 +2352,7 @@ SIPCall::monitor() const return; } JAMI_DBG("- Call %s with %s:", getCallId().c_str(), getPeerNumber().c_str()); - // TODO move in getCallDuration - JAMI_DBG("\t- Duration: %s", dht::print_duration(clock::now() - duration_start_).c_str()); + JAMI_DBG("\t- Duration: %s", dht::print_duration(getCallDuration()).c_str()); for (auto& mediaAttr : getMediaAttributeList()) JAMI_DBG("\t- Media: %s", mediaAttr.toString(true).c_str()); #ifdef ENABLE_VIDEO -- GitLab