From f2c1db55a6a92aec38356e729b59dbadd94441d0 Mon Sep 17 00:00:00 2001 From: Donat Zenichev Date: Fri, 25 Jul 2025 14:12:37 +0200 Subject: [PATCH] MT#63298 AmOfferAnswer: add support of PreviewCompleted Just add support of the PreviewCompleted state for OA. Change-Id: I95aff4ec46590061a93e59978d075bd984d8dc1c --- core/AmOfferAnswer.cpp | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/core/AmOfferAnswer.cpp b/core/AmOfferAnswer.cpp index e20b2ad1..ad7b1a2d 100644 --- a/core/AmOfferAnswer.cpp +++ b/core/AmOfferAnswer.cpp @@ -309,7 +309,9 @@ int AmOfferAnswer::onRxSdp(unsigned int m_cseq, const string& m_remote_tag, remote_tag = m_remote_tag; break; - // TODO: add support of OA_PreviewCompleted + case OA_PreviewCompleted: + setState(OA_Completed); + break; case OA_OfferSent: if(is_reliable) @@ -361,13 +363,24 @@ int AmOfferAnswer::onTxSdp(unsigned int m_cseq, bool is_reliable, cseq = m_cseq; break; + case OA_PreviewCompleted: + if(is_reliable && (m_cseq == cseq)) { + if (!force_no_sdp_update) + setState(OA_Completed); + } + else + { + if (!force_no_sdp_update) + setState(OA_OfferSent); + cseq = m_cseq; + } + break; + case OA_OfferRecved: if (is_reliable) { if (!force_no_sdp_update) setState(OA_Completed); } - - // TODO: add support of OA_PreviewCompleted break; case OA_OfferSent: @@ -488,11 +501,11 @@ int AmOfferAnswer::onReplyOut(AmSipReply& reply, int &flags, AmMimeBody &ret_bod } else if ((reply.code == 183) || ((reply.code >= 200) && (reply.code < 300))) { /* either offer received or no offer at all: -> force SDP */ - generate_sdp = !no_sdp_generation && - ((state == OA_OfferRecved) - || (state == OA_None) - // TODO; add support of OA_PreviewCompleted - || (state == OA_Completed)); + generate_sdp = !no_sdp_generation && + ((state == OA_OfferRecved) || + (state == OA_None) || + (state == OA_PreviewCompleted) || + ((state == OA_Completed) && (reply.cseq != cseq))); ILOG_DLG(L_DBG, "Now generate_sdp has been reset to <%c>.\n", generate_sdp ? 't' : 'f'); } @@ -625,8 +638,8 @@ int AmOfferAnswer::getSdpBody(string& sdp_body) } break; - // TODO: add support of OA_PreviewCompleted case OA_OfferRecved: + case OA_PreviewCompleted: ILOG_DLG(L_DBG, "OA: Getting SDP offer..\n"); if (dlg->getSdpAnswer(sdp_remote,sdp_local)) { sdp_local.print(sdp_body);