[Freeswitch-svn] [commit] r10825 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/nua

FreeSWITCH SVN mikej at freeswitch.org
Tue Dec 16 12:28:53 PST 2008


Author: mikej
Date: Tue Dec 16 15:28:53 2008
New Revision: 10825

Log:
Wed Nov 26 13:30:48 CST 2008  Pekka Pessi <first.last at nokia.com>
  * outbound.c: silenced warnings
  
  wtf? xxx.



Modified:
   freeswitch/trunk/libs/sofia-sip/.update
   freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/check_register.c
   freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c

Modified: freeswitch/trunk/libs/sofia-sip/.update
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/.update	(original)
+++ freeswitch/trunk/libs/sofia-sip/.update	Tue Dec 16 15:28:53 2008
@@ -1 +1 @@
-Tue Dec 16 14:24:06 CST 2008
+Tue Dec 16 14:28:36 CST 2008

Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/check_register.c
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/check_register.c	(original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/check_register.c	Tue Dec 16 15:28:53 2008
@@ -265,6 +265,10 @@
   m = s2_wait_for_request(SIP_METHOD_REGISTER);
   fail_if(!m);
   fail_if(!m->sip->sip_authorization);
+  /* should not unregister the previous contact
+   * as it has not been successfully registered */
+  fail_if(!m->sip->sip_contact);
+  fail_if(m->sip->sip_contact->m_next);
   s2_save_register(m);
 
   s2_respond_to(m, NULL,

Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c	(original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c	Tue Dec 16 15:28:53 2008
@@ -102,7 +102,7 @@
   /* The registration state machine. */
   /** Initial REGISTER containing ob_rcontact has been sent */
   unsigned ob_registering:1;
-  /** 2XX response to REGISTER containg ob_rcontact has been received */
+  /** 2XX response to REGISTER containing ob_rcontact has been received */
   unsigned ob_registered:1;
   /** The registration has been validated:
    *  We have successfully sent OPTIONS to ourselves.
@@ -361,14 +361,6 @@
   if (ob) {
     if (ob->ob_contacts)
       *return_current_contact = ob->ob_rcontact;
-    else {
-      sip_contact_t *contact = *return_current_contact;
-      if (contact) {
-	if (ob->ob_rcontact)
-	  msg_header_free_all(ob->ob_home, (msg_header_t*)ob->ob_rcontact);
-	ob->ob_rcontact = sip_contact_dup(ob->ob_home, contact);
-      }
-    }
     *return_previous_contact = ob->ob_previous;
   }
   return 0;
@@ -402,21 +394,25 @@
     return 0;
 
   assert(request->sip_request); assert(response->sip_status);
-  
-  reregister = outbound_check_for_nat(ob, request, response);
-  if (reregister)
-    return reregister;
 
   status = response->sip_status->st_status;
 
   if (status < 300) {
-    if (request->sip_contact && response->sip_contact)
+    if (request->sip_contact && response->sip_contact) {
+      if (ob->ob_rcontact != NULL)
+        msg_header_free(ob->ob_home, (msg_header_t *)ob->ob_rcontact);
+      ob->ob_rcontact = sip_contact_dup(ob->ob_home, request->sip_contact);
       ob->ob_registered = ob->ob_registering;
-    else
+    } else
       ob->ob_registered = 0;
+  }
 
-    if (ob->ob_previous)
-      msg_header_free(ob->ob_home, (void *)ob->ob_previous);
+  reregister = outbound_check_for_nat(ob, request, response);
+  if (reregister)
+    return reregister;
+
+  if (ob->ob_previous && status < 300) {
+    msg_header_free(ob->ob_home, (void *)ob->ob_previous);
     ob->ob_previous = NULL;
   }
 
@@ -1071,7 +1067,6 @@
 {
   su_home_t *home = ob->ob_home;
   sip_contact_t *rcontact, *dcontact;
-  int reg_id = 0;
   char reg_id_param[20] = "";
   sip_contact_t *previous_previous, *previous_rcontact, *previous_dcontact;
   sip_via_t *v, v0[1], *previous_via;
@@ -1110,8 +1105,10 @@
     previous_dcontact = ob->ob_dcontact;
     previous_via = ob->ob_via;
 
-    if (ob->ob_registering &&
-        (reg_id == 0 || ob->ob_info.outbound < outbound_feature_supported))
+    if (ob->ob_registered
+        /* && (ob->ob_reg_id == 0 || ob->ob_info.outbound < outbound_feature_supported)
+         * XXX - multiple connections not yet supported
+	 */)
       previous_rcontact = NULL, ob->ob_previous = ob->ob_rcontact;
     else
       previous_rcontact = ob->ob_rcontact, ob->ob_previous = NULL;



More information about the Freeswitch-svn mailing list