changeset 2529:339da812982c

axe r->port
author Igor Sysoev <igor@sysoev.ru>
date Mon, 23 Feb 2009 21:19:35 +0000
parents c1975ccd0215
children 5d53ad3a8319
files src/http/ngx_http_core_module.c src/http/ngx_http_header_filter_module.c src/http/ngx_http_request.c src/http/ngx_http_request.h
diffstat 4 files changed, 27 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -2061,7 +2061,6 @@ ngx_http_subrequest(ngx_http_request_t *
         c->data = sr;
     }
 
-    sr->port = r->port;
     sr->port_text = r->port_text;
 
     sr->variables = r->variables;
--- a/src/http/ngx_http_header_filter_module.c
+++ b/src/http/ngx_http_header_filter_module.c
@@ -155,12 +155,17 @@ ngx_http_header_filter(ngx_http_request_
     size_t                     len;
     ngx_str_t                  host;
     ngx_buf_t                 *b;
-    ngx_uint_t                 status, i;
+    ngx_uint_t                 status, i, port;
     ngx_chain_t                out;
     ngx_list_part_t           *part;
     ngx_table_elt_t           *header;
+    ngx_connection_t          *c;
     ngx_http_core_loc_conf_t  *clcf;
     ngx_http_core_srv_conf_t  *cscf;
+    struct sockaddr_in        *sin;
+#if (NGX_HAVE_INET6)
+    struct sockaddr_in6       *sin6;
+#endif
     u_char                     addr[NGX_SOCKADDR_STRLEN];
 
     r->header_sent = 1;
@@ -297,13 +302,29 @@ ngx_http_header_filter(ngx_http_request_
             }
         }
 
+        c = r->connection;
+
+        switch (c->local_sockaddr->sa_family) {
+
+#if (NGX_HAVE_INET6)
+        case AF_INET6:
+            sin6 = (struct sockaddr_in6 *) c->local_sockaddr;
+            port = sin6->sin6_port;
+            break;
+#endif
+        default: /* AF_INET */
+            sin = (struct sockaddr_in *) c->local_sockaddr;
+            port = sin->sin_port;
+            break;
+        }
+
 #if (NGX_HTTP_SSL)
         if (r->connection->ssl) {
             len += sizeof("Location: https://") - 1
                    + host.len
                    + r->headers_out.location->value.len + 2;
 
-            if (clcf->port_in_redirect && r->port != 443) {
+            if (clcf->port_in_redirect && port != 443) {
                 len += r->port_text->len;
             }
 
@@ -314,7 +335,7 @@ ngx_http_header_filter(ngx_http_request_
                    + host.len
                    + r->headers_out.location->value.len + 2;
 
-            if (clcf->port_in_redirect && r->port != 80) {
+            if (clcf->port_in_redirect && port != 80) {
                 len += r->port_text->len;
             }
         }
@@ -322,6 +343,7 @@ ngx_http_header_filter(ngx_http_request_
     } else {
         host.len = 0;
         host.data = NULL;
+        port = 0;
     }
 
     if (r->chunked) {
@@ -476,14 +498,14 @@ ngx_http_header_filter(ngx_http_request_
         if (clcf->port_in_redirect) {
 #if (NGX_HTTP_SSL)
             if (r->connection->ssl) {
-                if (r->port != 443) {
+                if (port != 443) {
                     b->last = ngx_copy(b->last, r->port_text->data,
                                        r->port_text->len);
                 }
             } else
 #endif
             {
-                if (r->port != 80) {
+                if (port != 80) {
                     b->last = ngx_copy(b->last, r->port_text->data,
                                        r->port_text->len);
                 }
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -300,7 +300,6 @@ ngx_http_init_request(ngx_event_t *rev)
 
     port = c->listening->servers;
 
-    r->port = port->port;
     r->port_text = &port->port_text;
 
     r->connection = c;
--- a/src/http/ngx_http_request.h
+++ b/src/http/ngx_http_request.h
@@ -384,7 +384,6 @@ struct ngx_http_request_s {
     ngx_http_post_subrequest_t       *post_subrequest;
     ngx_http_posted_request_t        *posted_requests;
 
-    ngx_uint_t                        port;
     ngx_str_t                        *port_text;    /* ":80" */
     ngx_http_virtual_names_t         *virtual_names;