]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Wed May 7 10:04:14 EDT 2008 Pekka Pessi <first.last@nokia.com>
authorMichael Jerris <mike@jerris.com>
Fri, 9 May 2008 17:43:16 +0000 (17:43 +0000)
committerMichael Jerris <mike@jerris.com>
Fri, 9 May 2008 17:43:16 +0000 (17:43 +0000)
  * 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
libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c

index 4381f69034df026ec45f9d185ea7b73763560d95..15aa9b54e13650a1cf993d57d69357ca66a93e19 100644 (file)
@@ -1 +1 @@
-Fri May  9 13:42:29 EDT 2008
+Fri May  9 13:43:01 EDT 2008
index 2ec523371892d18ed743a5ee026fce225c2925e7..b0abfd4604b1a8662989ba447dd2ff479135724d 100644 (file)
@@ -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 &&