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

📄 ngx_http_script.c

📁 Nginx是一个高性能的HTTP和反向代理服务器
💻 C
📖 第 1 页 / 共 3 页
字号:
        if (!code->add_args) {            r->args.len = 0;        }    }    if (e->log) {        ngx_log_error(NGX_LOG_NOTICE, r->connection->log, 0,                      "rewritten data: \"%V\", args: \"%V\"",                      &e->buf, &r->args);    }    if (code->uri) {        r->uri = e->buf;        if (r->uri.len == 0) {            ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,                          "the rewritten URI has a zero length");            e->ip = ngx_http_script_exit;            e->status = NGX_HTTP_INTERNAL_SERVER_ERROR;            return;        }        if (ngx_http_set_exten(r) != NGX_OK) {            e->ip = ngx_http_script_exit;            e->status = NGX_HTTP_INTERNAL_SERVER_ERROR;            return;        }    }    e->ip += sizeof(ngx_http_script_regex_end_code_t);}#endifvoidngx_http_script_return_code(ngx_http_script_engine_t *e){    ngx_http_script_return_code_t  *code;    code = (ngx_http_script_return_code_t *) e->ip;    e->status = code->status;    if (code->status == NGX_HTTP_NO_CONTENT) {        e->request->header_only = 1;        e->request->zero_body = 1;    }    e->ip += sizeof(ngx_http_script_return_code_t) - sizeof(uintptr_t);}voidngx_http_script_break_code(ngx_http_script_engine_t *e){    e->request->uri_changed = 0;    e->ip = ngx_http_script_exit;}voidngx_http_script_if_code(ngx_http_script_engine_t *e){    ngx_http_script_if_code_t  *code;    code = (ngx_http_script_if_code_t *) e->ip;    ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,                   "http script if");    e->sp--;    if (e->sp->len && e->sp->data[0] != '0') {        if (code->loc_conf) {            e->request->loc_conf = code->loc_conf;            ngx_http_update_location_config(e->request);        }        e->ip += sizeof(ngx_http_script_if_code_t);        return;    }    ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,                   "http script if: false");    e->ip += code->next;}voidngx_http_script_equal_code(ngx_http_script_engine_t *e){    ngx_http_variable_value_t  *val, *res;    ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,                   "http script equal");    e->sp--;    val = e->sp;    res = e->sp - 1;    e->ip += sizeof(uintptr_t);    if (val->len == res->len && ngx_strncmp(val->data, res->data, res->len)        == 0)    {        *res = ngx_http_variable_true_value;        return;    }    ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,                   "http script equal: no");    *res = ngx_http_variable_null_value;}voidngx_http_script_not_equal_code(ngx_http_script_engine_t *e){    ngx_http_variable_value_t  *val, *res;    ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,                   "http script not equal");    e->sp--;    val = e->sp;    res = e->sp - 1;    e->ip += sizeof(uintptr_t);    if (val->len == res->len && ngx_strncmp(val->data, res->data, res->len)        == 0)    {        ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,                       "http script not equal: no");        *res = ngx_http_variable_null_value;        return;    }    *res = ngx_http_variable_true_value;}voidngx_http_script_file_code(ngx_http_script_engine_t *e){    ngx_str_t                     path;    ngx_http_request_t           *r;    ngx_open_file_info_t          of;    ngx_http_core_loc_conf_t     *clcf;    ngx_http_variable_value_t    *value;    ngx_http_script_file_code_t  *code;    value = e->sp - 1;    code = (ngx_http_script_file_code_t *) e->ip;    e->ip += sizeof(ngx_http_script_file_code_t);    path.len = value->len - 1;    path.data = value->data;    r = e->request;    ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,                   "http script file op %p \"%V\"", code->op, &path);    clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);    of.test_dir = 0;    of.valid = clcf->open_file_cache_valid;    of.min_uses = clcf->open_file_cache_min_uses;    of.errors = clcf->open_file_cache_errors;    of.events = clcf->open_file_cache_events;    if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool)        != NGX_OK)    {        if (of.err != NGX_ENOENT && of.err != NGX_ENOTDIR) {            ngx_log_error(NGX_LOG_CRIT, r->connection->log, of.err,                          ngx_file_info_n " \"%s\" failed", value->data);        }        switch (code->op) {        case ngx_http_script_file_plain:        case ngx_http_script_file_dir:        case ngx_http_script_file_exists:        case ngx_http_script_file_exec:             goto false;        case ngx_http_script_file_not_plain:        case ngx_http_script_file_not_dir:        case ngx_http_script_file_not_exists:        case ngx_http_script_file_not_exec:             goto true;        }        goto false;    }    switch (code->op) {    case ngx_http_script_file_plain:        if (of.is_file) {             goto true;        }        goto false;    case ngx_http_script_file_not_plain:        if (of.is_file) {            goto false;        }        goto true;    case ngx_http_script_file_dir:        if (of.is_dir) {             goto true;        }        goto false;    case ngx_http_script_file_not_dir:        if (of.is_dir) {            goto false;        }        goto true;    case ngx_http_script_file_exists:        if (of.is_file || of.is_dir || of.is_link) {             goto true;        }        goto false;    case ngx_http_script_file_not_exists:        if (of.is_file || of.is_dir || of.is_link) {            goto false;        }        goto true;    case ngx_http_script_file_exec:        if (of.is_exec) {             goto true;        }        goto false;    case ngx_http_script_file_not_exec:        if (of.is_exec) {            goto false;        }        goto true;    }false:    ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,                   "http script file op false");    *value = ngx_http_variable_null_value;    return;true:    *value = ngx_http_variable_true_value;    return;}voidngx_http_script_complex_value_code(ngx_http_script_engine_t *e){    size_t                                 len;    ngx_http_script_engine_t               le;    ngx_http_script_len_code_pt            lcode;    ngx_http_script_complex_value_code_t  *code;    code = (ngx_http_script_complex_value_code_t *) e->ip;    e->ip += sizeof(ngx_http_script_complex_value_code_t);    ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,                   "http script complex value");    ngx_memzero(&le, sizeof(ngx_http_script_engine_t));    le.ip = code->lengths->elts;    le.line = e->line;    le.request = e->request;    le.captures = e->captures;    le.ncaptures = e->ncaptures;    le.quote = e->quote;    for (len = 0; *(uintptr_t *) le.ip; len += lcode(&le)) {        lcode = *(ngx_http_script_len_code_pt *) le.ip;    }    e->buf.len = len;    e->buf.data = ngx_palloc(e->request->pool, len);    if (e->buf.data == NULL) {        e->ip = ngx_http_script_exit;        e->status = NGX_HTTP_INTERNAL_SERVER_ERROR;        return;    }    e->pos = e->buf.data;    e->sp->len = e->buf.len;    e->sp->data = e->buf.data;    e->sp++;}voidngx_http_script_value_code(ngx_http_script_engine_t *e){    ngx_http_script_value_code_t  *code;    code = (ngx_http_script_value_code_t *) e->ip;    e->ip += sizeof(ngx_http_script_value_code_t);    e->sp->len = code->text_len;    e->sp->data = (u_char *) code->text_data;    ngx_log_debug1(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,                   "http script value: \"%v\"", e->sp);    e->sp++;}voidngx_http_script_set_var_code(ngx_http_script_engine_t *e){    ngx_http_request_t          *r;    ngx_http_script_var_code_t  *code;    ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,                   "http script set var");    code = (ngx_http_script_var_code_t *) e->ip;    e->ip += sizeof(ngx_http_script_var_code_t);    r = e->request;    e->sp--;    r->variables[code->index].len = e->sp->len;    r->variables[code->index].valid = 1;    r->variables[code->index].no_cacheable = 0;    r->variables[code->index].not_found = 0;    r->variables[code->index].data = e->sp->data;}voidngx_http_script_var_set_handler_code(ngx_http_script_engine_t *e){    ngx_http_script_var_handler_code_t  *code;    ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,                   "http script set var handler");    code = (ngx_http_script_var_handler_code_t *) e->ip;    e->ip += sizeof(ngx_http_script_var_handler_code_t);    e->sp--;    code->handler(e->request, e->sp, code->data);}voidngx_http_script_var_code(ngx_http_script_engine_t *e){    ngx_http_variable_value_t   *value;    ngx_http_script_var_code_t  *code;    ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,                   "http script var");    code = (ngx_http_script_var_code_t *) e->ip;    e->ip += sizeof(ngx_http_script_var_code_t);    value = ngx_http_get_flushed_variable(e->request, code->index);    if (value && !value->not_found) {        ngx_log_debug1(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,                       "http script var: \"%v\"", value);        *e->sp = *value;        e->sp++;        return;    }    *e->sp = ngx_http_variable_null_value;    e->sp++;}voidngx_http_script_nop_code(ngx_http_script_engine_t *e){    e->ip += sizeof(uintptr_t);}

⌨️ 快捷键说明

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