diff options
author | David Härdeman <david@hardeman.nu> | 2020-06-19 00:57:54 +0200 |
---|---|---|
committer | David Härdeman <david@hardeman.nu> | 2020-06-19 00:57:54 +0200 |
commit | 3d6bdb2cc11a293f536f38a975e4ae2095d467fa (patch) | |
tree | 26e48d2e87e8f137129cdf9b95e0824f8e8350ae /config.c | |
parent | b32800e33ec16f7c592fa09b1a8b1f30a2e9df77 (diff) |
Add some helper functions for saddrs, reduce code duplication
Diffstat (limited to 'config.c')
-rw-r--r-- | config.c | 46 |
1 files changed, 11 insertions, 35 deletions
@@ -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 { |