[MINOR] make use of set_host_port() and get_host_port() to get rid of family mismatches
This also simplifies the code and makes it more auditable.
diff --git a/src/proto_tcp.c b/src/proto_tcp.c
index 3b6d39d..8a04f16 100644
--- a/src/proto_tcp.c
+++ b/src/proto_tcp.c
@@ -316,14 +316,7 @@
break;
fdinfo[fd].port_range = srv->sport_range;
- switch (src.ss_family) {
- case AF_INET:
- ((struct sockaddr_in *)&src)->sin_port = htons(fdinfo[fd].local_port);
- break;
- case AF_INET6:
- ((struct sockaddr_in6 *)&src)->sin6_port = htons(fdinfo[fd].local_port);
- break;
- }
+ set_host_port(&src, fdinfo[fd].local_port);
ret = tcp_bind_socket(fd, flags, &src, &si->addr.s.from);
} while (ret != 0); /* binding NOK */
@@ -1305,11 +1298,7 @@
acl_fetch_sport(struct proxy *px, struct session *l4, void *l7, int dir,
struct acl_expr *expr, struct acl_test *test)
{
- if (l4->si[0].addr.c.from.ss_family == AF_INET)
- test->i = ntohs(((struct sockaddr_in *)&l4->si[0].addr.c.from)->sin_port);
- else if (l4->si[0].addr.c.from.ss_family == AF_INET6)
- test->i = ntohs(((struct sockaddr_in6 *)(&l4->si[0].addr.c.from))->sin6_port);
- else
+ if (!(test->i = get_host_port(&l4->si[0].addr.c.from)))
return 0;
test->flags = 0;
@@ -1376,11 +1365,7 @@
if (!(l4->flags & SN_FRT_ADDR_SET))
get_frt_addr(l4);
- if (l4->si[0].addr.c.to.ss_family == AF_INET)
- test->i = ntohs(((struct sockaddr_in *)&l4->si[0].addr.c.to)->sin_port);
- else if (l4->si[0].addr.c.to.ss_family == AF_INET6)
- test->i = ntohs(((struct sockaddr_in6 *)(&l4->si[0].addr.c.to))->sin6_port);
- else
+ if (!(test->i = get_host_port(&l4->si[0].addr.c.to)))
return 0;
test->flags = 0;
@@ -1394,11 +1379,7 @@
if (!(l4->flags & SN_FRT_ADDR_SET))
get_frt_addr(l4);
- if (l4->si[0].addr.c.to.ss_family == AF_INET)
- data->integer = ntohs(((struct sockaddr_in *)&l4->si[0].addr.c.to)->sin_port);
- else if (l4->si[0].addr.c.to.ss_family == AF_INET6)
- data->integer = ntohs(((struct sockaddr_in6 *)&l4->si[0].addr.c.to)->sin6_port);
- else
+ if (!(data->integer = get_host_port(&l4->si[0].addr.c.to)))
return 0;
return 1;