Diff
Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h (16249 => 16250)
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h 2010-01-11 21:27:41 UTC (rev 16249)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h 2010-01-12 00:05:11 UTC (rev 16250)
@@ -579,6 +579,7 @@
switch_rtp_crypto_key_type_t crypto_recv_type;
switch_rtp_crypto_key_type_t crypto_type;
char *local_sdp_str;
+ char *last_sdp_str;
char *dest;
char *dest_to;
char *key;
Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c (16249 => 16250)
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c 2010-01-11 21:27:41 UTC (rev 16249)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c 2010-01-12 00:05:11 UTC (rev 16250)
@@ -3412,6 +3412,11 @@
switch_channel_clear_flag(channel, CF_REQ_MEDIA);
+ tech_pvt->last_sdp_str = NULL;
+ if (!sofia_use_soa(tech_pvt) && sip->sip_payload && sip->sip_payload->pl_data) {
+ tech_pvt->last_sdp_str = switch_core_session_strdup(session, sip->sip_payload->pl_data);
+ }
+
if (sofia_test_pflag(profile, PFLAG_MANAGE_SHARED_APPEARANCE)) {
if (channel && sip->sip_call_info) {
char *p;
@@ -3832,6 +3837,20 @@
NUTAG_OFFER_SENT_REF(offer_sent),
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());
+
+
+ if (session) {
+ channel = switch_core_session_get_channel(session);
+ tech_pvt = switch_core_session_get_private(session);
+
+ if (!tech_pvt || !tech_pvt->nh) {
+ goto done;
+ }
+ }
+
+ if (status > 100 && status < 300 && tech_pvt && !sofia_use_soa(tech_pvt) && !r_sdp && tech_pvt->last_sdp_str) {
+ r_sdp = tech_pvt->last_sdp_str;
+ }
/* This marr in our code brought to you by people who can't read........*/
if (profile->ndlb & PFLAG_NDLB_ALLOW_BAD_IANANAME && r_sdp && (p = (char *) switch_stristr("g729a/8000", r_sdp))) {
@@ -3867,13 +3886,6 @@
}
if (session) {
- channel = switch_core_session_get_channel(session);
- tech_pvt = switch_core_session_get_private(session);
-
- if (!tech_pvt || !tech_pvt->nh) {
- goto done;
- }
-
if ((switch_channel_test_flag(channel, CF_EARLY_MEDIA) || switch_channel_test_flag(channel, CF_ANSWERED)) &&
(status == 180 || status == 183)) {
/* Must you send 180 after 183 w/sdp ? sheesh */
Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c (16249 => 16250)
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c 2010-01-11 21:27:41 UTC (rev 16249)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c 2010-01-12 00:05:11 UTC (rev 16250)
@@ -1817,7 +1817,10 @@
SOATAG_REUSE_REJECTED(1),
SOATAG_ORDERED_USER(1),
SOATAG_RTP_SORT(SOA_RTP_SORT_REMOTE),
- SOATAG_RTP_SELECT(SOA_RTP_SELECT_ALL), TAG_IF(rep, SIPTAG_REPLACES_STR(rep)), SOATAG_HOLD(holdstr), TAG_END());
+ SOATAG_RTP_SELECT(SOA_RTP_SELECT_ALL),
+ TAG_IF(rep, SIPTAG_REPLACES_STR(rep)),
+ SOATAG_HOLD(holdstr),
+ TAG_END());
} else {
nua_invite(tech_pvt->nh,
NUTAG_AUTOANSWER(0),
@@ -1839,7 +1842,8 @@
SIPTAG_CONTENT_TYPE_STR("application/sdp"),
SIPTAG_PAYLOAD_STR(tech_pvt->local_sdp_str),
TAG_IF(rep, SIPTAG_REPLACES_STR(rep)),
- TAG_END());
+ SOATAG_HOLD(holdstr),
+ TAG_END());
}
sofia_glue_free_destination(dst);