From b32800e33ec16f7c592fa09b1a8b1f30a2e9df77 Mon Sep 17 00:00:00 2001 From: David Härdeman Date: Fri, 19 Jun 2020 00:07:33 +0200 Subject: Add an addrstr to struct sockaddr_in46, rename to struct saddr --- server.c | 79 ++++++++++++++++++++++++++++------------------------------------ 1 file changed, 35 insertions(+), 44 deletions(-) (limited to 'server.c') diff --git a/server.c b/server.c index f6b59b1..f0f8386 100644 --- a/server.c +++ b/server.c @@ -24,9 +24,8 @@ #include "systemd.h" struct server_local { - struct sockaddr_in46 addr; - char addrstr[ADDRSTRLEN]; - struct sockaddr_in46 peer; + struct saddr local; + struct saddr client; struct uring_task task; struct list_head list; }; @@ -83,8 +82,9 @@ server_delete(struct cfg *cfg, struct server *scfg) { struct server_local *local, *ltmp; struct server_proxy *proxy, *ptmp; - struct sockaddr_in46 *remote, *rtmp; - struct sockaddr_in46 *rcon, *rctmp; + struct saddr *remote; + struct saddr *rcon; + struct saddr *tmp; verbose("Removing server %s\n", scfg->name); @@ -97,12 +97,12 @@ server_delete(struct cfg *cfg, struct server *scfg) list_for_each_entry_safe(proxy, ptmp, &scfg->proxys, list) proxy_delete(cfg, proxy); - list_for_each_entry_safe(rcon, rctmp, &scfg->rcons, list) { + list_for_each_entry_safe(rcon, tmp, &scfg->rcons, list) { list_del(&rcon->list); xfree(rcon); } - list_for_each_entry_safe(remote, rtmp, &scfg->remotes, list) { + list_for_each_entry_safe(remote, tmp, &scfg->remotes, list) { list_del(&remote->list); xfree(remote); } @@ -132,9 +132,8 @@ static void server_dump(struct server *scfg) { struct server_local *local; - struct sockaddr_in46 *remote; - struct sockaddr_in46 *rcon; - char abuf[ADDRSTRLEN]; + struct saddr *remote; + struct saddr *rcon; verbose("Server %s:\n", scfg->name); switch (scfg->type) { @@ -152,21 +151,21 @@ server_dump(struct server *scfg) verbose(" * Announce port: %" PRIu16 "\n", scfg->announce_port); if (!list_empty(&scfg->locals)) { - verbose(" * Listening:\n"); + verbose(" * Local:\n"); list_for_each_entry(local, &scfg->locals, list) - verbose(" * %s\n", local->addrstr); + verbose(" * %s\n", local->local.addrstr); } if (!list_empty(&scfg->remotes)) { verbose(" * Remote:\n"); list_for_each_entry(remote, &scfg->remotes, list) - verbose(" * %s\n", sockaddr_to_str(remote, abuf, sizeof(abuf))); + verbose(" * %s\n", remote->addrstr); } if (!list_empty(&scfg->rcons)) { verbose(" * RCon:\n"); list_for_each_entry(rcon, &scfg->rcons, list) - verbose(" * %s\n", sockaddr_to_str(rcon, abuf, sizeof(abuf))); + verbose(" * %s\n", rcon->addrstr); } verbose("\n"); @@ -188,9 +187,6 @@ server_local_accept(struct cfg *cfg, struct uring_task *task, int res) struct server_local *local = container_of(task, struct server_local, task); struct server *scfg = container_of(task->parent, struct server, task); struct server_proxy *proxy; - char pbuf[ADDRSTRLEN]; - struct sockaddr_in46 laddr = { .addrlen = sizeof(laddr) } ; - char lbuf[ADDRSTRLEN]; debug(DBG_SRV, "task %p, res %i, scfg %s\n", task, res, scfg->name); @@ -204,15 +200,10 @@ server_local_accept(struct cfg *cfg, struct uring_task *task, int res) goto out; } - if (getsockname(res, (struct sockaddr *)&laddr.storage, &laddr.addrlen) < 0) - sprintf(lbuf, ""); - else - sockaddr_to_str(&laddr, lbuf, sizeof(lbuf)); - - sockaddr_to_str(&local->peer, pbuf, sizeof(pbuf)); + saddr_set_str(&local->client); - verbose("%s: incoming proxy connection: %s -> %s (%s)\n", - scfg->name, pbuf, lbuf, local->addrstr); + verbose("%s: incoming proxy connection: %s -> %s\n", + scfg->name, local->client.addrstr, local->local.addrstr); if (list_empty(&scfg->remotes)) { /* This shouldn't be possible, checked before opening local */ @@ -221,12 +212,12 @@ server_local_accept(struct cfg *cfg, struct uring_task *task, int res) goto out; } - proxy = proxy_new(cfg, scfg, &local->peer, res); + proxy = proxy_new(cfg, scfg, &local->client, res); if (!proxy) uring_close(cfg, &local->task, res); out: - uring_accept(cfg, &local->task, &local->peer, server_local_accept); + uring_accept(cfg, &local->task, &local->client, server_local_accept); } static bool @@ -236,7 +227,7 @@ server_local_open(struct cfg *cfg, struct server *scfg, struct server_local *loc int option; int r; - sfd = socket(local->addr.storage.ss_family, SOCK_STREAM | SOCK_CLOEXEC, 0); + sfd = socket(local->local.storage.ss_family, SOCK_STREAM | SOCK_CLOEXEC, 0); if (sfd < 0) { error("socket: %m"); goto out; @@ -261,7 +252,7 @@ server_local_open(struct cfg *cfg, struct server *scfg, struct server_local *loc socket_set_low_latency(cfg, sfd); - r = bind(sfd, (struct sockaddr *)&local->addr.storage, local->addr.addrlen); + r = bind(sfd, (struct sockaddr *)&local->local.storage, local->local.addrlen); if (r < 0) { error("bind: %m"); goto out; @@ -274,7 +265,7 @@ server_local_open(struct cfg *cfg, struct server *scfg, struct server_local *loc } uring_task_set_fd(&local->task, sfd); - uring_accept(cfg, &local->task, &local->peer, server_local_accept); + uring_accept(cfg, &local->task, &local->client, server_local_accept); return true; out: @@ -508,7 +499,7 @@ server_commit(struct cfg *cfg, struct server *scfg) } list_for_each_entry(local, &scfg->locals, list) { - port = sockaddr_port(&local->addr); + port = saddr_port(&local->local); if (port == 0) { error("%s: invalid local port\n", scfg->name); @@ -570,21 +561,21 @@ server_commit(struct cfg *cfg, struct server *scfg) } bool -server_add_remote(struct cfg *cfg, struct server *scfg, struct sockaddr_in46 *addr) +server_add_remote(struct cfg *cfg, struct server *scfg, struct saddr *remote) { - if (!scfg || !addr) + if (!scfg || !remote) return false; - list_add(&addr->list, &scfg->remotes); + list_add(&remote->list, &scfg->remotes); return true; } bool -server_add_local(struct cfg *cfg, struct server *scfg, struct sockaddr_in46 *addr) +server_add_local(struct cfg *cfg, struct server *scfg, struct saddr *saddr) { struct server_local *local; - if (!scfg || !addr) { + if (!scfg || !saddr) { error("missing arguments\n"); return false; } @@ -595,23 +586,23 @@ server_add_local(struct cfg *cfg, struct server *scfg, struct sockaddr_in46 *add return false; } - local->addr.storage = addr->storage; - local->addr.addrlen = addr->addrlen; + local->local.storage = saddr->storage; + local->local.addrlen = saddr->addrlen; + saddr_set_str(&local->local); uring_task_init(&local->task, "local", &scfg->task, server_local_free); - sockaddr_to_str(&local->addr, local->addrstr, sizeof(local->addrstr)); + list_add(&local->list, &scfg->locals); - xfree(addr); + xfree(saddr); return true; } bool -server_add_rcon(struct cfg *cfg, struct server *scfg, - struct sockaddr_in46 *addr) +server_add_rcon(struct cfg *cfg, struct server *scfg, struct saddr *rcon) { - if (!scfg || !addr) + if (!scfg || !rcon) return false; - list_add(&addr->list, &scfg->rcons); + list_add(&rcon->list, &scfg->rcons); return true; } -- cgit v1.2.3