]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
fix issues with heartbeat in bypass media mode
authorAnthony Minessale <anthm@freeswitch.org>
Thu, 24 Apr 2014 18:21:15 +0000 (23:21 +0500)
committerAnthony Minessale <anthm@freeswitch.org>
Thu, 24 Apr 2014 18:21:15 +0000 (23:21 +0500)
src/switch_core_session.c

index b4703195eea90eb9e321afb990a1406c72aeecd9..38f0369c5b467836f07c9c17600fefd3e287cbb7 100644 (file)
@@ -1526,7 +1526,7 @@ SWITCH_DECLARE(void) switch_core_session_sched_heartbeat(switch_core_session_t *
 {
 
        switch_core_session_unsched_heartbeat(session);
-       session->track_id = switch_scheduler_add_task(switch_epoch_time_now(NULL), sch_heartbeat_callback, (char *) __SWITCH_FUNC__,
+       session->track_id = switch_scheduler_add_task(switch_epoch_time_now(NULL) + session->track_duration, sch_heartbeat_callback, (char *) __SWITCH_FUNC__,
                                                                                                  switch_core_session_get_uuid(session), 0, strdup(switch_core_session_get_uuid(session)), SSHF_FREE_ARG);
 }
 
@@ -1538,17 +1538,20 @@ SWITCH_DECLARE(void) switch_core_session_enable_heartbeat(switch_core_session_t
                seconds = 60;
        }
 
-
-       session->read_frame_count = (session->read_impl.actual_samples_per_second / session->read_impl.samples_per_packet) * seconds;
        session->track_duration = seconds;
 
-       if (switch_channel_test_flag(session->channel, CF_PROXY_MODE)) {
+       if (switch_channel_test_flag(session->channel, CF_PROXY_MODE) || 
+               switch_true(switch_channel_get_variable_dup(session->channel, "bypass_media", SWITCH_FALSE, -1)) ||
+               switch_true(switch_channel_get_variable_dup(session->channel, "bypass_media_after_bridge", SWITCH_FALSE, -1))) {
                switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s using scheduler due to bypass_media mode\n",
                                                  switch_channel_get_name(session->channel));
                switch_core_session_sched_heartbeat(session, seconds);
                return;
        }
 
+       session->read_frame_count = (session->read_impl.actual_samples_per_second / session->read_impl.samples_per_packet) * seconds;
+
+
        switch_core_session_unsched_heartbeat(session);
 
        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_INFO, "%s setting session heartbeat to %u second(s).\n",