From dc93ade1436f619a90a9eee7d98ff91ecaccb6ab Mon Sep 17 00:00:00 2001 From: David Härdeman Date: Wed, 1 Jul 2020 16:50:45 +0200 Subject: Return some sanity to DNS handling --- minecproxy/server-config.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'minecproxy/server-config.c') diff --git a/minecproxy/server-config.c b/minecproxy/server-config.c index 1bc3d38..aab9ffb 100644 --- a/minecproxy/server-config.c +++ b/minecproxy/server-config.c @@ -16,6 +16,18 @@ #include "server-config.h" #include "config.h" +void server_cfg_async_dns_result(struct server_config *scfg) +{ + struct server *server = container_of(scfg, struct server, scfg); + + scfg_async_dns_result(scfg); + + if (list_empty(&server->scfg.dnslookups)) { + uring_task_put(&server->task); + server_commit(server); + } +} + static void scfg_read_cb(struct uring_task *task, int res) { struct server *server = container_of(task, struct server, task); @@ -34,14 +46,20 @@ static void scfg_read_cb(struct uring_task *task, int res) debug(DBG_CFG, "%s: parsing cfg (%i bytes)", server->name, res); uring_task_close_fd(&server->task); - if (!scfg_parse(&server->scfg, server->tbuf.buf, - server_async_dns_update, &lineno, &error)) { + if (!scfg_parse(&server->scfg, server->tbuf.buf, true, + &lineno, &error)) { error("%s: failed to parse config file, line %u: %s", server->name, lineno, error); server_delete(server); return; } + if (!list_empty(&server->scfg.dnslookups)) { + uring_task_get(&server->task); + scfg_async_dns_start(&server->scfg); + return; + } + server_commit(server); } -- cgit v1.2.3