diff options
author | David Härdeman <david@hardeman.nu> | 2020-06-07 23:41:54 +0200 |
---|---|---|
committer | David Härdeman <david@hardeman.nu> | 2020-06-07 23:41:54 +0200 |
commit | 1e2f3e437492ecc841bc9852ab46ce0e218e4723 (patch) | |
tree | 0d58d87bf7c3c60b1b92139d1966af08f42d49af /server.c | |
parent | f7804084f43403b1370851de9d459c49f55baa9a (diff) |
Add basic support for checking idle status
Diffstat (limited to 'server.c')
-rw-r--r-- | server.c | 21 |
1 files changed, 21 insertions, 0 deletions
@@ -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; } @@ -309,6 +319,16 @@ server_add_local(struct cfg *cfg, struct server *scfg, struct sockaddr_in46 *add } 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) { if (!scfg || scfg->announce_port != 0) @@ -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; |