Revision
14255
Author
brian
Date
2009-07-14 18:39:57 -0500 (Tue, 14 Jul 2009)

Log Message

Issue #2 of SFSIP-164, must set local-network-acl for this to work.

Modified Paths

Diff

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c (14254 => 14255)


--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c	2009-07-14 22:55:48 UTC (rev 14254)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c	2009-07-14 23:39:57 UTC (rev 14255)
@@ -269,6 +269,10 @@
 			nua_handle_t *nh = nua_handle(profile->nua, NULL, NUTAG_URL(gateway_ptr->register_url), TAG_END());
 			sofia_private_t *pvt;
 
+			if (sofia_glue_check_nat(gateway_ptr->profile, gateway_ptr->register_proxy)) {
+				user_via = sofia_glue_create_external_via(NULL, gateway_ptr->profile, gateway_ptr->register_transport);
+			}
+
 			pvt = malloc(sizeof(*pvt));
 			switch_assert(pvt);
 			memset(pvt, 0, sizeof(*pvt));
@@ -280,10 +284,14 @@
 			gateway_ptr->pinging = 1;
 			nua_options(nh, 
 						TAG_IF(gateway_ptr->register_sticky_proxy, NUTAG_PROXY(gateway_ptr->register_sticky_proxy)),
+						TAG_IF(user_via, SIPTAG_VIA_STR(user_via)),
 						SIPTAG_TO_STR(gateway_ptr->register_from),
 						SIPTAG_CONTACT_STR(gateway_ptr->register_contact),
 						SIPTAG_FROM_STR(gateway_ptr->register_from),
 						TAG_END());
+
+			switch_safe_free(user_via);
+			user_via = NULL;
 		}
 
 		switch (ostate) {
@@ -348,6 +356,8 @@
 			}
 			gateway_ptr->retry = now + gateway_ptr->retry_seconds;
 			gateway_ptr->state = REG_STATE_TRYING;			
+			switch_safe_free(user_via);
+			user_via = NULL;
 			break;
 
 		case REG_STATE_FAILED:
@@ -376,7 +386,6 @@
 		if (ostate != gateway_ptr->state) {
 			sofia_reg_fire_custom_gateway_state_event(gateway_ptr);
 		}
-		switch_safe_free(user_via);
 	}
 }