summaryrefslogtreecommitdiff
path: root/minecproxy/server-config.c
diff options
context:
space:
mode:
authorDavid Härdeman <david@hardeman.nu>2020-07-01 16:50:45 +0200
committerDavid Härdeman <david@hardeman.nu>2020-07-01 16:50:45 +0200
commitdc93ade1436f619a90a9eee7d98ff91ecaccb6ab (patch)
tree7437c9ba5cb2a51be24d9e4a37605248edb983ba /minecproxy/server-config.c
parent86727730b8e4cfce2a4ecf2e787c8bf7f57af924 (diff)
Return some sanity to DNS handling
Diffstat (limited to 'minecproxy/server-config.c')
-rw-r--r--minecproxy/server-config.c22
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);
}