Revision
16534
Author
anthm
Date
2010-01-28 14:35:17 -0600 (Thu, 28 Jan 2010)

Log Message

SFSIP-197

Modified Paths

Diff

Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c (16533 => 16534)


--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c	2010-01-28 18:46:47 UTC (rev 16533)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c	2010-01-28 20:35:17 UTC (rev 16534)
@@ -3935,7 +3935,7 @@
 
   retval = nua_base_server_report(sr, tags);
 
-  assert(2 <= retval && retval < 4);
+  //assert(2 <= retval && retval < 4);
 
 #if 0
   if (ss) {

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c (16533 => 16534)


--- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	2010-01-28 18:46:47 UTC (rev 16533)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	2010-01-28 20:35:17 UTC (rev 16534)
@@ -394,7 +394,8 @@
 		}
 
 		if (switch_channel_test_flag(channel, CF_ANSWERED) || sofia_test_flag(tech_pvt, TFLAG_ANS)) {
-			const char *call_info = switch_channel_get_variable(channel, "presence_call_info");
+			const char *call_info = switch_channel_get_variable(channel, "presence_call_info_full");
+
 			if (!tech_pvt->got_bye) {
 				switch_channel_set_variable(channel, "sip_hangup_disposition", "send_bye");
 			}
@@ -474,7 +475,7 @@
 	const char *b_sdp = NULL;
 	int is_proxy = 0;
 	char *sticky = NULL;
-	const char *call_info = switch_channel_get_variable(channel, "presence_call_info");
+	const char *call_info = switch_channel_get_variable(channel, "presence_call_info_full");
 
 	if (sofia_test_flag(tech_pvt, TFLAG_ANS) || switch_channel_test_flag(channel, CF_OUTBOUND)) {
 		return SWITCH_STATUS_SUCCESS;
@@ -506,7 +507,6 @@
 			/* Send the 200 OK */
 			if (!sofia_test_flag(tech_pvt, TFLAG_BYE)) {
 				char *extra_headers = sofia_glue_get_extra_headers(channel, SOFIA_SIP_RESPONSE_HEADER_PREFIX);
-
 				if (sofia_use_soa(tech_pvt)) {
 					nua_respond(tech_pvt->nh, SIP_200_OK,
 								SIPTAG_CONTACT_STR(tech_pvt->profile->url),
@@ -611,6 +611,7 @@
 		if (sofia_use_soa(tech_pvt)) {
 			nua_respond(tech_pvt->nh, SIP_200_OK,
 						NUTAG_AUTOANSWER(0),
+						TAG_IF(call_info, SIPTAG_CALL_INFO_STR(call_info)),
 						TAG_IF(sticky, NUTAG_PROXY(tech_pvt->record_route)),
 						SIPTAG_HEADER_STR(generate_pai_str(session)),
 						NUTAG_SESSION_TIMER(session_timeout),
@@ -626,6 +627,7 @@
 			nua_respond(tech_pvt->nh, SIP_200_OK,
 						NUTAG_AUTOANSWER(0),
 						NUTAG_MEDIA_ENABLE(0),
+						TAG_IF(call_info, SIPTAG_CALL_INFO_STR(call_info)),
 						TAG_IF(sticky, NUTAG_PROXY(tech_pvt->record_route)),
 						SIPTAG_HEADER_STR(generate_pai_str(session)),
 						NUTAG_SESSION_TIMER(session_timeout),
@@ -1776,7 +1778,7 @@
 		if (!switch_channel_test_flag(channel, CF_RING_READY) && !sofia_test_flag(tech_pvt, TFLAG_BYE) &&
 			!switch_channel_test_flag(channel, CF_EARLY_MEDIA) && !switch_channel_test_flag(channel, CF_ANSWERED)) {
 			char *extra_header = sofia_glue_get_extra_headers(channel, SOFIA_SIP_PROGRESS_HEADER_PREFIX);
-			const char *call_info = switch_channel_get_variable(channel, "presence_call_info");
+			const char *call_info = switch_channel_get_variable(channel, "presence_call_info_full");
 
 			nua_respond(tech_pvt->nh, SIP_180_RINGING,
 						SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
@@ -1797,7 +1799,7 @@
 		{
 			char *sticky = NULL;
 			const char *val = NULL;
-			const char *call_info = switch_channel_get_variable(channel, "presence_call_info");
+			const char *call_info = switch_channel_get_variable(channel, "presence_call_info_full");
 
 			if (sofia_test_pflag(tech_pvt->profile, PFLAG_3PCC_PROXY) && sofia_test_flag(tech_pvt, TFLAG_3PCC)) {
 				sofia_set_flag_locked(tech_pvt, TFLAG_EARLY_MEDIA);

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c (16533 => 16534)


--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	2010-01-28 18:46:47 UTC (rev 16533)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	2010-01-28 20:35:17 UTC (rev 16534)
@@ -387,7 +387,7 @@
 	phrase = "OK";
 	
 	sofia_set_flag_locked(tech_pvt, TFLAG_BYE);
-	call_info = switch_channel_get_variable(channel, "presence_call_info");
+	call_info = switch_channel_get_variable(channel, "presence_call_info_full");
 
 	if (sip->sip_reason && sip->sip_reason->re_protocol &&
 		(!strcasecmp(sip->sip_reason->re_protocol, "Q.850") 
@@ -3525,8 +3525,11 @@
 			if (channel && sip->sip_call_info) {
 				char *p;
 				call_info = sip_header_as_string(nua_handle_home(nh), (void *) sip->sip_call_info);
-				if ((p = strchr(call_info, ';'))) {
-					switch_channel_set_variable(channel, "presence_call_info", p+1);
+				if (!switch_stristr("appearance", call_info)) {
+					switch_channel_set_variable(channel, "presence_call_info_full", call_info);
+					if ((p = strchr(call_info, ';'))) {
+						switch_channel_set_variable(channel, "presence_call_info", p+1);
+					}
 				}
 			} else if ((status == 180 || status == 183 || status == 200)) {
 				char buf[128] = "";
@@ -5422,8 +5425,11 @@
 		if (channel && sip->sip_call_info) {
 			char *p;
 			if ((call_info = sip_header_as_string(nua_handle_home(nh), (void *) sip->sip_call_info))) {
-				if ((p = strchr(call_info, ';'))) {
-					switch_channel_set_variable(channel, "presence_call_info", p+1);
+				if (!switch_stristr("appearance", call_info)) {
+					switch_channel_set_variable(channel, "presence_call_info_full", call_info);
+					if ((p = strchr(call_info, ';'))) {
+						switch_channel_set_variable(channel, "presence_call_info", p+1);
+					}
 				}
 				su_free(nua_handle_home(nh), call_info);
 			}
@@ -6159,6 +6165,7 @@
 					
 					if ((uuid = switch_channel_get_variable(b_channel, SWITCH_SIGNAL_BOND_VARIABLE))) {
 						switch_channel_set_variable(b_channel, "presence_call_info", NULL);
+						switch_channel_set_variable(b_channel, "presence_call_info_full", NULL);
 						one_leg = 0;
 					} else {
 						uuid = switch_core_session_get_uuid(b_session);
@@ -6353,7 +6360,8 @@
 				full_contact = sip_header_as_string(nua_handle_home(tech_pvt->nh), (void *) sip->sip_contact);
 			}
 			
-			if (call_info_str) {
+			if (call_info_str && !switch_stristr("appearance", call_info_str)) {
+				switch_channel_set_variable(channel, "presence_call_info_full", call_info_str);
 				if ((p = strchr(call_info_str, ';'))) {
 					p++;
 					switch_channel_set_variable(channel, "presence_call_info", p);