summaryrefslogtreecommitdiff
path: root/server.c
diff options
context:
space:
mode:
authorDavid Härdeman <david@hardeman.nu>2020-06-19 00:07:33 +0200
committerDavid Härdeman <david@hardeman.nu>2020-06-19 00:07:33 +0200
commitb32800e33ec16f7c592fa09b1a8b1f30a2e9df77 (patch)
tree591605397c24a7876d46a41fb264085eda3bc8d8 /server.c
parent723458dfa7e6246b5de7c7943175c78cf901366a (diff)
Add an addrstr to struct sockaddr_in46, rename to struct saddr
Diffstat (limited to 'server.c')
-rw-r--r--server.c79
1 files changed, 35 insertions, 44 deletions
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, "<unknown>");
- 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;
}