]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-7602 FS-7499 FS-7587 modify dtls init function placement
authorAnthony Minessale <anthm@freeswitch.org>
Fri, 5 Jun 2015 01:37:15 +0000 (20:37 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Fri, 5 Jun 2015 01:37:15 +0000 (20:37 -0500)
src/include/switch_core_media.h
src/switch_channel.c
src/switch_core_media.c
src/switch_core_state_machine.c

index 31bf08387bdfa312414085d34d433cdc2dcd0b3e..09958e7e458868ccfe072b136d3e6e7ace1fcdb6 100644 (file)
@@ -332,7 +332,7 @@ SWITCH_DECLARE(switch_media_flow_t) switch_core_session_media_flow(switch_core_s
 SWITCH_DECLARE(switch_status_t) switch_core_media_get_vid_params(switch_core_session_t *session, switch_vid_params_t *vid_params);
 SWITCH_DECLARE(switch_status_t) switch_core_media_set_video_file(switch_core_session_t *session, switch_file_handle_t *fh, switch_rw_t rw);
 SWITCH_DECLARE(switch_bool_t) switch_core_session_in_video_thread(switch_core_session_t *session);
-SWITCH_DECLARE(switch_bool_t) switch_core_media_check_dtls(switch_core_session_t *session);
+SWITCH_DECLARE(switch_bool_t) switch_core_media_check_dtls(switch_core_session_t *session, switch_media_type_t type);
 
 SWITCH_END_EXTERN_C
 #endif
index 60f0ee680249eee3925ff9331de496b5a297c10d..a944e2f6a1b8cfbe29670706b66cc52dc118b08a 100644 (file)
@@ -3402,6 +3402,8 @@ SWITCH_DECLARE(switch_status_t) switch_channel_perform_mark_pre_answered(switch_
                const char *uuid;
                switch_core_session_t *other_session;
 
+               switch_core_media_check_dtls(channel->session, SWITCH_MEDIA_TYPE_AUDIO);
+
                switch_channel_check_zrtp(channel);
                switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, switch_channel_get_uuid(channel), SWITCH_LOG_NOTICE, "Pre-Answer %s!\n", channel->name);
                switch_channel_set_flag(channel, CF_EARLY_MEDIA);
@@ -3673,6 +3675,8 @@ SWITCH_DECLARE(switch_status_t) switch_channel_perform_mark_answered(switch_chan
                return SWITCH_STATUS_SUCCESS;
        }
 
+       switch_core_media_check_dtls(channel->session, SWITCH_MEDIA_TYPE_AUDIO);
+
        if (channel->caller_profile && channel->caller_profile->times) {
                switch_mutex_lock(channel->profile_mutex);
                channel->caller_profile->times->answered = switch_micro_time_now();
index df872dfa30eaa7b300cbc88ac4c7f9965b5facc2..ed095b075cc41512b04a18cd1e4ea723e0e4ccf8 100644 (file)
@@ -4847,6 +4847,8 @@ static void *SWITCH_THREAD_FUNC video_helper_thread(switch_thread_t *thread, voi
        mh->up = 1;
        switch_mutex_lock(mh->cond_mutex);
 
+       switch_core_media_check_dtls(session, SWITCH_MEDIA_TYPE_VIDEO);
+
        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s Video thread started. Echo is %s\n", 
                                          switch_channel_get_name(session->channel), switch_channel_test_flag(channel, CF_VIDEO_ECHO) ? "on" : "off");
        switch_core_session_request_video_refresh(session);
@@ -8585,11 +8587,11 @@ static int check_engine(switch_rtp_engine_t *engine)
        return 1;
 }
 
-SWITCH_DECLARE(switch_bool_t) switch_core_media_check_dtls(switch_core_session_t *session)
+SWITCH_DECLARE(switch_bool_t) switch_core_media_check_dtls(switch_core_session_t *session, switch_media_type_t type)
 {
        switch_media_handle_t *smh;
-       switch_rtp_engine_t *a_engine, *v_engine;
-       int audio_checking = 0, video_checking = 0;
+       switch_rtp_engine_t *engine;
+       int checking = 0;
 
        switch_assert(session);
 
@@ -8605,15 +8607,13 @@ SWITCH_DECLARE(switch_bool_t) switch_core_media_check_dtls(switch_core_session_t
                return SWITCH_TRUE;
        }
        
-       a_engine = &smh->engines[SWITCH_MEDIA_TYPE_AUDIO];
-       v_engine = &smh->engines[SWITCH_MEDIA_TYPE_VIDEO];
+       engine = &smh->engines[type];
 
        do {
-               if (a_engine->rtp_session) audio_checking = check_engine(a_engine);
-               if (v_engine->rtp_session) check_engine(v_engine);
-       } while (switch_channel_ready(session->channel) && (audio_checking || video_checking));
-
-       if (!audio_checking && !video_checking) {
+               if (engine->rtp_session) checking = check_engine(engine);
+       } while (switch_channel_ready(session->channel) && checking);
+       
+       if (!checking) {
                return SWITCH_TRUE;
        }
        
index 26750ff58efa9a174ab69783f969b313db317f01..f9449bfc396d9153b79444803d525f20decaff06 100644 (file)
@@ -487,10 +487,6 @@ SWITCH_DECLARE(void) switch_core_session_run(switch_core_session_t *session)
                                }
                        }
 
-                       if (state > CS_INIT && switch_channel_media_up(session->channel)) {
-                               switch_core_media_check_dtls(session);
-                       }
-                       
                        switch (state) {
                        case CS_NEW:            /* Just created, Waiting for first instructions */
                                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "(%s) State NEW\n", switch_channel_get_name(session->channel));