]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-3451 --resolve we support this but there was a bug, should work now
authorAnthony Minessale <anthm@freeswitch.org>
Tue, 2 Aug 2011 01:08:04 +0000 (20:08 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Tue, 2 Aug 2011 01:08:04 +0000 (20:08 -0500)
src/mod/endpoints/mod_sofia/sofia.c
src/mod/endpoints/mod_sofia/sofia_glue.c

index 87cb19dfbe43ddd4bdd14fbbb4dd0611bcc41bdc..355a331c38de973b9515cec9ea2e82b13555911b 100644 (file)
@@ -3488,6 +3488,7 @@ switch_status_t config_sofia(int reload, char *profile_name)
                                profile->local_network = "localnet.auto";
                                sofia_set_flag(profile, TFLAG_ENABLE_SOA);
                                sofia_set_pflag(profile, PFLAG_CID_IN_1XX);
+                               profile->ndlb |= PFLAG_NDLB_ALLOW_NONDUP_SDP;
 
                                for (param = switch_xml_child(settings, "param"); param; param = param->next) {
                                        char *var = (char *) switch_xml_attr_soft(param, "name");
@@ -5109,11 +5110,13 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
        }
 
        if (session) {
-               if ((switch_channel_test_flag(channel, CF_EARLY_MEDIA) || switch_channel_test_flag(channel, CF_ANSWERED)) && (status == 180 || status == 183)) {
+               if ((switch_channel_test_flag(channel, CF_EARLY_MEDIA) || switch_channel_test_flag(channel, CF_ANSWERED)) && (status == 180 || status == 183) && !r_sdp) {
                        /* Must you send 180 after 183 w/sdp ? sheesh */
                        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Channel %s skipping state [%s][%d]\n",
                                                          switch_channel_get_name(channel), nua_callstate_name(ss_state), status);
                        goto done;
+               } else if (switch_channel_test_flag(channel, CF_EARLY_MEDIA) && (status == 180 || status == 183) && r_sdp) {
+                       sofia_set_flag_locked(tech_pvt, TFLAG_REINVITE);
                }
 
                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Channel %s entering state [%s][%d]\n",
@@ -5211,7 +5214,7 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
                                sofia_set_flag_locked(tech_pvt, TFLAG_EARLY_MEDIA);
                                switch_channel_mark_pre_answered(channel);
                                sofia_set_flag(tech_pvt, TFLAG_SDP);
-                               if (switch_channel_test_flag(channel, CF_PROXY_MEDIA)) {
+                               if (switch_channel_test_flag(channel, CF_PROXY_MEDIA) || sofia_test_flag(tech_pvt, TFLAG_REINVITE)) {
                                        if (sofia_glue_activate_rtp(tech_pvt, 0) != SWITCH_STATUS_SUCCESS) {
                                                goto done;
                                        }
@@ -5632,6 +5635,8 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
                                sofia_glue_set_local_sdp(tech_pvt, NULL, 0, NULL, 0);
 
                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Processing updated SDP\n");
+                               sofia_set_flag_locked(tech_pvt, TFLAG_REINVITE);
+
                                if (sofia_glue_activate_rtp(tech_pvt, 0) != SWITCH_STATUS_SUCCESS) {
                                        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "RTP Error!\n");
                                        switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
index 1cd72bd60e95cfc578346c93e45a0e50c952abfb..062da61a983ba8d535de3e47fc607ceb50a2c117 100644 (file)
@@ -3049,7 +3049,6 @@ switch_status_t sofia_glue_activate_rtp(private_object_t *tech_pvt, switch_rtp_f
                flags &= ~SWITCH_RTP_FLAG_BYTESWAP;
        }
 
-
        if (tech_pvt->rtp_session && sofia_test_flag(tech_pvt, TFLAG_REINVITE)) {
                //const char *ip = switch_channel_get_variable(tech_pvt->channel, SWITCH_LOCAL_MEDIA_IP_VARIABLE);
                //const char *port = switch_channel_get_variable(tech_pvt->channel, SWITCH_LOCAL_MEDIA_PORT_VARIABLE);
@@ -3117,7 +3116,7 @@ switch_status_t sofia_glue_activate_rtp(private_object_t *tech_pvt, switch_rtp_f
                const char *rport = NULL;
                switch_port_t remote_rtcp_port = 0;
 
-               sofia_clear_flag_locked(tech_pvt, TFLAG_REINVITE);
+               
 
                if ((rport = switch_channel_get_variable(tech_pvt->channel, "sip_remote_audio_rtcp_port"))) {
                        remote_rtcp_port = (switch_port_t)atoi(rport);
@@ -3598,6 +3597,7 @@ switch_status_t sofia_glue_activate_rtp(private_object_t *tech_pvt, switch_rtp_f
 
  end:
 
+       sofia_clear_flag_locked(tech_pvt, TFLAG_REINVITE);
        sofia_glue_tech_track(tech_pvt->profile, tech_pvt->session);