From 3ee862d73ff125490a050acf31eeccf744ab2152 Mon Sep 17 00:00:00 2001 From: Michael Jerris Date: Fri, 9 May 2008 17:43:16 +0000 Subject: [PATCH] Wed May 7 10:04:14 EDT 2008 Pekka Pessi * nua_session.c: do not terminate session without soa if SDP O/A seems to fail SDP O/A may be buried inside MIME multipart git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@8333 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- libs/sofia-sip/.update | 2 +- .../libsofia-sip-ua/nua/nua_session.c | 22 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/libs/sofia-sip/.update b/libs/sofia-sip/.update index 4381f69034..15aa9b54e1 100644 --- a/libs/sofia-sip/.update +++ b/libs/sofia-sip/.update @@ -1 +1 @@ -Fri May 9 13:42:29 EDT 2008 +Fri May 9 13:43:01 EDT 2008 diff --git a/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c b/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c index 2ec5233718..b0abfd4604 100644 --- a/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c +++ b/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c @@ -1293,7 +1293,9 @@ int nua_invite_client_ack(nua_client_request_t *cr, tagi_t const *tags) /* signal SOA that O/A round(s) is (are) complete */ soa_activate(nh->nh_soa, NULL); } - else if (nh->nh_soa == NULL && !(cr->cr_offer_sent && !cr->cr_answer_recv)) { + else if (nh->nh_soa == NULL + /* NUA does not necessarily know dirty details */ + /* && !(cr->cr_offer_sent && !cr->cr_answer_recv) */) { ; } else { @@ -3135,17 +3137,15 @@ static int nua_update_client_request(nua_client_request_t *cr, (sr->sr_offer_recv && !sr->sr_answer_sent)) break; - if (sr || - (cri && cri->cr_offer_sent && !cri->cr_answer_recv) || - (cri && cri->cr_offer_recv && !cri->cr_answer_sent)) { - if (nh->nh_soa == NULL) { - if (session_get_description(sip, NULL, NULL)) - return nua_client_return(cr, 500, "Overlapping Offer/Answer", msg); - } - } - else if (nh->nh_soa == NULL) { + if (nh->nh_soa == NULL) { offer_sent = session_get_description(sip, NULL, NULL); } + else if (sr || + (cri && cri->cr_offer_sent && !cri->cr_answer_recv) || + (cri && cri->cr_offer_recv && !cri->cr_answer_sent)) { + if (session_get_description(sip, NULL, NULL)) + return nua_client_return(cr, 500, "Overlapping Offer/Answer", msg); + } else if (!sip->sip_payload) { soa_init_offer_answer(nh->nh_soa); @@ -3360,7 +3360,7 @@ int nua_update_server_init(nua_server_request_t *sr) if ((overlap = sr0->sr_offer_recv && !sr0->sr_answer_sent)) break; - if (overlap) + if (nh->nh_soa && overlap) return nua_server_retry_after(sr, 500, "Overlapping Offer/Answer", 1, 9); if (nh->nh_soa &&