From 1e2f3e437492ecc841bc9852ab46ce0e218e4723 Mon Sep 17 00:00:00 2001 From: David Härdeman Date: Sun, 7 Jun 2020 23:41:54 +0200 Subject: Add basic support for checking idle status --- server.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'server.c') diff --git a/server.c b/server.c index 739fecf..77787fb 100644 --- a/server.c +++ b/server.c @@ -9,6 +9,7 @@ #include "server.h" #include "proxy.h" #include "utils.h" +#include "idle.h" struct server_local { struct sockaddr_in46 addr; @@ -29,6 +30,8 @@ server_refdump(struct server *server) uring_task_refdump(&local->task); list_for_each_entry(proxy, &server->proxys, list) proxy_refdump(proxy); + if (server->idle) + idle_refdump(server->idle); } static void @@ -51,6 +54,8 @@ server_delete(struct cfg *cfg, struct server *scfg) fprintf(stderr, "Removing server cfg: %s\n", scfg->name); + idle_delete(cfg, scfg); + list_for_each_entry_safe(remote, rtmp, &scfg->remotes, list) { list_del(&remote->list); free(remote); @@ -217,6 +222,8 @@ server_commit(struct cfg *cfg, struct server *scfg) case SERVER_TYPE_ANNOUNCE: if (scfg->announce_port < 1) return false; + if (scfg->idle_timeout > 0) + return false; if (!list_empty(&scfg->locals)) return false; if (!list_empty(&scfg->remotes)) @@ -273,6 +280,9 @@ server_commit(struct cfg *cfg, struct server *scfg) list_for_each_entry(local, &scfg->locals, list) { server_local_open(cfg, scfg, local); } + + idle_init(cfg, scfg); + return true; } @@ -308,6 +318,16 @@ server_add_local(struct cfg *cfg, struct server *scfg, struct sockaddr_in46 *add return true; } +bool +server_set_idle(struct cfg *cfg, struct server *scfg, uint16_t timeout) +{ + if (!scfg || scfg->idle_timeout != 0) + return false; + + scfg->idle_timeout = timeout; + return true; +} + bool server_set_port(struct cfg *cfg, struct server *scfg, uint16_t port) { @@ -382,6 +402,7 @@ server_new(struct cfg *cfg, const char *name) memset(&scfg->mcast_msg, 0, sizeof(scfg->mcast_msg)); scfg->mcast_msg.msg_iov = &scfg->mcast_iov; scfg->mcast_msg.msg_iovlen = 1; + scfg->idle_timeout = 0; list_add(&scfg->list, &cfg->servers); return scfg; -- cgit v1.2.3