summaryrefslogtreecommitdiff
path: root/utils.c
diff options
context:
space:
mode:
authorDavid Härdeman <david@hardeman.nu>2020-06-19 00:57:54 +0200
committerDavid Härdeman <david@hardeman.nu>2020-06-19 00:57:54 +0200
commit3d6bdb2cc11a293f536f38a975e4ae2095d467fa (patch)
tree26e48d2e87e8f137129cdf9b95e0824f8e8350ae /utils.c
parentb32800e33ec16f7c592fa09b1a8b1f30a2e9df77 (diff)
Add some helper functions for saddrs, reduce code duplication
Diffstat (limited to 'utils.c')
-rw-r--r--utils.c29
1 files changed, 26 insertions, 3 deletions
diff --git a/utils.c b/utils.c
index 9071cb3..8c7b663 100644
--- a/utils.c
+++ b/utils.c
@@ -196,14 +196,14 @@ connection_set_local(struct cfg *cfg, struct connection *conn, int fd)
&conn->local.addrlen) < 0)
sprintf(conn->local.addrstr, "<unknown>");
else
- saddr_set_str(&conn->local);
+ saddr_set_addrstr(&conn->local);
}
void
connection_set_remote(struct cfg *cfg, struct connection *conn, struct saddr *remote)
{
conn->remote = *remote;
- saddr_set_str(&conn->remote);
+ saddr_set_addrstr(&conn->remote);
}
static void connect_next(struct cfg *cfg, struct uring_task *task, struct connection *conn);
@@ -322,7 +322,30 @@ saddr_addr(struct saddr *saddr, char *buf, size_t len)
}
void
-saddr_set_str(struct saddr *saddr)
+saddr_set_ipv4(struct saddr *saddr, in_addr_t ip, in_port_t port)
+{
+ memset(&saddr->in4, 0, sizeof(saddr->in4));
+ saddr->in4.sin_family = AF_INET;
+ saddr->in4.sin_port = port;
+ saddr->in4.sin_addr.s_addr = ip;
+ saddr->addrlen = sizeof(saddr->in4);
+ saddr_set_addrstr(saddr);
+}
+
+void
+saddr_set_ipv6(struct saddr *saddr, const struct in6_addr *ip, in_port_t port)
+{
+ memset(&saddr->in6, 0, sizeof(saddr->in6));
+ saddr->in6.sin6_family = AF_INET6;
+ saddr->in6.sin6_port = port;
+ if (ip)
+ saddr->in6.sin6_addr = *ip;
+ saddr->addrlen = sizeof(saddr->in6);
+ saddr_set_addrstr(saddr);
+}
+
+void
+saddr_set_addrstr(struct saddr *saddr)
{
char abuf[ADDRSTRLEN];