diff --git a/core/AmOfferAnswer.cpp b/core/AmOfferAnswer.cpp index b640d6f1..0ae9a3b3 100644 --- a/core/AmOfferAnswer.cpp +++ b/core/AmOfferAnswer.cpp @@ -361,7 +361,7 @@ int AmOfferAnswer::onRequestOut(AmSipRequest& req) return 0; } -int AmOfferAnswer::onReplyOut(AmSipReply& reply) +int AmOfferAnswer::onReplyOut(AmSipReply& reply, bool no_sdp_generation) { AmMimeBody* sdp_body = reply.body.hasContentType(SIP_APPLICATION_SDP); AmMimeBody* csta_body = reply.body.hasContentType(SIP_APPLICATION_CSTA_XML); @@ -418,9 +418,10 @@ int AmOfferAnswer::onReplyOut(AmSipReply& reply) } else if ((reply.code == 183) || ((reply.code >= 200) && (reply.code < 300))) { /* either offer received or no offer at all: -> force SDP */ - generate_sdp = (state == OA_OfferRecved) + generate_sdp = !no_sdp_generation && + ((state == OA_OfferRecved) || (state == OA_None) - || (state == OA_Completed); + || (state == OA_Completed)); } } else if (reply.cseq_method == SIP_METH_UPDATE) { @@ -473,7 +474,7 @@ int AmOfferAnswer::onReplyOut(AmSipReply& reply) } else if (sdp_body && has_sdp) { /* update local SDP copy */ if (sdp_local.parse((const char*)sdp_body->getPayload())) { - ERROR("parser failed on Tx SDP: '%s'\n", (const char*)sdp_body->getPayload()); + WARN("parser failed on Tx SDP: '%s'\n", (const char*)sdp_body->getPayload()); } } diff --git a/core/AmOfferAnswer.h b/core/AmOfferAnswer.h index afa6db34..b5d6763e 100644 --- a/core/AmOfferAnswer.h +++ b/core/AmOfferAnswer.h @@ -85,7 +85,8 @@ public: int onRequestIn(const AmSipRequest& req); int onReplyIn(const AmSipReply& reply); int onRequestOut(AmSipRequest& req); - int onReplyOut(AmSipReply& reply); + /* `no_sdp_generation` - can be used for cases like absent SDP in coming INVITE */ + int onReplyOut(AmSipReply& reply, bool no_sdp_generation = false); int onRequestSent(const AmSipRequest& req); int onReplySent(const AmSipReply& reply); void onNoAck(unsigned int ack_cseq); diff --git a/core/AmSipDialog.cpp b/core/AmSipDialog.cpp index c0b54ac4..3339615c 100644 --- a/core/AmSipDialog.cpp +++ b/core/AmSipDialog.cpp @@ -271,7 +271,7 @@ int AmSipDialog::onTxRequest(AmSipRequest& req, int& flags) int AmSipDialog::onTxReply(const AmSipRequest& req, AmSipReply& reply, int& flags) { if (offeranswer_enabled) { - if(oa.onReplyOut(reply) < 0) + if(oa.onReplyOut(reply, req.body.empty()) < 0) return -1; }