]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Wed Nov 26 13:30:48 CST 2008 Pekka Pessi <first.last@nokia.com>
authorMichael Jerris <mike@jerris.com>
Tue, 16 Dec 2008 20:28:53 +0000 (20:28 +0000)
committerMichael Jerris <mike@jerris.com>
Tue, 16 Dec 2008 20:28:53 +0000 (20:28 +0000)
  * outbound.c: silenced warnings

  wtf? xxx.

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@10825 d0543943-73ff-0310-b7d9-9358b9ac24b2

libs/sofia-sip/.update
libs/sofia-sip/libsofia-sip-ua/nua/check_register.c
libs/sofia-sip/libsofia-sip-ua/nua/outbound.c

index fc5cc4854e78dfc9bae6bed7b6ca41028ea3a169..c2ac3b41e2c03388002d5d746e5609cc14e932d2 100644 (file)
@@ -1 +1 @@
-Tue Dec 16 14:24:06 CST 2008
+Tue Dec 16 14:28:36 CST 2008
index 0dea54f87c4e54db467f2239fd1d8c5efc5a1ff4..8ca0bb2afff264a2bfdfe3dca7d7c31a7ec22fc4 100644 (file)
@@ -265,6 +265,10 @@ static nua_handle_t *make_auth_natted_register(
   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,
index 8d9b204c7588175923cf255dbe3717a6e18f6c99..d5dc89d6883b0b434078be9ed3fedfec72652451 100644 (file)
@@ -102,7 +102,7 @@ struct outbound {
   /* 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 @@ int outbound_get_contacts(outbound_t *ob,
   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 @@ int outbound_register_response(outbound_t *ob,
     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 @@ int outbound_contacts_from_via(outbound_t *ob, sip_via_t const *via)
 {
   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 @@ int outbound_contacts_from_via(outbound_t *ob, sip_via_t const *via)
     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;