From 3d6bdb2cc11a293f536f38a975e4ae2095d467fa Mon Sep 17 00:00:00 2001 From: David Härdeman Date: Fri, 19 Jun 2020 00:57:54 +0200 Subject: Add some helper functions for saddrs, reduce code duplication --- config.c | 46 +++++++++++----------------------------------- 1 file changed, 11 insertions(+), 35 deletions(-) (limited to 'config.c') diff --git a/config.c b/config.c index de0522e..bb107ef 100644 --- a/config.c +++ b/config.c @@ -103,10 +103,7 @@ strtosockaddrs(const char *str, struct list_head *list) if (strtou16_strict(tmp, &port) < 0) goto out; - saddr->in6.sin6_family = AF_INET6; - saddr->in6.sin6_port = htons(port); - saddr->addrlen = sizeof(saddr->in6); - saddr_set_str(saddr); + saddr_set_ipv6(saddr, NULL, htons(port)); } else if (*str == '*') { /* IPv4, *:p */ @@ -124,11 +121,7 @@ strtosockaddrs(const char *str, struct list_head *list) if (!saddr) goto out; - saddr->in4.sin_family = AF_INET; - saddr->in4.sin_addr.s_addr = INADDR_ANY; - saddr->in4.sin_port = htons(port); - saddr->addrlen = sizeof(saddr->in4); - saddr_set_str(saddr); + saddr_set_ipv4(saddr, INADDR_ANY, htons(port)); list_add(&saddr->list, list); } else if ((tmp = strchr(str, ':'))) { @@ -146,10 +139,7 @@ strtosockaddrs(const char *str, struct list_head *list) if (inet_pton(AF_INET, str, &saddr->in4.sin_addr) > 0) { debug(DBG_CFG, "got an IPv4:port (%s)\n", str); - saddr->in4.sin_family = AF_INET; - saddr->in4.sin_port = htons(port); - saddr->addrlen = sizeof(saddr->in4); - saddr_set_str(saddr); + saddr_set_ipv4(saddr, saddr->in4.sin_addr.s_addr, htons(port)); list_add(&saddr->list, list); goto success; } else { @@ -181,27 +171,21 @@ strtosockaddrs(const char *str, struct list_head *list) switch (ai->ai_family) { case AF_INET: { - struct sockaddr_in *naddr = (struct sockaddr_in *)ai->ai_addr; + struct sockaddr_in *in4 = (struct sockaddr_in *)ai->ai_addr; - saddr->in4.sin_family = AF_INET; - saddr->in4.sin_addr = naddr->sin_addr; - saddr->in4.sin_port = naddr->sin_port; - saddr->addrlen = sizeof(saddr->in4); - saddr_set_str(saddr); + saddr_set_ipv4(saddr, in4->sin_addr.s_addr, htons(port)); list_add(&saddr->list, list); break; } + case AF_INET6: { - struct sockaddr_in6 *naddr = (struct sockaddr_in6 *)ai->ai_addr; + struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)ai->ai_addr; - saddr->in6.sin6_family = AF_INET6; - saddr->in6.sin6_addr = naddr->sin6_addr; - saddr->in6.sin6_port = naddr->sin6_port; - saddr->addrlen = sizeof(saddr->in6); - saddr_set_str(saddr); + saddr_set_ipv6(saddr, &in6->sin6_addr, in6->sin6_port); list_add(&saddr->list, list); break; } + default: error("getaddrinfo(%s): unknown address family (%i)\n", str, ai->ai_family); @@ -220,22 +204,14 @@ strtosockaddrs(const char *str, struct list_head *list) if (!saddr) goto out; - saddr->in6.sin6_family = AF_INET6; - saddr->in6.sin6_addr = in6addr_any; - saddr->in6.sin6_port = htons(port); - saddr->addrlen = sizeof(saddr->in6); - saddr_set_str(saddr); + saddr_set_ipv6(saddr, &in6addr_any, htons(port)); list_add(&saddr->list, list); saddr = zmalloc(sizeof(*saddr)); if (!saddr) goto out; - saddr->in4.sin_family = AF_INET; - saddr->in4.sin_addr.s_addr = INADDR_ANY; - saddr->in4.sin_port = htons(port); - saddr->addrlen = sizeof(saddr->in4); - saddr_set_str(saddr); + saddr_set_ipv4(saddr, INADDR_ANY, htons(port)); list_add(&saddr->list, list); } else { -- cgit v1.2.3