Annotation of embedaddon/nginx/src/http/ngx_http_core_module.h, revision 1.1.1.1

1.1       misho       1: 
                      2: /*
                      3:  * Copyright (C) Igor Sysoev
                      4:  * Copyright (C) Nginx, Inc.
                      5:  */
                      6: 
                      7: 
                      8: #ifndef _NGX_HTTP_CORE_H_INCLUDED_
                      9: #define _NGX_HTTP_CORE_H_INCLUDED_
                     10: 
                     11: 
                     12: #include <ngx_config.h>
                     13: #include <ngx_core.h>
                     14: #include <ngx_http.h>
                     15: 
                     16: 
                     17: #define NGX_HTTP_GZIP_PROXIED_OFF       0x0002
                     18: #define NGX_HTTP_GZIP_PROXIED_EXPIRED   0x0004
                     19: #define NGX_HTTP_GZIP_PROXIED_NO_CACHE  0x0008
                     20: #define NGX_HTTP_GZIP_PROXIED_NO_STORE  0x0010
                     21: #define NGX_HTTP_GZIP_PROXIED_PRIVATE   0x0020
                     22: #define NGX_HTTP_GZIP_PROXIED_NO_LM     0x0040
                     23: #define NGX_HTTP_GZIP_PROXIED_NO_ETAG   0x0080
                     24: #define NGX_HTTP_GZIP_PROXIED_AUTH      0x0100
                     25: #define NGX_HTTP_GZIP_PROXIED_ANY       0x0200
                     26: 
                     27: 
                     28: #define NGX_HTTP_AIO_OFF                0
                     29: #define NGX_HTTP_AIO_ON                 1
                     30: #define NGX_HTTP_AIO_SENDFILE           2
                     31: 
                     32: 
                     33: #define NGX_HTTP_SATISFY_ALL            0
                     34: #define NGX_HTTP_SATISFY_ANY            1
                     35: 
                     36: 
                     37: #define NGX_HTTP_LINGERING_OFF          0
                     38: #define NGX_HTTP_LINGERING_ON           1
                     39: #define NGX_HTTP_LINGERING_ALWAYS       2
                     40: 
                     41: 
                     42: #define NGX_HTTP_IMS_OFF                0
                     43: #define NGX_HTTP_IMS_EXACT              1
                     44: #define NGX_HTTP_IMS_BEFORE             2
                     45: 
                     46: 
                     47: #define NGX_HTTP_KEEPALIVE_DISABLE_NONE    0x0002
                     48: #define NGX_HTTP_KEEPALIVE_DISABLE_MSIE6   0x0004
                     49: #define NGX_HTTP_KEEPALIVE_DISABLE_SAFARI  0x0008
                     50: 
                     51: 
                     52: typedef struct ngx_http_location_tree_node_s  ngx_http_location_tree_node_t;
                     53: typedef struct ngx_http_core_loc_conf_s  ngx_http_core_loc_conf_t;
                     54: 
                     55: 
                     56: typedef struct {
                     57:     union {
                     58:         struct sockaddr        sockaddr;
                     59:         struct sockaddr_in     sockaddr_in;
                     60: #if (NGX_HAVE_INET6)
                     61:         struct sockaddr_in6    sockaddr_in6;
                     62: #endif
                     63: #if (NGX_HAVE_UNIX_DOMAIN)
                     64:         struct sockaddr_un     sockaddr_un;
                     65: #endif
                     66:         u_char                 sockaddr_data[NGX_SOCKADDRLEN];
                     67:     } u;
                     68: 
                     69:     socklen_t                  socklen;
                     70: 
                     71:     unsigned                   set:1;
                     72:     unsigned                   default_server:1;
                     73:     unsigned                   bind:1;
                     74:     unsigned                   wildcard:1;
                     75: #if (NGX_HTTP_SSL)
                     76:     unsigned                   ssl:1;
                     77: #endif
                     78: #if (NGX_HTTP_SPDY)
                     79:     unsigned                   spdy:1;
                     80: #endif
                     81: #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
                     82:     unsigned                   ipv6only:1;
                     83: #endif
                     84:     unsigned                   so_keepalive:2;
                     85: 
                     86:     int                        backlog;
                     87:     int                        rcvbuf;
                     88:     int                        sndbuf;
                     89: #if (NGX_HAVE_SETFIB)
                     90:     int                        setfib;
                     91: #endif
                     92: #if (NGX_HAVE_KEEPALIVE_TUNABLE)
                     93:     int                        tcp_keepidle;
                     94:     int                        tcp_keepintvl;
                     95:     int                        tcp_keepcnt;
                     96: #endif
                     97: 
                     98: #if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
                     99:     char                      *accept_filter;
                    100: #endif
                    101: #if (NGX_HAVE_DEFERRED_ACCEPT && defined TCP_DEFER_ACCEPT)
                    102:     ngx_uint_t                 deferred_accept;
                    103: #endif
                    104: 
                    105:     u_char                     addr[NGX_SOCKADDR_STRLEN + 1];
                    106: } ngx_http_listen_opt_t;
                    107: 
                    108: 
                    109: typedef enum {
                    110:     NGX_HTTP_POST_READ_PHASE = 0,
                    111: 
                    112:     NGX_HTTP_SERVER_REWRITE_PHASE,
                    113: 
                    114:     NGX_HTTP_FIND_CONFIG_PHASE,
                    115:     NGX_HTTP_REWRITE_PHASE,
                    116:     NGX_HTTP_POST_REWRITE_PHASE,
                    117: 
                    118:     NGX_HTTP_PREACCESS_PHASE,
                    119: 
                    120:     NGX_HTTP_ACCESS_PHASE,
                    121:     NGX_HTTP_POST_ACCESS_PHASE,
                    122: 
                    123:     NGX_HTTP_TRY_FILES_PHASE,
                    124:     NGX_HTTP_CONTENT_PHASE,
                    125: 
                    126:     NGX_HTTP_LOG_PHASE
                    127: } ngx_http_phases;
                    128: 
                    129: typedef struct ngx_http_phase_handler_s  ngx_http_phase_handler_t;
                    130: 
                    131: typedef ngx_int_t (*ngx_http_phase_handler_pt)(ngx_http_request_t *r,
                    132:     ngx_http_phase_handler_t *ph);
                    133: 
                    134: struct ngx_http_phase_handler_s {
                    135:     ngx_http_phase_handler_pt  checker;
                    136:     ngx_http_handler_pt        handler;
                    137:     ngx_uint_t                 next;
                    138: };
                    139: 
                    140: 
                    141: typedef struct {
                    142:     ngx_http_phase_handler_t  *handlers;
                    143:     ngx_uint_t                 server_rewrite_index;
                    144:     ngx_uint_t                 location_rewrite_index;
                    145: } ngx_http_phase_engine_t;
                    146: 
                    147: 
                    148: typedef struct {
                    149:     ngx_array_t                handlers;
                    150: } ngx_http_phase_t;
                    151: 
                    152: 
                    153: typedef struct {
                    154:     ngx_array_t                servers;         /* ngx_http_core_srv_conf_t */
                    155: 
                    156:     ngx_http_phase_engine_t    phase_engine;
                    157: 
                    158:     ngx_hash_t                 headers_in_hash;
                    159: 
                    160:     ngx_hash_t                 variables_hash;
                    161: 
                    162:     ngx_array_t                variables;       /* ngx_http_variable_t */
                    163:     ngx_uint_t                 ncaptures;
                    164: 
                    165:     ngx_uint_t                 server_names_hash_max_size;
                    166:     ngx_uint_t                 server_names_hash_bucket_size;
                    167: 
                    168:     ngx_uint_t                 variables_hash_max_size;
                    169:     ngx_uint_t                 variables_hash_bucket_size;
                    170: 
                    171:     ngx_hash_keys_arrays_t    *variables_keys;
                    172: 
                    173:     ngx_array_t               *ports;
                    174: 
                    175:     ngx_uint_t                 try_files;       /* unsigned  try_files:1 */
                    176: 
                    177:     ngx_http_phase_t           phases[NGX_HTTP_LOG_PHASE + 1];
                    178: } ngx_http_core_main_conf_t;
                    179: 
                    180: 
                    181: typedef struct {
                    182:     /* array of the ngx_http_server_name_t, "server_name" directive */
                    183:     ngx_array_t                 server_names;
                    184: 
                    185:     /* server ctx */
                    186:     ngx_http_conf_ctx_t        *ctx;
                    187: 
                    188:     ngx_str_t                   server_name;
                    189: 
                    190:     size_t                      connection_pool_size;
                    191:     size_t                      request_pool_size;
                    192:     size_t                      client_header_buffer_size;
                    193: 
                    194:     ngx_bufs_t                  large_client_header_buffers;
                    195: 
                    196:     ngx_msec_t                  client_header_timeout;
                    197: 
                    198:     ngx_flag_t                  ignore_invalid_headers;
                    199:     ngx_flag_t                  merge_slashes;
                    200:     ngx_flag_t                  underscores_in_headers;
                    201: 
                    202:     unsigned                    listen:1;
                    203: #if (NGX_PCRE)
                    204:     unsigned                    captures:1;
                    205: #endif
                    206: 
                    207:     ngx_http_core_loc_conf_t  **named_locations;
                    208: } ngx_http_core_srv_conf_t;
                    209: 
                    210: 
                    211: /* list of structures to find core_srv_conf quickly at run time */
                    212: 
                    213: 
                    214: typedef struct {
                    215: #if (NGX_PCRE)
                    216:     ngx_http_regex_t          *regex;
                    217: #endif
                    218:     ngx_http_core_srv_conf_t  *server;   /* virtual name server conf */
                    219:     ngx_str_t                  name;
                    220: } ngx_http_server_name_t;
                    221: 
                    222: 
                    223: typedef struct {
                    224:      ngx_hash_combined_t       names;
                    225: 
                    226:      ngx_uint_t                nregex;
                    227:      ngx_http_server_name_t   *regex;
                    228: } ngx_http_virtual_names_t;
                    229: 
                    230: 
                    231: struct ngx_http_addr_conf_s {
                    232:     /* the default server configuration for this address:port */
                    233:     ngx_http_core_srv_conf_t  *default_server;
                    234: 
                    235:     ngx_http_virtual_names_t  *virtual_names;
                    236: 
                    237: #if (NGX_HTTP_SSL)
                    238:     unsigned                   ssl:1;
                    239: #endif
                    240: #if (NGX_HTTP_SPDY)
                    241:     unsigned                   spdy:1;
                    242: #endif
                    243: };
                    244: 
                    245: 
                    246: typedef struct {
                    247:     in_addr_t                  addr;
                    248:     ngx_http_addr_conf_t       conf;
                    249: } ngx_http_in_addr_t;
                    250: 
                    251: 
                    252: #if (NGX_HAVE_INET6)
                    253: 
                    254: typedef struct {
                    255:     struct in6_addr            addr6;
                    256:     ngx_http_addr_conf_t       conf;
                    257: } ngx_http_in6_addr_t;
                    258: 
                    259: #endif
                    260: 
                    261: 
                    262: typedef struct {
                    263:     /* ngx_http_in_addr_t or ngx_http_in6_addr_t */
                    264:     void                      *addrs;
                    265:     ngx_uint_t                 naddrs;
                    266: } ngx_http_port_t;
                    267: 
                    268: 
                    269: typedef struct {
                    270:     ngx_int_t                  family;
                    271:     in_port_t                  port;
                    272:     ngx_array_t                addrs;     /* array of ngx_http_conf_addr_t */
                    273: } ngx_http_conf_port_t;
                    274: 
                    275: 
                    276: typedef struct {
                    277:     ngx_http_listen_opt_t      opt;
                    278: 
                    279:     ngx_hash_t                 hash;
                    280:     ngx_hash_wildcard_t       *wc_head;
                    281:     ngx_hash_wildcard_t       *wc_tail;
                    282: 
                    283: #if (NGX_PCRE)
                    284:     ngx_uint_t                 nregex;
                    285:     ngx_http_server_name_t    *regex;
                    286: #endif
                    287: 
                    288:     /* the default server configuration for this address:port */
                    289:     ngx_http_core_srv_conf_t  *default_server;
                    290:     ngx_array_t                servers;  /* array of ngx_http_core_srv_conf_t */
                    291: } ngx_http_conf_addr_t;
                    292: 
                    293: 
                    294: typedef struct {
                    295:     ngx_int_t                  status;
                    296:     ngx_int_t                  overwrite;
                    297:     ngx_http_complex_value_t   value;
                    298:     ngx_str_t                  args;
                    299: } ngx_http_err_page_t;
                    300: 
                    301: 
                    302: typedef struct {
                    303:     ngx_array_t               *lengths;
                    304:     ngx_array_t               *values;
                    305:     ngx_str_t                  name;
                    306: 
                    307:     unsigned                   code:10;
                    308:     unsigned                   test_dir:1;
                    309: } ngx_http_try_file_t;
                    310: 
                    311: 
                    312: struct ngx_http_core_loc_conf_s {
                    313:     ngx_str_t     name;          /* location name */
                    314: 
                    315: #if (NGX_PCRE)
                    316:     ngx_http_regex_t  *regex;
                    317: #endif
                    318: 
                    319:     unsigned      noname:1;   /* "if () {}" block or limit_except */
                    320:     unsigned      lmt_excpt:1;
                    321:     unsigned      named:1;
                    322: 
                    323:     unsigned      exact_match:1;
                    324:     unsigned      noregex:1;
                    325: 
                    326:     unsigned      auto_redirect:1;
                    327: #if (NGX_HTTP_GZIP)
                    328:     unsigned      gzip_disable_msie6:2;
                    329: #if (NGX_HTTP_DEGRADATION)
                    330:     unsigned      gzip_disable_degradation:2;
                    331: #endif
                    332: #endif
                    333: 
                    334:     ngx_http_location_tree_node_t   *static_locations;
                    335: #if (NGX_PCRE)
                    336:     ngx_http_core_loc_conf_t       **regex_locations;
                    337: #endif
                    338: 
                    339:     /* pointer to the modules' loc_conf */
                    340:     void        **loc_conf;
                    341: 
                    342:     uint32_t      limit_except;
                    343:     void        **limit_except_loc_conf;
                    344: 
                    345:     ngx_http_handler_pt  handler;
                    346: 
                    347:     /* location name length for inclusive location with inherited alias */
                    348:     size_t        alias;
                    349:     ngx_str_t     root;                    /* root, alias */
                    350:     ngx_str_t     post_action;
                    351: 
                    352:     ngx_array_t  *root_lengths;
                    353:     ngx_array_t  *root_values;
                    354: 
                    355:     ngx_array_t  *types;
                    356:     ngx_hash_t    types_hash;
                    357:     ngx_str_t     default_type;
                    358: 
                    359:     off_t         client_max_body_size;    /* client_max_body_size */
                    360:     off_t         directio;                /* directio */
                    361:     off_t         directio_alignment;      /* directio_alignment */
                    362: 
                    363:     size_t        client_body_buffer_size; /* client_body_buffer_size */
                    364:     size_t        send_lowat;              /* send_lowat */
                    365:     size_t        postpone_output;         /* postpone_output */
                    366:     size_t        limit_rate;              /* limit_rate */
                    367:     size_t        limit_rate_after;        /* limit_rate_after */
                    368:     size_t        sendfile_max_chunk;      /* sendfile_max_chunk */
                    369:     size_t        read_ahead;              /* read_ahead */
                    370: 
                    371:     ngx_msec_t    client_body_timeout;     /* client_body_timeout */
                    372:     ngx_msec_t    send_timeout;            /* send_timeout */
                    373:     ngx_msec_t    keepalive_timeout;       /* keepalive_timeout */
                    374:     ngx_msec_t    lingering_time;          /* lingering_time */
                    375:     ngx_msec_t    lingering_timeout;       /* lingering_timeout */
                    376:     ngx_msec_t    resolver_timeout;        /* resolver_timeout */
                    377: 
                    378:     ngx_resolver_t  *resolver;             /* resolver */
                    379: 
                    380:     time_t        keepalive_header;        /* keepalive_timeout */
                    381: 
                    382:     ngx_uint_t    keepalive_requests;      /* keepalive_requests */
                    383:     ngx_uint_t    keepalive_disable;       /* keepalive_disable */
                    384:     ngx_uint_t    satisfy;                 /* satisfy */
                    385:     ngx_uint_t    lingering_close;         /* lingering_close */
                    386:     ngx_uint_t    if_modified_since;       /* if_modified_since */
                    387:     ngx_uint_t    max_ranges;              /* max_ranges */
                    388:     ngx_uint_t    client_body_in_file_only; /* client_body_in_file_only */
                    389: 
                    390:     ngx_flag_t    client_body_in_single_buffer;
                    391:                                            /* client_body_in_singe_buffer */
                    392:     ngx_flag_t    internal;                /* internal */
                    393:     ngx_flag_t    sendfile;                /* sendfile */
                    394: #if (NGX_HAVE_FILE_AIO)
                    395:     ngx_flag_t    aio;                     /* aio */
                    396: #endif
                    397:     ngx_flag_t    tcp_nopush;              /* tcp_nopush */
                    398:     ngx_flag_t    tcp_nodelay;             /* tcp_nodelay */
                    399:     ngx_flag_t    reset_timedout_connection; /* reset_timedout_connection */
                    400:     ngx_flag_t    server_name_in_redirect; /* server_name_in_redirect */
                    401:     ngx_flag_t    port_in_redirect;        /* port_in_redirect */
                    402:     ngx_flag_t    msie_padding;            /* msie_padding */
                    403:     ngx_flag_t    msie_refresh;            /* msie_refresh */
                    404:     ngx_flag_t    log_not_found;           /* log_not_found */
                    405:     ngx_flag_t    log_subrequest;          /* log_subrequest */
                    406:     ngx_flag_t    recursive_error_pages;   /* recursive_error_pages */
                    407:     ngx_flag_t    server_tokens;           /* server_tokens */
                    408:     ngx_flag_t    chunked_transfer_encoding; /* chunked_transfer_encoding */
                    409:     ngx_flag_t    etag;                    /* etag */
                    410: 
                    411: #if (NGX_HTTP_GZIP)
                    412:     ngx_flag_t    gzip_vary;               /* gzip_vary */
                    413: 
                    414:     ngx_uint_t    gzip_http_version;       /* gzip_http_version */
                    415:     ngx_uint_t    gzip_proxied;            /* gzip_proxied */
                    416: 
                    417: #if (NGX_PCRE)
                    418:     ngx_array_t  *gzip_disable;            /* gzip_disable */
                    419: #endif
                    420: #endif
                    421: 
                    422: #if (NGX_HAVE_OPENAT)
                    423:     ngx_uint_t    disable_symlinks;        /* disable_symlinks */
                    424:     ngx_http_complex_value_t  *disable_symlinks_from;
                    425: #endif
                    426: 
                    427:     ngx_array_t  *error_pages;             /* error_page */
                    428:     ngx_http_try_file_t    *try_files;     /* try_files */
                    429: 
                    430:     ngx_path_t   *client_body_temp_path;   /* client_body_temp_path */
                    431: 
                    432:     ngx_open_file_cache_t  *open_file_cache;
                    433:     time_t        open_file_cache_valid;
                    434:     ngx_uint_t    open_file_cache_min_uses;
                    435:     ngx_flag_t    open_file_cache_errors;
                    436:     ngx_flag_t    open_file_cache_events;
                    437: 
                    438:     ngx_log_t    *error_log;
                    439: 
                    440:     ngx_uint_t    types_hash_max_size;
                    441:     ngx_uint_t    types_hash_bucket_size;
                    442: 
                    443:     ngx_queue_t  *locations;
                    444: 
                    445: #if 0
                    446:     ngx_http_core_loc_conf_t  *prev_location;
                    447: #endif
                    448: };
                    449: 
                    450: 
                    451: typedef struct {
                    452:     ngx_queue_t                      queue;
                    453:     ngx_http_core_loc_conf_t        *exact;
                    454:     ngx_http_core_loc_conf_t        *inclusive;
                    455:     ngx_str_t                       *name;
                    456:     u_char                          *file_name;
                    457:     ngx_uint_t                       line;
                    458:     ngx_queue_t                      list;
                    459: } ngx_http_location_queue_t;
                    460: 
                    461: 
                    462: struct ngx_http_location_tree_node_s {
                    463:     ngx_http_location_tree_node_t   *left;
                    464:     ngx_http_location_tree_node_t   *right;
                    465:     ngx_http_location_tree_node_t   *tree;
                    466: 
                    467:     ngx_http_core_loc_conf_t        *exact;
                    468:     ngx_http_core_loc_conf_t        *inclusive;
                    469: 
                    470:     u_char                           auto_redirect;
                    471:     u_char                           len;
                    472:     u_char                           name[1];
                    473: };
                    474: 
                    475: 
                    476: void ngx_http_core_run_phases(ngx_http_request_t *r);
                    477: ngx_int_t ngx_http_core_generic_phase(ngx_http_request_t *r,
                    478:     ngx_http_phase_handler_t *ph);
                    479: ngx_int_t ngx_http_core_rewrite_phase(ngx_http_request_t *r,
                    480:     ngx_http_phase_handler_t *ph);
                    481: ngx_int_t ngx_http_core_find_config_phase(ngx_http_request_t *r,
                    482:     ngx_http_phase_handler_t *ph);
                    483: ngx_int_t ngx_http_core_post_rewrite_phase(ngx_http_request_t *r,
                    484:     ngx_http_phase_handler_t *ph);
                    485: ngx_int_t ngx_http_core_access_phase(ngx_http_request_t *r,
                    486:     ngx_http_phase_handler_t *ph);
                    487: ngx_int_t ngx_http_core_post_access_phase(ngx_http_request_t *r,
                    488:     ngx_http_phase_handler_t *ph);
                    489: ngx_int_t ngx_http_core_try_files_phase(ngx_http_request_t *r,
                    490:     ngx_http_phase_handler_t *ph);
                    491: ngx_int_t ngx_http_core_content_phase(ngx_http_request_t *r,
                    492:     ngx_http_phase_handler_t *ph);
                    493: 
                    494: 
                    495: void *ngx_http_test_content_type(ngx_http_request_t *r, ngx_hash_t *types_hash);
                    496: ngx_int_t ngx_http_set_content_type(ngx_http_request_t *r);
                    497: void ngx_http_set_exten(ngx_http_request_t *r);
                    498: ngx_int_t ngx_http_set_etag(ngx_http_request_t *r);
                    499: ngx_int_t ngx_http_send_response(ngx_http_request_t *r, ngx_uint_t status,
                    500:     ngx_str_t *ct, ngx_http_complex_value_t *cv);
                    501: u_char *ngx_http_map_uri_to_path(ngx_http_request_t *r, ngx_str_t *name,
                    502:     size_t *root_length, size_t reserved);
                    503: ngx_int_t ngx_http_auth_basic_user(ngx_http_request_t *r);
                    504: #if (NGX_HTTP_GZIP)
                    505: ngx_int_t ngx_http_gzip_ok(ngx_http_request_t *r);
                    506: #endif
                    507: 
                    508: 
                    509: ngx_int_t ngx_http_subrequest(ngx_http_request_t *r,
                    510:     ngx_str_t *uri, ngx_str_t *args, ngx_http_request_t **sr,
                    511:     ngx_http_post_subrequest_t *psr, ngx_uint_t flags);
                    512: ngx_int_t ngx_http_internal_redirect(ngx_http_request_t *r,
                    513:     ngx_str_t *uri, ngx_str_t *args);
                    514: ngx_int_t ngx_http_named_location(ngx_http_request_t *r, ngx_str_t *name);
                    515: 
                    516: 
                    517: ngx_http_cleanup_t *ngx_http_cleanup_add(ngx_http_request_t *r, size_t size);
                    518: 
                    519: 
                    520: typedef ngx_int_t (*ngx_http_output_header_filter_pt)(ngx_http_request_t *r);
                    521: typedef ngx_int_t (*ngx_http_output_body_filter_pt)
                    522:     (ngx_http_request_t *r, ngx_chain_t *chain);
                    523: 
                    524: 
                    525: ngx_int_t ngx_http_output_filter(ngx_http_request_t *r, ngx_chain_t *chain);
                    526: ngx_int_t ngx_http_write_filter(ngx_http_request_t *r, ngx_chain_t *chain);
                    527: 
                    528: 
                    529: ngx_int_t ngx_http_set_disable_symlinks(ngx_http_request_t *r,
                    530:     ngx_http_core_loc_conf_t *clcf, ngx_str_t *path, ngx_open_file_info_t *of);
                    531: 
                    532: ngx_int_t ngx_http_get_forwarded_addr(ngx_http_request_t *r, ngx_addr_t *addr,
                    533:     ngx_array_t *headers, ngx_str_t *value, ngx_array_t *proxies,
                    534:     int recursive);
                    535: 
                    536: 
                    537: extern ngx_module_t  ngx_http_core_module;
                    538: 
                    539: extern ngx_uint_t ngx_http_max_module;
                    540: 
                    541: extern ngx_str_t  ngx_http_core_get_method;
                    542: 
                    543: 
                    544: #define ngx_http_clear_content_length(r)                                      \
                    545:                                                                               \
                    546:     r->headers_out.content_length_n = -1;                                     \
                    547:     if (r->headers_out.content_length) {                                      \
                    548:         r->headers_out.content_length->hash = 0;                              \
                    549:         r->headers_out.content_length = NULL;                                 \
                    550:     }
                    551:                                                                               \
                    552: #define ngx_http_clear_accept_ranges(r)                                       \
                    553:                                                                               \
                    554:     r->allow_ranges = 0;                                                      \
                    555:     if (r->headers_out.accept_ranges) {                                       \
                    556:         r->headers_out.accept_ranges->hash = 0;                               \
                    557:         r->headers_out.accept_ranges = NULL;                                  \
                    558:     }
                    559: 
                    560: #define ngx_http_clear_last_modified(r)                                       \
                    561:                                                                               \
                    562:     r->headers_out.last_modified_time = -1;                                   \
                    563:     if (r->headers_out.last_modified) {                                       \
                    564:         r->headers_out.last_modified->hash = 0;                               \
                    565:         r->headers_out.last_modified = NULL;                                  \
                    566:     }
                    567: 
                    568: #define ngx_http_clear_location(r)                                            \
                    569:                                                                               \
                    570:     if (r->headers_out.location) {                                            \
                    571:         r->headers_out.location->hash = 0;                                    \
                    572:         r->headers_out.location = NULL;                                       \
                    573:     }
                    574: 
                    575: #define ngx_http_clear_etag(r)                                                \
                    576:                                                                               \
                    577:     if (r->headers_out.etag) {                                                \
                    578:         r->headers_out.etag->hash = 0;                                        \
                    579:         r->headers_out.etag = NULL;                                           \
                    580:     }
                    581: 
                    582: 
                    583: #endif /* _NGX_HTTP_CORE_H_INCLUDED_ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>