summaryrefslogtreecommitdiff
path: root/server.c
diff options
context:
space:
mode:
Diffstat (limited to 'server.c')
-rw-r--r--server.c21
1 files changed, 21 insertions, 0 deletions
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;
}
@@ -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;