From daf6d366bf5cc2fb81985f24e17aa72e6598b9f7 Mon Sep 17 00:00:00 2001
From: Anthony Minessale <anthony.minessale@gmail.com>
Date: Mon, 11 Feb 2008 20:47:20 +0000
Subject: [PATCH] auto append domain name on ^ notation

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@7588 d0543943-73ff-0310-b7d9-9358b9ac24b2
---
 src/mod/endpoints/mod_sofia/mod_sofia.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c
index 8b9740aa93..35608dbda9 100644
--- a/src/mod/endpoints/mod_sofia/mod_sofia.c
+++ b/src/mod/endpoints/mod_sofia/mod_sofia.c
@@ -1564,7 +1564,7 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session
 	switch_caller_profile_t *caller_profile = NULL;
 	private_object_t *tech_pvt = NULL;
 	switch_channel_t *nchannel;
-	char *host, *dest_to;
+	char *host = NULL, *dest_to = NULL;
 
 	*new_session = NULL;
 
@@ -1679,8 +1679,6 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session
 
 		if ((dest_to = strchr(dest, '^'))) {
 			*dest_to++ = '\0';
-			tech_pvt->dest_to = switch_core_session_alloc(nsession, strlen(dest_to) + 5);
-			switch_snprintf(tech_pvt->dest_to, strlen(dest_to) + 5, "sip:%s", dest_to);
 		}
 
 		if ((host = strchr(dest, '%'))) {
@@ -1696,12 +1694,13 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session
 				cause = SWITCH_CAUSE_NO_ROUTE_DESTINATION;
 				goto error;
 			}
-		} else if (!strchr(dest, '@')) {
+		} else if (!(host = strchr(dest, '@'))) {
 			char buf[128];
 			tech_pvt->e_dest = switch_core_session_strdup(nsession, dest);
 			if (sofia_reg_find_reg_url(profile, dest, profile_name, buf, sizeof(buf))) {
 				tech_pvt->dest = switch_core_session_strdup(nsession, buf);
 				tech_pvt->local_url = switch_core_session_sprintf(nsession, "%s@%s", dest, profile_name);
+				host = profile_name;
 			} else {
 				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Cannot locate registered user %s@%s\n", dest, profile_name);
 				cause = SWITCH_CAUSE_NO_ROUTE_DESTINATION;
@@ -1713,6 +1712,15 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session
 		}
 	}
 
+	if (dest_to) {
+		if (strchr(dest_to, '@')) {
+			tech_pvt->dest_to = switch_core_session_sprintf(nsession, "sip:%s", dest_to);
+		} else {
+			tech_pvt->dest_to = switch_core_session_sprintf(nsession, "sip:%s@%s", dest_to, host);
+		}
+	}
+
+
 	if (!tech_pvt->dest_to) {
 		tech_pvt->dest_to = tech_pvt->dest;
 	}