From d4200b6ba3ff95805c045f1a6752ed3c3cc2227e Mon Sep 17 00:00:00 2001 From: Donat Zenichev Date: Fri, 25 Jul 2025 13:25:33 +0200 Subject: [PATCH] MT#63298 AmB2BSession: introduce `addFakeSDPbasedOnPort()` A helper to generate fake AmMimeBody based on given port. No functional change. Change-Id: Id9263a80fc47f554f315169c079875c8dfd0a581 --- core/AmB2BSession.cpp | 31 ++++++++++++++++++------------- core/AmB2BSession.h | 3 +++ 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/core/AmB2BSession.cpp b/core/AmB2BSession.cpp index e573df76..2cfedd36 100644 --- a/core/AmB2BSession.cpp +++ b/core/AmB2BSession.cpp @@ -285,6 +285,23 @@ static void sdp2body(const AmSdp &sdp, AmMimeBody &body) else body.parse(SIP_APPLICATION_SDP, (const unsigned char*)body_str.c_str(), body_str.length()); } +void AmB2BSession::addFakeSDPbasedOnPort(const AmMimeBody *src_sdp, AmMimeBody &new_body, + unsigned int& desired_port) +{ + /* create fake AmSdp from AmMimeBody */ + AmSdp fake_sdp; + AmMimeBody fake_mimebody; + fake_sdp.parse((const char *)src_sdp->getPayload()); + + for (auto it = fake_sdp.media.begin(); it != fake_sdp.media.end(); ++it) + { + it->port = desired_port; + } + + sdp2body(fake_sdp, fake_mimebody); + createFakeReply(&fake_mimebody, new_body); +} + void AmB2BSession::acceptPendingInvite(AmSipRequest *invite) { // reply the INVITE with fake 200 reply @@ -321,19 +338,7 @@ void AmB2BSession::acceptPendingInviteB2B(const AmSipRequest& invite) if (remote_port > 0) { ILOG_DLG(L_DBG, "Using remotely seen SDP port for faking this reply: '%d'\n", remote_port); - - /* create fake AmSdp from AmMimeBody */ - AmSdp fake_sdp; - AmMimeBody fake_mimebody; - fake_sdp.parse((const char *)sdp->getPayload()); - - for (auto it = fake_sdp.media.begin(); it != fake_sdp.media.end(); ++it) - { - it->port = remote_port; - } - - sdp2body(fake_sdp, fake_mimebody); - createFakeReply(&fake_mimebody, n_reply.body); + addFakeSDPbasedOnPort(sdp, n_reply.body, remote_port); } else { createFakeReply(sdp, n_reply.body); diff --git a/core/AmB2BSession.h b/core/AmB2BSession.h index 290156d4..3bce1913 100644 --- a/core/AmB2BSession.h +++ b/core/AmB2BSession.h @@ -210,6 +210,9 @@ private: /** generate fake body (c=0.0.0.0) reply */ void createFakeReply(const AmMimeBody *sdp, AmMimeBody& reply_body); + /** create fake AmSipReply. SDP body based on SDP offer, but with a desired port */ + void addFakeSDPbasedOnPort(const AmMimeBody *src_sdp, AmMimeBody &new_body, unsigned int& desired_port); + /** generate 200 SIP reply on a pending INVITE (uses fake body) */ virtual void acceptPendingInvite(AmSipRequest *invite);