Added capability to disable SDP forward from routing.

git-svn-id: http://yate.null.ro/svn/yate/trunk@6393 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
marian 2020-03-09 07:15:06 +00:00
parent 349d77ccf9
commit 354b2b278d
2 changed files with 14 additions and 14 deletions

View File

@ -28,7 +28,7 @@ namespace TelEngine {
*/
SDPSession::SDPSession(SDPParser* parser)
: m_parser(parser), m_mediaStatus(MediaMissing),
m_rtpForward(false), m_sdpForward(false), m_rtpMedia(0),
m_rtpForward(false), m_sdpForward(parser->sdpForward()), m_rtpMedia(0),
m_sdpSession(0), m_sdpVersion(0), m_sdpHash(YSTRING_INIT_HASH),
m_secure(m_parser->m_secure), m_rfc2833(m_parser->m_rfc2833),
m_ipv6(false), m_amrExtra(""), m_enabler(0), m_ptr(0)
@ -38,12 +38,13 @@ SDPSession::SDPSession(SDPParser* parser)
SDPSession::SDPSession(SDPParser* parser, NamedList& params)
: m_parser(parser), m_mediaStatus(MediaMissing),
m_rtpForward(false), m_sdpForward(false), m_rtpMedia(0),
m_rtpForward(false), m_sdpForward(parser->sdpForward()), m_rtpMedia(0),
m_sdpSession(0), m_sdpVersion(0), m_sdpHash(YSTRING_INIT_HASH),
m_ipv6(false), m_amrExtra(""), m_enabler(0), m_ptr(0)
{
setSdpDebug();
m_rtpForward = params.getBoolValue("rtp_forward");
m_sdpForward = params.getBoolValue(YSTRING("forward_sdp"),m_sdpForward);
m_secure = params.getBoolValue("secure",parser->m_secure);
m_rfc2833 = parser->m_rfc2833;
setRfc2833(params.getParam("rfc2833"));
@ -632,12 +633,9 @@ MimeSdpBody* SDPSession::createPasstroughSDP(NamedList& msg, bool update,
if (!(m_rtpForward && tmp.toBoolean()))
return 0;
String* raw = msg.getParam("sdp_raw");
if (raw) {
m_sdpForward = m_sdpForward || m_parser->sdpForward();
if (m_sdpForward) {
msg.setParam("rtp_forward","accepted");
return new MimeSdpBody("application/sdp",raw->safe(),raw->length());
}
if (raw && m_sdpForward) {
msg.setParam("rtp_forward","accepted");
return new MimeSdpBody("application/sdp",raw->safe(),raw->length());
}
String addr;
ObjList* lst = updateRtpSDP(msg,addr,update ? m_rtpMedia : 0,allowEmptyAddr);

View File

@ -6205,7 +6205,7 @@ YateSIPConnection::YateSIPConnection(SIPEvent* ev, SIPTransaction* tr)
m->addParam("rtp_addr",m_rtpAddr);
putMedia(*m);
}
if (plugin.parser().sdpForward()) {
if (m_sdpForward) {
const DataBlock& raw = sdp->getBody();
String tmp((const char*)raw.data(),raw.length());
m->addParam("sdp_raw",tmp);
@ -6282,6 +6282,7 @@ YateSIPConnection::YateSIPConnection(Message& msg, const String& uri, const char
m_secure = msg.getBoolValue(YSTRING("secure"),plugin.parser().secure());
setRfc2833(msg.getParam(YSTRING("rfc2833")));
m_rtpForward = msg.getBoolValue(YSTRING("rtp_forward"));
m_sdpForward = msg.getBoolValue(YSTRING("forward_sdp"),m_sdpForward);
m_user = msg.getValue(YSTRING("user"));
String tmp;
bool genSips = sips(msg.getBoolValue(YSTRING("sips"),line && line->sips()));
@ -8114,8 +8115,10 @@ bool YateSIPConnection::callPrerouted(Message& msg, bool handled)
bool YateSIPConnection::callRouted(Message& msg)
{
// try to disable RTP forwarding earliest possible
if (m_rtpForward && !msg.getBoolValue(YSTRING("rtp_forward")))
m_rtpForward = false;
if (m_rtpForward) {
m_rtpForward = msg.getBoolValue(YSTRING("rtp_forward"));
m_sdpForward = msg.getBoolValue(YSTRING("forward_sdp"),m_sdpForward);
}
setRfc2833(msg.getParam(YSTRING("rfc2833")));
updateRtpNatAddress(&msg);
Channel::callRouted(msg);
@ -8189,9 +8192,8 @@ void YateSIPConnection::callAccept(Message& msg)
if (m_authBye)
m_authBye = msg.getBoolValue(YSTRING("xsip_auth_bye"),true);
if (m_rtpForward) {
String tmp(msg.getValue(YSTRING("rtp_forward")));
if (tmp != YSTRING("accepted"))
m_rtpForward = false;
m_rtpForward = (msg[YSTRING("rtp_forward")] == YSTRING("accepted"));
m_sdpForward = msg.getBoolValue(YSTRING("forward_sdp"),m_sdpForward);
}
if (m_tr && msg.getBoolValue("sdp_ack"))
m_tr->autoAck(false);