diff options
author | David Härdeman <david@hardeman.nu> | 2020-07-01 16:50:45 +0200 |
---|---|---|
committer | David Härdeman <david@hardeman.nu> | 2020-07-01 16:50:45 +0200 |
commit | dc93ade1436f619a90a9eee7d98ff91ecaccb6ab (patch) | |
tree | 7437c9ba5cb2a51be24d9e4a37605248edb983ba /minecproxy/server-config.c | |
parent | 86727730b8e4cfce2a4ecf2e787c8bf7f57af924 (diff) |
Return some sanity to DNS handling
Diffstat (limited to 'minecproxy/server-config.c')
-rw-r--r-- | minecproxy/server-config.c | 22 |
1 files changed, 20 insertions, 2 deletions
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); } |