SWITCH_DECLARE(void) switch_core_session_sched_heartbeat(switch_core_session_t *session, uint32_t seconds)
{
+ time_t when;
switch_core_session_unsched_heartbeat(session);
- session->track_id = switch_scheduler_add_task(switch_epoch_time_now(NULL) + session->track_duration, sch_heartbeat_callback, (char *) __SWITCH_FUNC__,
+ if (switch_true(switch_channel_get_variable(session->channel, "heartbeat_fire_on_set"))) {
+ when = switch_epoch_time_now(NULL);
+ } else {
+ when = switch_epoch_time_now(NULL) + session->track_duration;
+ }
+
+ session->track_id = switch_scheduler_add_task(when, sch_heartbeat_callback, (char *) __SWITCH_FUNC__,
switch_core_session_get_uuid(session), 0, strdup(switch_core_session_get_uuid(session)), SSHF_FREE_ARG);
}
return;
}
- session->read_frame_count = (session->read_impl.samples_per_second / session->read_impl.samples_per_packet) * seconds;
-
+ if (switch_true(switch_channel_get_variable(session->channel, "heartbeat_fire_on_set"))) {
+ session->read_frame_count = 0;
+ } else {
+ session->read_frame_count = (session->read_impl.samples_per_second / session->read_impl.samples_per_packet) * seconds;
+ }
switch_core_session_unsched_heartbeat(session);