diff --git a/core/AmB2BSession.cpp b/core/AmB2BSession.cpp index b36daf60..a2e647fb 100644 --- a/core/AmB2BSession.cpp +++ b/core/AmB2BSession.cpp @@ -236,7 +236,7 @@ void AmB2BSession::relaySip(const AmSipRequest& orig, const AmSipReply& reply) AmB2BCallerSession::AmB2BCallerSession() : AmB2BSession(), - callee_status(None) + callee_status(None), sip_relay_early_media_sdp(false) { } @@ -244,6 +244,11 @@ AmB2BCallerSession::~AmB2BCallerSession() { } +void AmB2BCallerSession::set_sip_relay_early_media_sdp(bool r) +{ + sip_relay_early_media_sdp = r; +} + void AmB2BCallerSession::terminateLeg() { AmB2BSession::terminateLeg(); @@ -275,6 +280,10 @@ void AmB2BCallerSession::onB2BEvent(B2BEvent* ev) case Ringing: if(reply.code < 200){ + if ((!sip_relay_only) && sip_relay_early_media_sdp && + reply.code>=180 && reply.code<=183 && (!reply.body.empty())) { + reinviteCaller(reply); + } callee_status = Ringing; } diff --git a/core/AmB2BSession.h b/core/AmB2BSession.h index eb7b2894..3375e7ea 100644 --- a/core/AmB2BSession.h +++ b/core/AmB2BSession.h @@ -191,6 +191,12 @@ class AmB2BCallerSession: public AmB2BSession virtual void createCalleeSession(); void relayEvent(AmEvent* ev); + /** Tell if the session should + * relay early media SDPs to + * caller leg + */ + bool sip_relay_early_media_sdp; + public: AmB2BCallerSession(); virtual ~AmB2BCallerSession(); @@ -215,6 +221,7 @@ class AmB2BCallerSession: public AmB2BSession AmSipRequest* getInviteReq() { return &invite_req; } + void set_sip_relay_early_media_sdp(bool r); }; /** \brief Callee leg of a B2B session */