From 21f1743b308eaf2831ae2ff6bd60d0b720ee9da8 Mon Sep 17 00:00:00 2001
From: Anthony Minessale <anthm@freeswitch.org>
Date: Fri, 6 Sep 2013 01:52:11 +0500
Subject: [PATCH] FS-5757 take 200

---
 src/mod/endpoints/mod_sofia/sofia.c | 16 +++++++++++++---
 src/switch_caller.c                 |  2 ++
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c
index 646f6610a3..3bd6531919 100644
--- a/src/mod/endpoints/mod_sofia/sofia.c
+++ b/src/mod/endpoints/mod_sofia/sofia.c
@@ -8719,7 +8719,7 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
 			if ((b_session = switch_core_session_locate(b_private->uuid))) {
 				switch_channel_t *b_channel = switch_core_session_get_channel(b_session);
 				const char *bridge_uuid;
-				switch_caller_profile_t *orig_cp;
+				switch_caller_profile_t *orig_cp, *cp;
 				//const char *sent_name, *sent_number;
 				orig_cp = switch_channel_get_caller_profile(b_channel);
 				tech_pvt->caller_profile->callee_id_name = switch_core_strdup(tech_pvt->caller_profile->pool, orig_cp->callee_id_name);
@@ -8730,7 +8730,10 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
 					tech_pvt->caller_profile->caller_id_number = switch_core_strdup(tech_pvt->caller_profile->pool, orig_cp->caller_id_number);
 				}
 
-				tech_pvt->caller_profile->originator_caller_profile = switch_caller_profile_dup(tech_pvt->caller_profile->pool, orig_cp);
+				if (orig_cp) {
+					cp = switch_caller_profile_dup(tech_pvt->caller_profile->pool, orig_cp);
+					switch_channel_set_originator_caller_profile(channel, cp);
+				}
 
 #if 0
 				sent_name = switch_channel_get_variable(b_channel, "last_sent_callee_id_name");
@@ -8796,7 +8799,14 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
 						tech_pvt->caller_profile->callee_id_name = switch_core_strdup(tech_pvt->caller_profile->pool, name);
 						tech_pvt->caller_profile->callee_id_number = switch_core_strdup(tech_pvt->caller_profile->pool, num);
 
-						tech_pvt->caller_profile->originatee_caller_profile = switch_caller_profile_dup(tech_pvt->caller_profile->pool, bcp->originatee_caller_profile);
+						if (bcp->originatee_caller_profile) {
+							switch_caller_profile_t *cp;
+
+							cp = switch_caller_profile_dup(tech_pvt->caller_profile->pool, 
+														   bcp->originatee_caller_profile);
+
+							switch_channel_set_originatee_caller_profile(tech_pvt->channel, cp);
+						}
 
 						tech_pvt->caller_profile->destination_number = switch_core_sprintf(tech_pvt->caller_profile->pool,
 																						   "%sanswer,sofia_sla:%s", codec_str, b_private->uuid);
diff --git a/src/switch_caller.c b/src/switch_caller.c
index d0c4ec87d3..02de5575aa 100644
--- a/src/switch_caller.c
+++ b/src/switch_caller.c
@@ -141,6 +141,8 @@ SWITCH_DECLARE(switch_caller_profile_t *) switch_caller_profile_dup(switch_memor
 	if (tocopy->times) {
 		profile->old_times = (switch_channel_timetable_t *) switch_core_alloc(profile->pool, sizeof(switch_channel_timetable_t));
 		*profile->old_times = *tocopy->times;
+	} else {
+		tocopy->times = (switch_channel_timetable_t *) switch_core_alloc(tocopy->pool, sizeof(*tocopy->times));
 	}
 
 	if (tocopy->soft) {