refactor(scheduler): split scheduler into 3 files

This commit is contained in:
lohhiiccc 2026-03-17 09:37:39 -05:00
parent c859dc8ba8
commit 2d77cca584
4 changed files with 104 additions and 98 deletions

View file

@ -3,64 +3,66 @@ include sources/cli.mk
PING_SRC_DIR = src/ping PING_SRC_DIR = src/ping
PING_SRCS = $(CLI_SRCS) \ PING_SRCS = $(CLI_SRCS) \
$(PING_SRC_DIR)/main.c \ $(PING_SRC_DIR)/main.c \
$(PING_SRC_DIR)/cli/parse.c \ $(PING_SRC_DIR)/cli/parse.c \
$(PING_SRC_DIR)/cli/handlers/handle_count.c \ $(PING_SRC_DIR)/cli/handlers/handle_count.c \
$(PING_SRC_DIR)/cli/handlers/handle_dont_fragment.c \ $(PING_SRC_DIR)/cli/handlers/handle_dont_fragment.c \
$(PING_SRC_DIR)/cli/handlers/handle_deadline.c \ $(PING_SRC_DIR)/cli/handlers/handle_deadline.c \
$(PING_SRC_DIR)/cli/handlers/handle_flood.c \ $(PING_SRC_DIR)/cli/handlers/handle_flood.c \
$(PING_SRC_DIR)/cli/handlers/handle_help.c \ $(PING_SRC_DIR)/cli/handlers/handle_help.c \
$(PING_SRC_DIR)/cli/handlers/handle_interval.c \ $(PING_SRC_DIR)/cli/handlers/handle_interval.c \
$(PING_SRC_DIR)/cli/handlers/handle_quiet.c \ $(PING_SRC_DIR)/cli/handlers/handle_quiet.c \
$(PING_SRC_DIR)/cli/handlers/option_map.c \ $(PING_SRC_DIR)/cli/handlers/option_map.c \
$(PING_SRC_DIR)/cli/handlers/handle_size.c \ $(PING_SRC_DIR)/cli/handlers/handle_size.c \
$(PING_SRC_DIR)/cli/handlers/handle_timeout.c \ $(PING_SRC_DIR)/cli/handlers/handle_timeout.c \
$(PING_SRC_DIR)/cli/handlers/handle_ttl.c \ $(PING_SRC_DIR)/cli/handlers/handle_ttl.c \
$(PING_SRC_DIR)/cli/handlers/handle_version.c \ $(PING_SRC_DIR)/cli/handlers/handle_version.c \
$(PING_SRC_DIR)/cli/handlers/handle_verbose.c \ $(PING_SRC_DIR)/cli/handlers/handle_verbose.c \
$(PING_SRC_DIR)/cli/parse_utils/parse_inet_addr.c \ $(PING_SRC_DIR)/cli/parse_utils/parse_inet_addr.c \
$(PING_SRC_DIR)/cli/parse_utils/parse_destinations.c \ $(PING_SRC_DIR)/cli/parse_utils/parse_destinations.c \
$(PING_SRC_DIR)/cli/config_free.c \ $(PING_SRC_DIR)/cli/config_free.c \
$(PING_SRC_DIR)/cli/messages/help.c \ $(PING_SRC_DIR)/cli/messages/help.c \
$(PING_SRC_DIR)/cli/messages/version.c \ $(PING_SRC_DIR)/cli/messages/version.c \
$(PING_SRC_DIR)/cli/messages/error.c \ $(PING_SRC_DIR)/cli/messages/error.c \
$(PING_SRC_DIR)/core/ping.c \ $(PING_SRC_DIR)/core/ping.c \
$(PING_SRC_DIR)/core/loop.c \ $(PING_SRC_DIR)/core/loop.c \
$(PING_SRC_DIR)/core/send.c \ $(PING_SRC_DIR)/core/send.c \
$(PING_SRC_DIR)/core/callback.c \ $(PING_SRC_DIR)/core/callback.c \
$(PING_SRC_DIR)/tracker/init.c \ $(PING_SRC_DIR)/tracker/init.c \
$(PING_SRC_DIR)/tracker/record_send.c \ $(PING_SRC_DIR)/tracker/record_send.c \
$(PING_SRC_DIR)/tracker/record_recv.c \ $(PING_SRC_DIR)/tracker/record_recv.c \
$(PING_SRC_DIR)/output/start.c \ $(PING_SRC_DIR)/output/start.c \
$(PING_SRC_DIR)/output/packet.c \ $(PING_SRC_DIR)/output/packet.c \
$(PING_SRC_DIR)/output/error.c \ $(PING_SRC_DIR)/output/error.c \
$(PING_SRC_DIR)/output/summary.c \ $(PING_SRC_DIR)/output/summary.c \
$(PING_SRC_DIR)/output/flood.c \ $(PING_SRC_DIR)/output/flood.c \
$(PING_SRC_DIR)/scheduler/scheduler.c \ $(PING_SRC_DIR)/scheduler/scheduler_arm.c \
$(PING_SRC_DIR)/stats/stats_get.c \ $(PING_SRC_DIR)/scheduler/scheduler_select_tv.c \
$(PING_SRC_DIR)/stats/stats_init.c \ $(PING_SRC_DIR)/scheduler/scheduler_init.c \
$(PING_SRC_DIR)/stats/stats_update.c \ $(PING_SRC_DIR)/stats/stats_get.c \
$(PING_SRC_DIR)/stats/stats_init.c \
$(PING_SRC_DIR)/stats/stats_update.c \
PING_TESTS_DIR = tests PING_TESTS_DIR = tests
PING_TESTS = $(PING_TESTS_DIR)/test_main.c \ PING_TESTS = $(PING_TESTS_DIR)/test_main.c \
$(PING_TESTS_DIR)/cli/handlers/test_handle_count.c \ $(PING_TESTS_DIR)/cli/handlers/test_handle_count.c \
$(PING_TESTS_DIR)/cli/handlers/test_handle_flood.c \ $(PING_TESTS_DIR)/cli/handlers/test_handle_flood.c \
$(PING_TESTS_DIR)/cli/handlers/test_handle_help.c \ $(PING_TESTS_DIR)/cli/handlers/test_handle_help.c \
$(PING_TESTS_DIR)/cli/handlers/test_handle_interval.c \ $(PING_TESTS_DIR)/cli/handlers/test_handle_interval.c \
$(PING_TESTS_DIR)/cli/handlers/test_handle_quiet.c \ $(PING_TESTS_DIR)/cli/handlers/test_handle_quiet.c \
$(PING_TESTS_DIR)/cli/handlers/test_handler_map.c \ $(PING_TESTS_DIR)/cli/handlers/test_handler_map.c \
$(PING_TESTS_DIR)/cli/handlers/test_handle_size.c \ $(PING_TESTS_DIR)/cli/handlers/test_handle_size.c \
$(PING_TESTS_DIR)/cli/handlers/test_handle_timeout.c \ $(PING_TESTS_DIR)/cli/handlers/test_handle_timeout.c \
$(PING_TESTS_DIR)/cli/handlers/test_handle_ttl.c \ $(PING_TESTS_DIR)/cli/handlers/test_handle_ttl.c \
$(PING_TESTS_DIR)/cli/handlers/test_handle_version.c \ $(PING_TESTS_DIR)/cli/handlers/test_handle_version.c \
$(PING_TESTS_DIR)/cli/handlers/test_handle_verbose.c \ $(PING_TESTS_DIR)/cli/handlers/test_handle_verbose.c \
$(PING_TESTS_DIR)/cli/handlers/test_handle_dont_fragment.c \ $(PING_TESTS_DIR)/cli/handlers/test_handle_dont_fragment.c \
$(PING_TESTS_DIR)/cli/handlers/test_handle_deadline.c \ $(PING_TESTS_DIR)/cli/handlers/test_handle_deadline.c \
$(PING_TESTS_DIR)/cli/parse_utils/test_parse_int.c \ $(PING_TESTS_DIR)/cli/parse_utils/test_parse_int.c \
$(PING_TESTS_DIR)/cli/parse_utils/test_parse_float.c \ $(PING_TESTS_DIR)/cli/parse_utils/test_parse_float.c \
$(PING_TESTS_DIR)/cli/parse_utils/test_parse_inet_addr.c \ $(PING_TESTS_DIR)/cli/parse_utils/test_parse_inet_addr.c \
$(PING_TESTS_DIR)/cli/parse_utils/test_parse_destinations.c \ $(PING_TESTS_DIR)/cli/parse_utils/test_parse_destinations.c \
$(PING_TESTS_DIR)/ping/stats/test_stats.c \ $(PING_TESTS_DIR)/ping/stats/test_stats.c \
$(PING_TESTS_DIR)/ping/tracker/test_tracker.c \ $(PING_TESTS_DIR)/ping/tracker/test_tracker.c \

View file

@ -0,0 +1,19 @@
#include "ping/ft_ping_flags.h"
#include "internal/ping/scheduler.h"
void
ping_scheduler_arm(const struct ping_config *config)
{
struct itimerval itv;
double interval;
if (HAS_FLAG(config->flags, FLAG_FLOOD))
return;
interval = (double)config->interval;
itv.it_value.tv_sec = (time_t)interval;
itv.it_value.tv_usec = (suseconds_t)((interval - (double)(time_t)interval)
* 1e6);
itv.it_interval.tv_sec = 0;
itv.it_interval.tv_usec = 0;
setitimer(ITIMER_REAL, &itv, NULL);
}

View file

@ -1,14 +1,13 @@
#include "compiler.h" #include "compiler.h"
#include "ping/ft_ping_flags.h"
#include "internal/ping/scheduler.h" #include "internal/ping/scheduler.h"
/* Forward declarations */ /* Forward declarations */
static void sigalrm_handler(int sig); static void inline sigint_handler(int sig);
static void sigint_handler(int sig); static void inline sigalrm_handler(int sig);
static void install_signal(int signum, void (*handler)(int)); static void install_signal(int signum, void (*handler)(int));
/* -------------------- */
static struct ping_state *g_state = NULL; static struct ping_state *g_state = NULL;
/* -------------------- */
void void
ping_scheduler_init(struct ping_state *state) ping_scheduler_init(struct ping_state *state)
@ -18,44 +17,6 @@ ping_scheduler_init(struct ping_state *state)
install_signal(SIGINT, sigint_handler); install_signal(SIGINT, sigint_handler);
} }
void
ping_scheduler_arm(const struct ping_config *config)
{
struct itimerval itv;
double interval;
if (HAS_FLAG(config->flags, FLAG_FLOOD))
return;
interval = (double)config->interval;
itv.it_value.tv_sec = (time_t)interval;
itv.it_value.tv_usec = (suseconds_t)((interval - (double)(time_t)interval)
* 1e6);
itv.it_interval.tv_sec = 0;
itv.it_interval.tv_usec = 0;
setitimer(ITIMER_REAL, &itv, NULL);
}
void
ping_scheduler_select_tv(const struct ping_config *config, struct timeval *tv)
{
tv->tv_usec = 0;
tv->tv_sec = (long)config->timeout * !HAS_FLAG(config->flags, FLAG_FLOOD);
}
static void
sigalrm_handler(__unused int sig)
{
if (NULL != g_state)
g_state->send_flag = 1;
}
static void
sigint_handler(__unused int sig)
{
if (NULL != g_state)
g_state->stop_flag = 1;
}
static void static void
install_signal(int signum, void (*handler)(int)) install_signal(int signum, void (*handler)(int))
{ {
@ -66,3 +27,18 @@ install_signal(int signum, void (*handler)(int))
sa.sa_flags = 0; sa.sa_flags = 0;
sigaction(signum, &sa, NULL); sigaction(signum, &sa, NULL);
} }
static void inline
sigalrm_handler(__unused int sig)
{
if (NULL != g_state)
g_state->send_flag = 1;
}
static void inline
sigint_handler(__unused int sig)
{
if (NULL != g_state)
g_state->stop_flag = 1;
}

View file

@ -0,0 +1,9 @@
#include "ping/ft_ping_flags.h"
#include "internal/ping/scheduler.h"
void
ping_scheduler_select_tv(const struct ping_config *config, struct timeval *tv)
{
tv->tv_usec = 0;
tv->tv_sec = (long)config->timeout * !HAS_FLAG(config->flags, FLAG_FLOOD);
}