⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ngx_http_variables.c

📁 Nginx是一个高性能的HTTP和反向代理服务器
💻 C
📖 第 1 页 / 共 3 页
字号:
    vv->not_found = 1;    if (nowarn == 0) {        ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,                      "unknown \"%V\" variable", name);    }    return vv;}static ngx_int_tngx_http_variable_request(ngx_http_request_t *r, ngx_http_variable_value_t *v,    uintptr_t data){    ngx_str_t  *s;    s = (ngx_str_t *) ((char *) r + data);    if (s->data) {        v->len = s->len;        v->valid = 1;        v->no_cacheable = 0;        v->not_found = 0;        v->data = s->data;    } else {        v->not_found = 1;    }    return NGX_OK;}static voidngx_http_variable_request_set(ngx_http_request_t *r,    ngx_http_variable_value_t *v, uintptr_t data){    ngx_str_t  *s;    s = (ngx_str_t *) ((char *) r + data);    s->len = v->len;    s->data = v->data;}static voidngx_http_variable_request_set_size(ngx_http_request_t *r,    ngx_http_variable_value_t *v, uintptr_t data){    ssize_t    s, *sp;    ngx_str_t  val;    val.len = v->len;    val.data = v->data;    s = ngx_parse_size(&val);    if (s == NGX_ERROR) {        ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,                      "invalid size \"%V\"", &val);        return;    }    sp = (ssize_t *) ((char *) r + data);    *sp = s;    return;}static ngx_int_tngx_http_variable_header(ngx_http_request_t *r, ngx_http_variable_value_t *v,    uintptr_t data){    ngx_table_elt_t  *h;    h = *(ngx_table_elt_t **) ((char *) r + data);    if (h) {        v->len = h->value.len;        v->valid = 1;        v->no_cacheable = 0;        v->not_found = 0;        v->data = h->value.data;    } else {        v->not_found = 1;    }    return NGX_OK;}static ngx_int_tngx_http_variable_headers(ngx_http_request_t *r, ngx_http_variable_value_t *v,    uintptr_t data){    ssize_t            len;    u_char            *p;    ngx_uint_t         i, n;    ngx_array_t       *a;    ngx_table_elt_t  **h;    a = (ngx_array_t *) ((char *) r + data);    n = a->nelts;    if (n == 0) {        v->not_found = 1;        return NGX_OK;    }    v->valid = 1;    v->no_cacheable = 0;    v->not_found = 0;    h = a->elts;    if (n == 1) {        v->len = (*h)->value.len;        v->data = (*h)->value.data;        return NGX_OK;    }    len = - (ssize_t) (sizeof("; ") - 1);    for (i = 0; i < n; i++) {        len += h[i]->value.len + sizeof("; ") - 1;    }    p = ngx_palloc(r->pool, len);    if (p == NULL) {        return NGX_ERROR;    }    v->len = len;    v->data = p;    for (i = 0; /* void */ ; i++) {        p = ngx_copy(p, h[i]->value.data, h[i]->value.len);        if (i == n - 1) {            break;        }        *p++ = ';'; *p++ = ' ';    }    return NGX_OK;}static ngx_int_tngx_http_variable_unknown_header_in(ngx_http_request_t *r,    ngx_http_variable_value_t *v, uintptr_t data){    return ngx_http_variable_unknown_header(v, (ngx_str_t *) data,                                            &r->headers_in.headers.part,                                            sizeof("http_") - 1);}static ngx_int_tngx_http_variable_unknown_header_out(ngx_http_request_t *r,    ngx_http_variable_value_t *v, uintptr_t data){    return ngx_http_variable_unknown_header(v, (ngx_str_t *) data,                                            &r->headers_out.headers.part,                                            sizeof("sent_http_") - 1);}ngx_int_tngx_http_variable_unknown_header(ngx_http_variable_value_t *v, ngx_str_t *var,    ngx_list_part_t *part, size_t prefix){    u_char            ch;    ngx_uint_t        i, n;    ngx_table_elt_t  *header;    header = part->elts;    for (i = 0; /* void */ ; i++) {        if (i >= part->nelts) {            if (part->next == NULL) {                break;            }            part = part->next;            header = part->elts;            i = 0;        }        for (n = 0; n + prefix < var->len && n < header[i].key.len; n++) {            ch = header[i].key.data[n];            if (ch >= 'A' && ch <= 'Z') {                ch |= 0x20;            } else if (ch == '-') {                ch = '_';            }            if (var->data[n + prefix] != ch) {                break;            }        }        if (n + prefix == var->len && n == header[i].key.len) {            v->len = header[i].value.len;            v->valid = 1;            v->no_cacheable = 0;            v->not_found = 0;            v->data = header[i].value.data;            return NGX_OK;        }    }    v->not_found = 1;    return NGX_OK;}static ngx_int_tngx_http_variable_host(ngx_http_request_t *r, ngx_http_variable_value_t *v,    uintptr_t data){    ngx_http_core_srv_conf_t  *cscf;    if (r->host_start == NULL) {        if (r->headers_in.host) {            v->len = r->headers_in.host_name_len;            v->data = r->headers_in.host->value.data;        } else {            cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);            v->len = cscf->server_name.len;            v->data = cscf->server_name.data;        }    } else if (r->host_end) {        v->len = r->host_end - r->host_start;        v->data = r->host_start;    } else {        v->not_found = 1;        return NGX_OK;    }    v->valid = 1;    v->no_cacheable = 0;    v->not_found = 0;    return NGX_OK;}static ngx_int_tngx_http_variable_binary_remote_addr(ngx_http_request_t *r,    ngx_http_variable_value_t *v, uintptr_t data){    struct sockaddr_in  *sin;    /* AF_INET only */    sin = (struct sockaddr_in *) r->connection->sockaddr;    v->len = sizeof(in_addr_t);    v->valid = 1;    v->no_cacheable = 0;    v->not_found = 0;    v->data = (u_char *) &sin->sin_addr.s_addr;    return NGX_OK;}static ngx_int_tngx_http_variable_remote_addr(ngx_http_request_t *r,    ngx_http_variable_value_t *v, uintptr_t data){    v->len = r->connection->addr_text.len;    v->valid = 1;    v->no_cacheable = 0;    v->not_found = 0;    v->data = r->connection->addr_text.data;    return NGX_OK;}static ngx_int_tngx_http_variable_remote_port(ngx_http_request_t *r,    ngx_http_variable_value_t *v, uintptr_t data){    ngx_uint_t           port;    struct sockaddr_in  *sin;    v->len = 0;    v->valid = 1;    v->no_cacheable = 0;    v->not_found = 0;    v->data = ngx_palloc(r->pool, sizeof("65535") - 1);    if (v->data == NULL) {        return NGX_ERROR;    }    /* AF_INET only */    if (r->connection->sockaddr->sa_family == AF_INET) {        sin = (struct sockaddr_in *) r->connection->sockaddr;        port = ntohs(sin->sin_port);        if (port > 0 && port < 65536) {            v->len = ngx_sprintf(v->data, "%ui", port) - v->data;        }    }    return NGX_OK;}static ngx_int_tngx_http_variable_server_addr(ngx_http_request_t *r,    ngx_http_variable_value_t *v, uintptr_t data){    ngx_str_t  s;    s.data = ngx_palloc(r->pool, INET_ADDRSTRLEN);    if (s.data == NULL) {        return NGX_ERROR;    }    if (ngx_http_server_addr(r, &s) != NGX_OK) {        return NGX_ERROR;    }    v->len = s.len;    v->valid = 1;    v->no_cacheable = 0;    v->not_found = 0;    v->data = s.data;    return NGX_OK;}static ngx_int_tngx_http_variable_server_port(ngx_http_request_t *r,    ngx_http_variable_value_t *v, uintptr_t data){    v->len = r->port_text->len - 1;    v->valid = 1;    v->no_cacheable = 0;    v->not_found = 0;    v->data = r->port_text->data + 1;    return NGX_OK;}static ngx_int_tngx_http_variable_scheme(ngx_http_request_t *r,    ngx_http_variable_value_t *v, uintptr_t data){#if (NGX_HTTP_SSL)    if (r->connection->ssl) {        v->len = sizeof("https") - 1;        v->valid = 1;        v->no_cacheable = 0;        v->not_found = 0;        v->data = (u_char *) "https";        return NGX_OK;    }#endif    v->len = sizeof("http") - 1;    v->valid = 1;    v->no_cacheable = 0;    v->not_found = 0;    v->data = (u_char *) "http";    return NGX_OK;}static ngx_int_tngx_http_variable_is_args(ngx_http_request_t *r,    ngx_http_variable_value_t *v, uintptr_t data){    v->valid = 1;    v->no_cacheable = 0;    v->not_found = 0;    if (r->args.len == 0) {        v->len = 0;        v->data = NULL;        return NGX_OK;    }    v->len = 1;    v->data = (u_char *) "?";    return NGX_OK;}static ngx_int_tngx_http_variable_document_root(ngx_http_request_t *r,    ngx_http_variable_value_t *v, uintptr_t data){    ngx_str_t                  path;    ngx_http_core_loc_conf_t  *clcf;    clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);    if (clcf->root_lengths == NULL) {        v->len = clcf->root.len;        v->valid = 1;        v->no_cacheable = 0;        v->not_found = 0;        v->data = clcf->root.data;    } else {        if (ngx_http_script_run(r, &path, clcf->root_lengths->elts, 0,                                clcf->root_values->elts)            == NULL)        {            return NGX_ERROR;        }        if (ngx_conf_full_name((ngx_cycle_t *) ngx_cycle, &path, 0)            == NGX_ERROR)        {            return NGX_ERROR;        }        v->len = path.len;        v->valid = 1;        v->no_cacheable = 0;        v->not_found = 0;        v->data = path.data;    }    return NGX_OK;}static ngx_int_tngx_http_variable_request_filename(ngx_http_request_t *r,    ngx_http_variable_value_t *v, uintptr_t data){    size_t     root;    ngx_str_t  path;    if (ngx_http_map_uri_to_path(r, &path, &root, 0) == NULL) {        return NGX_ERROR;    }    /* ngx_http_map_uri_to_path() allocates memory for terminating '\0' */    v->len = path.len - 1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -