Revision
16004
Author
anthm
Date
2009-12-19 11:43:05 -0600 (Sat, 19 Dec 2009)

Log Message

MODSOFIA-48

Modified Paths

Diff

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c (16003 => 16004)


--- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	2009-12-18 23:19:53 UTC (rev 16003)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	2009-12-19 17:43:05 UTC (rev 16004)
@@ -503,16 +503,29 @@
 			/* Send the 200 OK */
 			if (!sofia_test_flag(tech_pvt, TFLAG_BYE)) {
 				char *extra_headers = sofia_glue_get_extra_headers(channel, SOFIA_SIP_PROGRESS_HEADER_PREFIX);
-				nua_respond(tech_pvt->nh, SIP_200_OK,
-							SIPTAG_CONTACT_STR(tech_pvt->profile->url),
-							SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
-							SOATAG_REUSE_REJECTED(1),
-							SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"), NUTAG_INCLUDE_EXTRA_SDP(1), 
-							TAG_IF(!zstr(extra_headers), SIPTAG_HEADER_STR(extra_headers)),
-							TAG_IF(switch_stristr("update_display", tech_pvt->x_freeswitch_support_remote), 
-								   SIPTAG_HEADER_STR("X-FS-Support: "FREESWITCH_SUPPORT)),
-							TAG_END());
 
+				if (sofia_use_soa(tech_pvt)) {
+					nua_respond(tech_pvt->nh, SIP_200_OK,
+								SIPTAG_CONTACT_STR(tech_pvt->profile->url),
+								SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
+								SOATAG_REUSE_REJECTED(1),
+								SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"), NUTAG_INCLUDE_EXTRA_SDP(1), 
+								TAG_IF(!zstr(extra_headers), SIPTAG_HEADER_STR(extra_headers)),
+								TAG_IF(switch_stristr("update_display", tech_pvt->x_freeswitch_support_remote), 
+									   SIPTAG_HEADER_STR("X-FS-Support: "FREESWITCH_SUPPORT)),
+								TAG_END());
+				} else {
+					nua_respond(tech_pvt->nh, SIP_200_OK,
+								NUTAG_MEDIA_ENABLE(0),
+								SIPTAG_CONTACT_STR(tech_pvt->profile->url),
+								TAG_IF(!zstr(extra_headers), SIPTAG_HEADER_STR(extra_headers)),
+								SIPTAG_CONTENT_TYPE_STR("application/sdp"),
+								SIPTAG_PAYLOAD_STR(tech_pvt->local_sdp_str),								
+								TAG_IF(switch_stristr("update_display", tech_pvt->x_freeswitch_support_remote), 
+									   SIPTAG_HEADER_STR("X-FS-Support: "FREESWITCH_SUPPORT)),
+								TAG_END());
+				}
+
 				switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "3PCC-PROXY, Sent a 200 OK, waiting for ACK\n");
 				switch_safe_free(extra_headers);
 			}
@@ -590,19 +603,36 @@
 
 	if (!sofia_test_flag(tech_pvt, TFLAG_BYE)) {
 		char *extra_headers = sofia_glue_get_extra_headers(channel, SOFIA_SIP_PROGRESS_HEADER_PREFIX);
-		nua_respond(tech_pvt->nh, SIP_200_OK,
-					NUTAG_AUTOANSWER(0),
-					TAG_IF(sticky, NUTAG_PROXY(tech_pvt->record_route)),
-					SIPTAG_HEADER_STR(generate_pai_str(session)),
-					NUTAG_SESSION_TIMER(session_timeout),
-					SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
-					SIPTAG_CALL_INFO_STR(switch_channel_get_variable(tech_pvt->channel, SOFIA_SIP_HEADER_PREFIX "call_info")),
-					SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
-					SOATAG_REUSE_REJECTED(1), SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"), NUTAG_INCLUDE_EXTRA_SDP(1), 
-					TAG_IF(!zstr(extra_headers), SIPTAG_HEADER_STR(extra_headers)),
-					TAG_IF(switch_stristr("update_display", tech_pvt->x_freeswitch_support_remote), 
-						   SIPTAG_HEADER_STR("X-FS-Support: "FREESWITCH_SUPPORT)),
-					TAG_END());
+		if (sofia_use_soa(tech_pvt)) {
+			nua_respond(tech_pvt->nh, SIP_200_OK,
+						NUTAG_AUTOANSWER(0),
+						TAG_IF(sticky, NUTAG_PROXY(tech_pvt->record_route)),
+						SIPTAG_HEADER_STR(generate_pai_str(session)),
+						NUTAG_SESSION_TIMER(session_timeout),
+						SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
+						SIPTAG_CALL_INFO_STR(switch_channel_get_variable(tech_pvt->channel, SOFIA_SIP_HEADER_PREFIX "call_info")),
+						SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
+						SOATAG_REUSE_REJECTED(1), SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"), NUTAG_INCLUDE_EXTRA_SDP(1), 
+						TAG_IF(!zstr(extra_headers), SIPTAG_HEADER_STR(extra_headers)),
+						TAG_IF(switch_stristr("update_display", tech_pvt->x_freeswitch_support_remote), 
+							   SIPTAG_HEADER_STR("X-FS-Support: "FREESWITCH_SUPPORT)),
+						TAG_END());
+		} else {
+			nua_respond(tech_pvt->nh, SIP_200_OK,
+						NUTAG_AUTOANSWER(0),
+						NUTAG_MEDIA_ENABLE(0),
+						TAG_IF(sticky, NUTAG_PROXY(tech_pvt->record_route)),
+						SIPTAG_HEADER_STR(generate_pai_str(session)),
+						NUTAG_SESSION_TIMER(session_timeout),
+						SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
+						SIPTAG_CALL_INFO_STR(switch_channel_get_variable(tech_pvt->channel, SOFIA_SIP_HEADER_PREFIX "call_info")),
+						SIPTAG_CONTENT_TYPE_STR("application/sdp"),
+						SIPTAG_PAYLOAD_STR(tech_pvt->local_sdp_str),						
+						TAG_IF(!zstr(extra_headers), SIPTAG_HEADER_STR(extra_headers)),
+						TAG_IF(switch_stristr("update_display", tech_pvt->x_freeswitch_support_remote), 
+							   SIPTAG_HEADER_STR("X-FS-Support: "FREESWITCH_SUPPORT)),
+						TAG_END());
+		}
 		switch_safe_free(extra_headers);
 		sofia_set_flag_locked(tech_pvt, TFLAG_ANS);
 	}
@@ -1235,10 +1265,20 @@
 			}
 
 			if (!sofia_test_flag(tech_pvt, TFLAG_BYE)) {
-				nua_respond(tech_pvt->nh, SIP_200_OK,
-							SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
-							SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
-							SOATAG_REUSE_REJECTED(1), SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"), NUTAG_INCLUDE_EXTRA_SDP(1), TAG_END());
+				if (sofia_use_soa(tech_pvt)) {
+					nua_respond(tech_pvt->nh, SIP_200_OK,
+								SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
+								SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
+								SOATAG_REUSE_REJECTED(1), SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"), NUTAG_INCLUDE_EXTRA_SDP(1), 
+								TAG_END());
+				} else {
+					nua_respond(tech_pvt->nh, SIP_200_OK,
+								NUTAG_MEDIA_ENABLE(0),
+								SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
+								SIPTAG_CONTENT_TYPE_STR("application/sdp"),
+								SIPTAG_PAYLOAD_STR(tech_pvt->local_sdp_str),								
+								TAG_END());
+				}
 				switch_channel_mark_answered(channel);
 			}
 		}
@@ -1604,12 +1644,21 @@
 							sofia_glue_tech_patch_sdp(tech_pvt);
 							sofia_glue_tech_proxy_remote_addr(tech_pvt);
 						}
-						nua_respond(tech_pvt->nh, code, su_strdup(nua_handle_home(tech_pvt->nh), reason), SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
-									SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
-									SOATAG_REUSE_REJECTED(1),
-									SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"), NUTAG_INCLUDE_EXTRA_SDP(1), 
-									TAG_IF(!zstr(extra_headers), SIPTAG_HEADER_STR(extra_headers)),
-									TAG_END());
+						if (sofia_use_soa(tech_pvt)) {
+							nua_respond(tech_pvt->nh, code, su_strdup(nua_handle_home(tech_pvt->nh), reason), SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
+										SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
+										SOATAG_REUSE_REJECTED(1),
+										SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"), NUTAG_INCLUDE_EXTRA_SDP(1), 
+										TAG_IF(!zstr(extra_headers), SIPTAG_HEADER_STR(extra_headers)),
+										TAG_END());
+						} else {
+							nua_respond(tech_pvt->nh, code, su_strdup(nua_handle_home(tech_pvt->nh), reason), SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
+										NUTAG_MEDIA_ENABLE(0),
+										SIPTAG_CONTENT_TYPE_STR("application/sdp"),
+										SIPTAG_PAYLOAD_STR(tech_pvt->local_sdp_str),							
+										TAG_IF(!zstr(extra_headers), SIPTAG_HEADER_STR(extra_headers)),
+										TAG_END());
+						}
 					} else {
 						nua_respond(tech_pvt->nh, code, su_strdup(nua_handle_home(tech_pvt->nh), reason), SIPTAG_CONTACT_STR(tech_pvt->reply_contact), 
 									TAG_IF(!zstr(extra_headers), SIPTAG_HEADER_STR(extra_headers)),
@@ -1725,20 +1774,36 @@
 
 				if (!sofia_test_flag(tech_pvt, TFLAG_BYE)) {
 					char *extra_header = sofia_glue_get_extra_headers(channel, SOFIA_SIP_PROGRESS_HEADER_PREFIX);
-					nua_respond(tech_pvt->nh,
-								SIP_183_SESSION_PROGRESS,
-								NUTAG_AUTOANSWER(0),
-								TAG_IF(sticky, NUTAG_PROXY(tech_pvt->record_route)),
-								SIPTAG_HEADER_STR(generate_pai_str(session)),
-								SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
-								SOATAG_REUSE_REJECTED(1),
-								SOATAG_ORDERED_USER(1),
-								SOATAG_ADDRESS(tech_pvt->adv_sdp_audio_ip),
-								SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str), SOATAG_AUDIO_AUX("cn telephone-event"), 
-								TAG_IF(!zstr(extra_header), SIPTAG_HEADER_STR(extra_header)),
-								TAG_IF(switch_stristr("update_display", tech_pvt->x_freeswitch_support_remote), 
-									   SIPTAG_HEADER_STR("X-FS-Support: "FREESWITCH_SUPPORT)),
-								TAG_END());
+					if (sofia_use_soa(tech_pvt)) {
+						nua_respond(tech_pvt->nh,
+									SIP_183_SESSION_PROGRESS,
+									NUTAG_AUTOANSWER(0),
+									TAG_IF(sticky, NUTAG_PROXY(tech_pvt->record_route)),
+									SIPTAG_HEADER_STR(generate_pai_str(session)),
+									SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
+									SOATAG_REUSE_REJECTED(1),
+									SOATAG_ORDERED_USER(1),
+									SOATAG_ADDRESS(tech_pvt->adv_sdp_audio_ip),
+									SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str), SOATAG_AUDIO_AUX("cn telephone-event"), 
+									TAG_IF(!zstr(extra_header), SIPTAG_HEADER_STR(extra_header)),
+									TAG_IF(switch_stristr("update_display", tech_pvt->x_freeswitch_support_remote), 
+										   SIPTAG_HEADER_STR("X-FS-Support: "FREESWITCH_SUPPORT)),
+									TAG_END());
+					} else {
+						nua_respond(tech_pvt->nh,
+									SIP_183_SESSION_PROGRESS,
+									NUTAG_AUTOANSWER(0),
+									NUTAG_MEDIA_ENABLE(0),
+									TAG_IF(sticky, NUTAG_PROXY(tech_pvt->record_route)),
+									SIPTAG_HEADER_STR(generate_pai_str(session)),
+									SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
+									SIPTAG_CONTENT_TYPE_STR("application/sdp"),
+									SIPTAG_PAYLOAD_STR(tech_pvt->local_sdp_str),									
+									TAG_IF(!zstr(extra_header), SIPTAG_HEADER_STR(extra_header)),
+									TAG_IF(switch_stristr("update_display", tech_pvt->x_freeswitch_support_remote), 
+										   SIPTAG_HEADER_STR("X-FS-Support: "FREESWITCH_SUPPORT)),
+									TAG_END());
+					}
 					switch_safe_free(extra_header);
 				}
 			}

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h (16003 => 16004)


--- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h	2009-12-18 23:19:53 UTC (rev 16003)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h	2009-12-19 17:43:05 UTC (rev 16004)
@@ -254,6 +254,7 @@
 	TFLAG_3PCC_HAS_ACK,
 	TFLAG_PASS_RFC2833,
 	TFLAG_UPDATING_DISPLAY,
+	TFLAG_ENABLE_SOA,
 	/* No new flags below this line */
 	TFLAG_MAX
 } TFLAGS;
@@ -835,6 +836,10 @@
 void sofia_reg_release_gateway__(const char *file, const char *func, int line, sofia_gateway_t *gateway);
 #define sofia_reg_release_gateway(x) sofia_reg_release_gateway__(__FILE__, __SWITCH_FUNC__, __LINE__, x);
 
+#define sofia_use_soa(_t) (sofia_test_flag(_t, TFLAG_ENABLE_SOA)		\
+						   && !switch_channel_test_flag(_t->channel, CF_PROXY_MODE) \
+						   && !switch_channel_test_flag(_t->channel, CF_PROXY_MEDIA))
+
 #define check_decode(_var, _session) do {								\
 		assert(_session);												\
 		if (!zstr(_var)) {								\

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


--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	2009-12-18 23:19:53 UTC (rev 16003)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	2009-12-19 17:43:05 UTC (rev 16004)
@@ -2480,6 +2480,7 @@
 				sofia_set_pflag(profile, PFLAG_SQL_IN_TRANS);
 				profile->shutdown_type = "false";
 				profile->local_network = "localnet.auto";
+				sofia_set_flag(profile, TFLAG_ENABLE_SOA);
 
 				for (param = switch_xml_child(settings, "param"); param; param = param->next) {
 					char *var = (char *) switch_xml_attr_soft(param, "name");
@@ -2914,6 +2915,13 @@
 						} else {
 							sofia_clear_pflag(profile, PFLAG_SQL_IN_TRANS);
 						}
+
+					} else if (!strcasecmp(var, "enable-soa")) {
+						if (switch_true(val)) {
+							sofia_set_flag(profile, TFLAG_ENABLE_SOA);
+						} else {
+							sofia_clear_flag(profile, TFLAG_ENABLE_SOA);
+						}
 					} else if (!strcasecmp(var, "bitpacking")) {
 						if (!strcasecmp(val, "aal2")) {
 							profile->codec_flags = SWITCH_CODEC_FLAG_AAL2;
@@ -3736,6 +3744,7 @@
 	char st[80] = "";
 	int is_dup_sdp = 0;
 	switch_event_t *s_event = NULL;
+	char *p;
 
 	tl_gets(tags,
 			NUTAG_CALLSTATE_REF(ss_state),
@@ -3745,7 +3754,16 @@
 			NUTAG_ANSWER_SENT_REF(answer_sent),
 			SIPTAG_REPLACES_STR_REF(replaces_str), SOATAG_LOCAL_SDP_STR_REF(l_sdp), SOATAG_REMOTE_SDP_STR_REF(r_sdp), TAG_END());
 	
-	
+	/* This marr in our code brought to you by people who can't read........*/
+	if (tech_pvt->profile->ndlb & PFLAG_NDLB_ALLOW_BAD_IANANAME && r_sdp && (p = (char *) switch_stristr("g729a/8000", r_sdp))) {
+		p += 4;
+		*p++ = '/';
+		*p++ = '8';
+		*p++ = '0';
+		*p++ = '0';
+		*p++ = '0';
+		*p++ = ' ';
+	}
 
 	if (ss_state == nua_callstate_terminated) {
 
@@ -4000,12 +4018,21 @@
 						sofia_glue_set_local_sdp(tech_pvt, NULL, 0, NULL, 0);
 						sofia_set_flag_locked(tech_pvt, TFLAG_3PCC);
 						switch_channel_set_state(channel, CS_HIBERNATE);
-						nua_respond(tech_pvt->nh, SIP_200_OK,
-									SIPTAG_CONTACT_STR(tech_pvt->profile->url),
-									SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
-									SOATAG_REUSE_REJECTED(1),
-									SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"), 
-									TAG_IF(sofia_test_pflag(profile, PFLAG_DISABLE_100REL), NUTAG_INCLUDE_EXTRA_SDP(1)), TAG_END());
+						if (sofia_use_soa(tech_pvt)) {
+							nua_respond(tech_pvt->nh, SIP_200_OK,
+										SIPTAG_CONTACT_STR(tech_pvt->profile->url),
+										SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
+										SOATAG_REUSE_REJECTED(1),
+										SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"), 
+										TAG_IF(sofia_test_pflag(profile, PFLAG_DISABLE_100REL), NUTAG_INCLUDE_EXTRA_SDP(1)), TAG_END());
+						} else {
+							nua_respond(tech_pvt->nh, SIP_200_OK,
+										NUTAG_MEDIA_ENABLE(0),
+										SIPTAG_CONTACT_STR(tech_pvt->profile->url),
+										SIPTAG_CONTENT_TYPE_STR("application/sdp"),
+										SIPTAG_PAYLOAD_STR(tech_pvt->local_sdp_str),
+										TAG_END());
+						}
 					} else if (sofia_test_pflag(profile, PFLAG_3PCC_PROXY)) {
 						//3PCC proxy mode delays the 200 OK until the call is answered
 						switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "RECEIVED_NOSDP");
@@ -4090,12 +4117,21 @@
 							}
 							sofia_glue_set_local_sdp(tech_pvt, NULL, 0, NULL, 1);
 							
-							nua_respond(tech_pvt->nh, SIP_200_OK,
-										SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
-										SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
-										SOATAG_REUSE_REJECTED(1),
-										SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"), 
-										TAG_IF(sofia_test_pflag(profile, PFLAG_DISABLE_100REL), NUTAG_INCLUDE_EXTRA_SDP(1)), TAG_END());
+							if (sofia_use_soa(tech_pvt)) {
+								nua_respond(tech_pvt->nh, SIP_200_OK,
+											SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
+											SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
+											SOATAG_REUSE_REJECTED(1),
+											SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"), 
+											TAG_IF(sofia_test_pflag(profile, PFLAG_DISABLE_100REL), NUTAG_INCLUDE_EXTRA_SDP(1)), TAG_END());
+							} else {
+								nua_respond(tech_pvt->nh, SIP_200_OK,
+											NUTAG_MEDIA_ENABLE(0),
+											SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
+											SIPTAG_CONTENT_TYPE_STR("application/sdp"),
+											SIPTAG_PAYLOAD_STR(tech_pvt->local_sdp_str),
+											TAG_END());
+							}
 							launch_media_on_hold(session);
 							
 							switch_core_session_rwunlock(other_session);
@@ -4165,13 +4201,20 @@
 					if (tech_pvt->local_crypto_key) {
 						sofia_glue_set_local_sdp(tech_pvt, NULL, 0, NULL, 0);
 					}
-					nua_respond(tech_pvt->nh, SIP_200_OK,
-								SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
-								SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
-								SOATAG_REUSE_REJECTED(1),
-								SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"), 
-								TAG_IF(sofia_test_pflag(profile, PFLAG_DISABLE_100REL), NUTAG_INCLUDE_EXTRA_SDP(1)), TAG_END());
-
+					if (sofia_use_soa(tech_pvt)) {
+						nua_respond(tech_pvt->nh, SIP_200_OK,
+									SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
+									SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
+									SOATAG_REUSE_REJECTED(1),
+									SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"), 
+									TAG_IF(sofia_test_pflag(profile, PFLAG_DISABLE_100REL), NUTAG_INCLUDE_EXTRA_SDP(1)), TAG_END());
+					} else {
+						nua_respond(tech_pvt->nh, SIP_200_OK,
+									NUTAG_MEDIA_ENABLE(0),
+									SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
+									SIPTAG_CONTENT_TYPE_STR("application/sdp"),
+									TAG_END());
+					}
 					if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_REINVITE) == SWITCH_STATUS_SUCCESS) {
 						switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(session));
 						switch_event_fire(&s_event);
@@ -6127,14 +6170,24 @@
 					sofia_glue_set_local_sdp(b_tech_pvt, NULL, 0, NULL, 0);
 				}
 
-				nua_update(b_tech_pvt->nh,
-						   SIPTAG_CONTACT_STR(b_tech_pvt->reply_contact),
-						   SOATAG_USER_SDP_STR(b_tech_pvt->local_sdp_str),
-						   SOATAG_REUSE_REJECTED(1),
-						   SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"),
-						   TAG_IF(!zstr_buf(message), SIPTAG_HEADER_STR(message)),
-						   TAG_IF(!zstr(b_tech_pvt->user_via), SIPTAG_VIA_STR(b_tech_pvt->user_via)),
-						   TAG_END());
+				if (sofia_use_soa(b_tech_pvt)) {
+					nua_update(b_tech_pvt->nh,
+							   SIPTAG_CONTACT_STR(b_tech_pvt->reply_contact),
+							   SOATAG_USER_SDP_STR(b_tech_pvt->local_sdp_str),
+							   SOATAG_REUSE_REJECTED(1),
+							   SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"),
+							   TAG_IF(!zstr_buf(message), SIPTAG_HEADER_STR(message)),
+							   TAG_IF(!zstr(b_tech_pvt->user_via), SIPTAG_VIA_STR(b_tech_pvt->user_via)),
+							   TAG_END());
+				} else {
+					nua_update(b_tech_pvt->nh,
+							   NUTAG_MEDIA_ENABLE(0),
+							   SIPTAG_CONTACT_STR(b_tech_pvt->reply_contact),
+							   SIPTAG_CONTENT_TYPE_STR("application/sdp"),
+							   TAG_IF(!zstr_buf(message), SIPTAG_HEADER_STR(message)),
+							   TAG_IF(!zstr(b_tech_pvt->user_via), SIPTAG_VIA_STR(b_tech_pvt->user_via)),
+							   TAG_END());
+				}
 			}
 
 		}