Welcome! Log In Create A New Profile

Advanced

[nginx] Proxy: changed interface of some internal functions.

September 28, 2020 05:44AM
details: https://hg.nginx.org/nginx/rev/5c7917292b29
branches:
changeset: 7715:5c7917292b29
user: Ruslan Ermilov <ru@nginx.com>
date: Sun Sep 27 23:21:10 2020 +0300
description:
Proxy: changed interface of some internal functions.

This is in preparation for the next change.

Also, moved optimization from ngx_http_proxy_rewrite_regex_handler()
to ngx_http_proxy_rewrite().

diffstat:

src/http/modules/ngx_http_proxy_module.c | 66 +++++++++++++++----------------
1 files changed, 32 insertions(+), 34 deletions(-)

diffs (178 lines):

diff -r 8dbc9ee97998 -r 5c7917292b29 src/http/modules/ngx_http_proxy_module.c
--- a/src/http/modules/ngx_http_proxy_module.c Sun Sep 27 23:21:09 2020 +0300
+++ b/src/http/modules/ngx_http_proxy_module.c Sun Sep 27 23:21:10 2020 +0300
@@ -18,7 +18,7 @@ typedef struct {
typedef struct ngx_http_proxy_rewrite_s ngx_http_proxy_rewrite_t;

typedef ngx_int_t (*ngx_http_proxy_rewrite_pt)(ngx_http_request_t *r,
- ngx_table_elt_t *h, size_t prefix, size_t len,
+ ngx_str_t *value, size_t prefix, size_t len,
ngx_http_proxy_rewrite_t *pr);

struct ngx_http_proxy_rewrite_s {
@@ -161,7 +161,7 @@ static ngx_int_t ngx_http_proxy_rewrite_
static ngx_int_t ngx_http_proxy_rewrite_cookie_value(ngx_http_request_t *r,
ngx_table_elt_t *h, u_char *value, ngx_array_t *rewrites);
static ngx_int_t ngx_http_proxy_rewrite(ngx_http_request_t *r,
- ngx_table_elt_t *h, size_t prefix, size_t len, ngx_str_t *replacement);
+ ngx_str_t *value, size_t prefix, size_t len, ngx_str_t *replacement);

static ngx_int_t ngx_http_proxy_add_variables(ngx_conf_t *cf);
static void *ngx_http_proxy_create_main_conf(ngx_conf_t *cf);
@@ -2584,7 +2584,7 @@ ngx_http_proxy_rewrite_redirect(ngx_http
len = h->value.len - prefix;

for (i = 0; i < plcf->redirects->nelts; i++) {
- rc = pr[i].handler(r, h, prefix, len, &pr[i]);
+ rc = pr[i].handler(r, &h->value, prefix, len, &pr[i]);

if (rc != NGX_DECLINED) {
return rc;
@@ -2669,7 +2669,7 @@ ngx_http_proxy_rewrite_cookie_value(ngx_
pr = rewrites->elts;

for (i = 0; i < rewrites->nelts; i++) {
- rc = pr[i].handler(r, h, prefix, len, &pr[i]);
+ rc = pr[i].handler(r, &h->value, prefix, len, &pr[i]);

if (rc != NGX_DECLINED) {
return rc;
@@ -2681,8 +2681,8 @@ ngx_http_proxy_rewrite_cookie_value(ngx_


static ngx_int_t
-ngx_http_proxy_rewrite_complex_handler(ngx_http_request_t *r,
- ngx_table_elt_t *h, size_t prefix, size_t len, ngx_http_proxy_rewrite_t *pr)
+ngx_http_proxy_rewrite_complex_handler(ngx_http_request_t *r, ngx_str_t *value,
+ size_t prefix, size_t len, ngx_http_proxy_rewrite_t *pr)
{
ngx_str_t pattern, replacement;

@@ -2691,8 +2691,7 @@ ngx_http_proxy_rewrite_complex_handler(n
}

if (pattern.len > len
- || ngx_rstrncmp(h->value.data + prefix, pattern.data,
- pattern.len) != 0)
+ || ngx_rstrncmp(value->data + prefix, pattern.data, pattern.len) != 0)
{
return NGX_DECLINED;
}
@@ -2701,20 +2700,20 @@ ngx_http_proxy_rewrite_complex_handler(n
return NGX_ERROR;
}

- return ngx_http_proxy_rewrite(r, h, prefix, pattern.len, &replacement);
+ return ngx_http_proxy_rewrite(r, value, prefix, pattern.len, &replacement);
}


#if (NGX_PCRE)

static ngx_int_t
-ngx_http_proxy_rewrite_regex_handler(ngx_http_request_t *r, ngx_table_elt_t *h,
+ngx_http_proxy_rewrite_regex_handler(ngx_http_request_t *r, ngx_str_t *value,
size_t prefix, size_t len, ngx_http_proxy_rewrite_t *pr)
{
ngx_str_t pattern, replacement;

pattern.len = len;
- pattern.data = h->value.data + prefix;
+ pattern.data = value->data + prefix;

if (ngx_http_regex_exec(r, pr->pattern.regex, &pattern) != NGX_OK) {
return NGX_DECLINED;
@@ -2724,20 +2723,15 @@ ngx_http_proxy_rewrite_regex_handler(ngx
return NGX_ERROR;
}

- if (prefix == 0 && h->value.len == len) {
- h->value = replacement;
- return NGX_OK;
- }
-
- return ngx_http_proxy_rewrite(r, h, prefix, len, &replacement);
+ return ngx_http_proxy_rewrite(r, value, prefix, len, &replacement);
}

#endif


static ngx_int_t
-ngx_http_proxy_rewrite_domain_handler(ngx_http_request_t *r,
- ngx_table_elt_t *h, size_t prefix, size_t len, ngx_http_proxy_rewrite_t *pr)
+ngx_http_proxy_rewrite_domain_handler(ngx_http_request_t *r, ngx_str_t *value,
+ size_t prefix, size_t len, ngx_http_proxy_rewrite_t *pr)
{
u_char *p;
ngx_str_t pattern, replacement;
@@ -2746,7 +2740,7 @@ ngx_http_proxy_rewrite_domain_handler(ng
return NGX_ERROR;
}

- p = h->value.data + prefix;
+ p = value->data + prefix;

if (p[0] == '.') {
p++;
@@ -2762,18 +2756,23 @@ ngx_http_proxy_rewrite_domain_handler(ng
return NGX_ERROR;
}

- return ngx_http_proxy_rewrite(r, h, prefix, len, &replacement);
+ return ngx_http_proxy_rewrite(r, value, prefix, len, &replacement);
}


static ngx_int_t
-ngx_http_proxy_rewrite(ngx_http_request_t *r, ngx_table_elt_t *h, size_t prefix,
+ngx_http_proxy_rewrite(ngx_http_request_t *r, ngx_str_t *value, size_t prefix,
size_t len, ngx_str_t *replacement)
{
u_char *p, *data;
size_t new_len;

- new_len = replacement->len + h->value.len - len;
+ if (len == value->len) {
+ *value = *replacement;
+ return NGX_OK;
+ }
+
+ new_len = replacement->len + value->len - len;

if (replacement->len > len) {

@@ -2782,23 +2781,22 @@ ngx_http_proxy_rewrite(ngx_http_request_
return NGX_ERROR;
}

- p = ngx_copy(data, h->value.data, prefix);
+ p = ngx_copy(data, value->data, prefix);
p = ngx_copy(p, replacement->data, replacement->len);

- ngx_memcpy(p, h->value.data + prefix + len,
- h->value.len - len - prefix + 1);
-
- h->value.data = data;
+ ngx_memcpy(p, value->data + prefix + len,
+ value->len - len - prefix + 1);
+
+ value->data = data;

} else {
- p = ngx_copy(h->value.data + prefix, replacement->data,
- replacement->len);
-
- ngx_memmove(p, h->value.data + prefix + len,
- h->value.len - len - prefix + 1);
+ p = ngx_copy(value->data + prefix, replacement->data, replacement->len);
+
+ ngx_memmove(p, value->data + prefix + len,
+ value->len - len - prefix + 1);
}

- h->value.len = new_len;
+ value->len = new_len;

return NGX_OK;
}
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[nginx] Proxy: changed interface of some internal functions.

ru@nginx.com 545 September 28, 2020 05:44AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 237
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready