summaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/ngx_inet.c83
-rw-r--r--src/core/ngx_inet.h2
-rw-r--r--src/core/ngx_proxy_protocol.c11
-rw-r--r--src/core/ngx_resolver.c16
4 files changed, 68 insertions, 44 deletions
diff --git a/src/core/ngx_inet.c b/src/core/ngx_inet.c
index 873bf734a..3590ee695 100644
--- a/src/core/ngx_inet.c
+++ b/src/core/ngx_inet.c
@@ -529,13 +529,9 @@ ngx_int_t
ngx_parse_addr_port(ngx_pool_t *pool, ngx_addr_t *addr, u_char *text,
size_t len)
{
- u_char *p, *last;
- size_t plen;
- ngx_int_t rc, port;
- struct sockaddr_in *sin;
-#if (NGX_HAVE_INET6)
- struct sockaddr_in6 *sin6;
-#endif
+ u_char *p, *last;
+ size_t plen;
+ ngx_int_t rc, port;
rc = ngx_parse_addr(pool, addr, text, len);
@@ -585,20 +581,7 @@ ngx_parse_addr_port(ngx_pool_t *pool, ngx_addr_t *addr, u_char *text,
return rc;
}
- switch (addr->sockaddr->sa_family) {
-
-#if (NGX_HAVE_INET6)
- case AF_INET6:
- sin6 = (struct sockaddr_in6 *) addr->sockaddr;
- sin6->sin6_port = htons((in_port_t) port);
- break;
-#endif
-
- default: /* AF_INET */
- sin = (struct sockaddr_in *) addr->sockaddr;
- sin->sin_port = htons((in_port_t) port);
- break;
- }
+ ngx_inet_set_port(addr->sockaddr, port);
return NGX_OK;
}
@@ -1356,3 +1339,61 @@ ngx_cmp_sockaddr(struct sockaddr *sa1, socklen_t slen1,
return NGX_OK;
}
+
+
+in_port_t
+ngx_inet_get_port(struct sockaddr *sa)
+{
+ struct sockaddr_in *sin;
+#if (NGX_HAVE_INET6)
+ struct sockaddr_in6 *sin6;
+#endif
+
+ switch (sa->sa_family) {
+
+#if (NGX_HAVE_INET6)
+ case AF_INET6:
+ sin6 = (struct sockaddr_in6 *) sa;
+ return ntohs(sin6->sin6_port);
+#endif
+
+#if (NGX_HAVE_UNIX_DOMAIN)
+ case AF_UNIX:
+ return 0;
+#endif
+
+ default: /* AF_INET */
+ sin = (struct sockaddr_in *) sa;
+ return ntohs(sin->sin_port);
+ }
+}
+
+
+void
+ngx_inet_set_port(struct sockaddr *sa, in_port_t port)
+{
+ struct sockaddr_in *sin;
+#if (NGX_HAVE_INET6)
+ struct sockaddr_in6 *sin6;
+#endif
+
+ switch (sa->sa_family) {
+
+#if (NGX_HAVE_INET6)
+ case AF_INET6:
+ sin6 = (struct sockaddr_in6 *) sa;
+ sin6->sin6_port = htons(port);
+ break;
+#endif
+
+#if (NGX_HAVE_UNIX_DOMAIN)
+ case AF_UNIX:
+ break;
+#endif
+
+ default: /* AF_INET */
+ sin = (struct sockaddr_in *) sa;
+ sin->sin_port = htons(port);
+ break;
+ }
+}
diff --git a/src/core/ngx_inet.h b/src/core/ngx_inet.h
index 531d2640c..97dc354f8 100644
--- a/src/core/ngx_inet.h
+++ b/src/core/ngx_inet.h
@@ -121,6 +121,8 @@ ngx_int_t ngx_parse_url(ngx_pool_t *pool, ngx_url_t *u);
ngx_int_t ngx_inet_resolve_host(ngx_pool_t *pool, ngx_url_t *u);
ngx_int_t ngx_cmp_sockaddr(struct sockaddr *sa1, socklen_t slen1,
struct sockaddr *sa2, socklen_t slen2, ngx_uint_t cmp_port);
+in_port_t ngx_inet_get_port(struct sockaddr *sa);
+void ngx_inet_set_port(struct sockaddr *sa, in_port_t port);
#endif /* _NGX_INET_H_INCLUDED_ */
diff --git a/src/core/ngx_proxy_protocol.c b/src/core/ngx_proxy_protocol.c
index 3e54d4255..523ec35dd 100644
--- a/src/core/ngx_proxy_protocol.c
+++ b/src/core/ngx_proxy_protocol.c
@@ -141,19 +141,11 @@ ngx_proxy_protocol_write(ngx_connection_t *c, u_char *buf, u_char *last)
case AF_INET:
buf = ngx_cpymem(buf, "PROXY TCP4 ", sizeof("PROXY TCP4 ") - 1);
-
- port = ntohs(((struct sockaddr_in *) c->sockaddr)->sin_port);
- lport = ntohs(((struct sockaddr_in *) c->local_sockaddr)->sin_port);
-
break;
#if (NGX_HAVE_INET6)
case AF_INET6:
buf = ngx_cpymem(buf, "PROXY TCP6 ", sizeof("PROXY TCP6 ") - 1);
-
- port = ntohs(((struct sockaddr_in6 *) c->sockaddr)->sin6_port);
- lport = ntohs(((struct sockaddr_in6 *) c->local_sockaddr)->sin6_port);
-
break;
#endif
@@ -169,5 +161,8 @@ ngx_proxy_protocol_write(ngx_connection_t *c, u_char *buf, u_char *last)
buf += ngx_sock_ntop(c->local_sockaddr, c->local_socklen, buf, last - buf,
0);
+ port = ngx_inet_get_port(c->sockaddr);
+ lport = ngx_inet_get_port(c->local_sockaddr);
+
return ngx_slprintf(buf, last, " %ui %ui" CRLF, port, lport);
}
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
index e06c2f8cf..53dae6b0d 100644
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -2996,12 +2996,8 @@ ngx_resolver_srv_names_handler(ngx_resolver_ctx_t *cctx)
ngx_addr_t *addrs;
ngx_resolver_t *r;
ngx_sockaddr_t *sockaddr;
- struct sockaddr_in *sin;
ngx_resolver_ctx_t *ctx;
ngx_resolver_srv_name_t *srv;
-#if (NGX_HAVE_INET6)
- struct sockaddr_in6 *sin6;
-#endif
r = cctx->resolver;
ctx = cctx->data;
@@ -3045,17 +3041,7 @@ ngx_resolver_srv_names_handler(ngx_resolver_ctx_t *cctx)
ngx_memcpy(&sockaddr[i], cctx->addrs[i].sockaddr,
addrs[i].socklen);
- switch (addrs[i].sockaddr->sa_family) {
-#if (NGX_HAVE_INET6)
- case AF_INET6:
- sin6 = (struct sockaddr_in6 *) addrs[i].sockaddr;
- sin6->sin6_port = htons(srv->port);
- break;
-#endif
- default: /* AF_INET */
- sin = (struct sockaddr_in *) addrs[i].sockaddr;
- sin->sin_port = htons(srv->port);
- }
+ ngx_inet_set_port(addrs[i].sockaddr, srv->port);
}
srv->addrs = addrs;