MT#66063 Check parsed SDP before to create new one

When faking the SDP body (the rapid 200OK answer)
make sure about proper parsed given (requeste's) SDP body,
before to try to prepare a new faked SDP based on that.

Change-Id: I57d1010051adccc941d485b3c6178d34154c2709
pull/18/merge
Donat Zenichev 3 weeks ago
parent 51f9a0ac98
commit f89e4d17d0

@ -313,18 +313,22 @@ void AmB2BSession::addFakeSDPbasedOnPort(const AmMimeBody *src_sdp, AmMimeBody &
/* create fake AmSdp from AmMimeBody */
AmSdp fake_sdp;
AmMimeBody fake_mimebody;
if (!fake_sdp.parse(src_sdp->getPayload()))
{
ILOG_DLG(L_WARN, "Failed to parse SDP.\n");
if (!fake_sdp.parse(src_sdp->getPayload())) {
WARN("SDP parsing failed, can't put the desired port value: '%u'!\n", desired_port);
DBG("Fall-back to the createFakeReply().\n");
createFakeReply(nullptr, new_body); /* create a brand new fake body */
return;
}
/* parsing into AmSdp is required only to set desired source port */
for (auto it = fake_sdp.media.begin(); it != fake_sdp.media.end(); ++it)
{
it->port = desired_port;
}
/* after rewriting the port, put the SDP back into AmMimeBody */
sdp2body(fake_sdp, fake_mimebody);
/* based on that create a new body to be used in reply */
createFakeReply(&fake_mimebody, new_body);
}
@ -392,6 +396,10 @@ void AmB2BSession::acceptPendingInviteB2B(const AmSipRequest& invite)
return;
}
if (!sdp) {
WARN("No application/sdp body found!\n");
}
AmSipReply n_reply;
/* local sdp, which was already learned before */
@ -410,7 +418,7 @@ void AmB2BSession::acceptPendingInviteB2B(const AmSipRequest& invite)
}
}
if (remote_port > 0) {
if (remote_port > 0 && sdp) {
ILOG_DLG(L_DBG, "Using remotely seen SDP port for faking this reply: '%d'\n", remote_port);
addFakeSDPbasedOnPort(sdp, n_reply.body, remote_port);
}

@ -458,6 +458,8 @@ bool AmSdp::parse(const string& sdp_copy)
{
if (sdp_copy.empty()) {
WARN("Nothing to parse.\n");
/* remove all values already parsed before */
clear();
return false;
}
@ -501,6 +503,9 @@ bool AmSdp::parse(const string& sdp_copy)
sdp_parse_fingerprint();
sdp_parse_ssrc();
if (parsed)
DBG("SDP parsing finished OK.\n");
return parsed;
}

Loading…
Cancel
Save