Annotation of embedaddon/nginx/src/http/ngx_http_request.h, revision 1.1

1.1     ! misho       1: 
        !             2: /*
        !             3:  * Copyright (C) Igor Sysoev
        !             4:  * Copyright (C) Nginx, Inc.
        !             5:  */
        !             6: 
        !             7: 
        !             8: #ifndef _NGX_HTTP_REQUEST_H_INCLUDED_
        !             9: #define _NGX_HTTP_REQUEST_H_INCLUDED_
        !            10: 
        !            11: 
        !            12: #define NGX_HTTP_MAX_URI_CHANGES           10
        !            13: #define NGX_HTTP_MAX_SUBREQUESTS           200
        !            14: 
        !            15: /* must be 2^n */
        !            16: #define NGX_HTTP_LC_HEADER_LEN             32
        !            17: 
        !            18: 
        !            19: #define NGX_HTTP_DISCARD_BUFFER_SIZE       4096
        !            20: #define NGX_HTTP_LINGERING_BUFFER_SIZE     4096
        !            21: 
        !            22: 
        !            23: #define NGX_HTTP_VERSION_9                 9
        !            24: #define NGX_HTTP_VERSION_10                1000
        !            25: #define NGX_HTTP_VERSION_11                1001
        !            26: 
        !            27: #define NGX_HTTP_UNKNOWN                   0x0001
        !            28: #define NGX_HTTP_GET                       0x0002
        !            29: #define NGX_HTTP_HEAD                      0x0004
        !            30: #define NGX_HTTP_POST                      0x0008
        !            31: #define NGX_HTTP_PUT                       0x0010
        !            32: #define NGX_HTTP_DELETE                    0x0020
        !            33: #define NGX_HTTP_MKCOL                     0x0040
        !            34: #define NGX_HTTP_COPY                      0x0080
        !            35: #define NGX_HTTP_MOVE                      0x0100
        !            36: #define NGX_HTTP_OPTIONS                   0x0200
        !            37: #define NGX_HTTP_PROPFIND                  0x0400
        !            38: #define NGX_HTTP_PROPPATCH                 0x0800
        !            39: #define NGX_HTTP_LOCK                      0x1000
        !            40: #define NGX_HTTP_UNLOCK                    0x2000
        !            41: #define NGX_HTTP_PATCH                     0x4000
        !            42: #define NGX_HTTP_TRACE                     0x8000
        !            43: 
        !            44: #define NGX_HTTP_CONNECTION_CLOSE          1
        !            45: #define NGX_HTTP_CONNECTION_KEEP_ALIVE     2
        !            46: 
        !            47: 
        !            48: #define NGX_NONE                           1
        !            49: 
        !            50: 
        !            51: #define NGX_HTTP_PARSE_HEADER_DONE         1
        !            52: 
        !            53: #define NGX_HTTP_CLIENT_ERROR              10
        !            54: #define NGX_HTTP_PARSE_INVALID_METHOD      10
        !            55: #define NGX_HTTP_PARSE_INVALID_REQUEST     11
        !            56: #define NGX_HTTP_PARSE_INVALID_09_METHOD   12
        !            57: 
        !            58: #define NGX_HTTP_PARSE_INVALID_HEADER      13
        !            59: 
        !            60: 
        !            61: /* unused                                  1 */
        !            62: #define NGX_HTTP_SUBREQUEST_IN_MEMORY      2
        !            63: #define NGX_HTTP_SUBREQUEST_WAITED         4
        !            64: #define NGX_HTTP_LOG_UNSAFE                8
        !            65: 
        !            66: 
        !            67: #define NGX_HTTP_CONTINUE                  100
        !            68: #define NGX_HTTP_SWITCHING_PROTOCOLS       101
        !            69: #define NGX_HTTP_PROCESSING                102
        !            70: 
        !            71: #define NGX_HTTP_OK                        200
        !            72: #define NGX_HTTP_CREATED                   201
        !            73: #define NGX_HTTP_ACCEPTED                  202
        !            74: #define NGX_HTTP_NO_CONTENT                204
        !            75: #define NGX_HTTP_PARTIAL_CONTENT           206
        !            76: 
        !            77: #define NGX_HTTP_SPECIAL_RESPONSE          300
        !            78: #define NGX_HTTP_MOVED_PERMANENTLY         301
        !            79: #define NGX_HTTP_MOVED_TEMPORARILY         302
        !            80: #define NGX_HTTP_SEE_OTHER                 303
        !            81: #define NGX_HTTP_NOT_MODIFIED              304
        !            82: #define NGX_HTTP_TEMPORARY_REDIRECT        307
        !            83: 
        !            84: #define NGX_HTTP_BAD_REQUEST               400
        !            85: #define NGX_HTTP_UNAUTHORIZED              401
        !            86: #define NGX_HTTP_FORBIDDEN                 403
        !            87: #define NGX_HTTP_NOT_FOUND                 404
        !            88: #define NGX_HTTP_NOT_ALLOWED               405
        !            89: #define NGX_HTTP_REQUEST_TIME_OUT          408
        !            90: #define NGX_HTTP_CONFLICT                  409
        !            91: #define NGX_HTTP_LENGTH_REQUIRED           411
        !            92: #define NGX_HTTP_PRECONDITION_FAILED       412
        !            93: #define NGX_HTTP_REQUEST_ENTITY_TOO_LARGE  413
        !            94: #define NGX_HTTP_REQUEST_URI_TOO_LARGE     414
        !            95: #define NGX_HTTP_UNSUPPORTED_MEDIA_TYPE    415
        !            96: #define NGX_HTTP_RANGE_NOT_SATISFIABLE     416
        !            97: 
        !            98: 
        !            99: /* Our own HTTP codes */
        !           100: 
        !           101: /* The special code to close connection without any response */
        !           102: #define NGX_HTTP_CLOSE                     444
        !           103: 
        !           104: #define NGX_HTTP_NGINX_CODES               494
        !           105: 
        !           106: #define NGX_HTTP_REQUEST_HEADER_TOO_LARGE  494
        !           107: 
        !           108: #define NGX_HTTPS_CERT_ERROR               495
        !           109: #define NGX_HTTPS_NO_CERT                  496
        !           110: 
        !           111: /*
        !           112:  * We use the special code for the plain HTTP requests that are sent to
        !           113:  * HTTPS port to distinguish it from 4XX in an error page redirection
        !           114:  */
        !           115: #define NGX_HTTP_TO_HTTPS                  497
        !           116: 
        !           117: /* 498 is the canceled code for the requests with invalid host name */
        !           118: 
        !           119: /*
        !           120:  * HTTP does not define the code for the case when a client closed
        !           121:  * the connection while we are processing its request so we introduce
        !           122:  * own code to log such situation when a client has closed the connection
        !           123:  * before we even try to send the HTTP header to it
        !           124:  */
        !           125: #define NGX_HTTP_CLIENT_CLOSED_REQUEST     499
        !           126: 
        !           127: 
        !           128: #define NGX_HTTP_INTERNAL_SERVER_ERROR     500
        !           129: #define NGX_HTTP_NOT_IMPLEMENTED           501
        !           130: #define NGX_HTTP_BAD_GATEWAY               502
        !           131: #define NGX_HTTP_SERVICE_UNAVAILABLE       503
        !           132: #define NGX_HTTP_GATEWAY_TIME_OUT          504
        !           133: #define NGX_HTTP_INSUFFICIENT_STORAGE      507
        !           134: 
        !           135: 
        !           136: #define NGX_HTTP_LOWLEVEL_BUFFERED         0xf0
        !           137: #define NGX_HTTP_WRITE_BUFFERED            0x10
        !           138: #define NGX_HTTP_GZIP_BUFFERED             0x20
        !           139: #define NGX_HTTP_SSI_BUFFERED              0x01
        !           140: #define NGX_HTTP_SUB_BUFFERED              0x02
        !           141: #define NGX_HTTP_COPY_BUFFERED             0x04
        !           142: 
        !           143: 
        !           144: typedef enum {
        !           145:     NGX_HTTP_INITING_REQUEST_STATE = 0,
        !           146:     NGX_HTTP_READING_REQUEST_STATE,
        !           147:     NGX_HTTP_PROCESS_REQUEST_STATE,
        !           148: 
        !           149:     NGX_HTTP_CONNECT_UPSTREAM_STATE,
        !           150:     NGX_HTTP_WRITING_UPSTREAM_STATE,
        !           151:     NGX_HTTP_READING_UPSTREAM_STATE,
        !           152: 
        !           153:     NGX_HTTP_WRITING_REQUEST_STATE,
        !           154:     NGX_HTTP_LINGERING_CLOSE_STATE,
        !           155:     NGX_HTTP_KEEPALIVE_STATE
        !           156: } ngx_http_state_e;
        !           157: 
        !           158: 
        !           159: typedef struct {
        !           160:     ngx_str_t                         name;
        !           161:     ngx_uint_t                        offset;
        !           162:     ngx_http_header_handler_pt        handler;
        !           163: } ngx_http_header_t;
        !           164: 
        !           165: 
        !           166: typedef struct {
        !           167:     ngx_str_t                         name;
        !           168:     ngx_uint_t                        offset;
        !           169: } ngx_http_header_out_t;
        !           170: 
        !           171: 
        !           172: typedef struct {
        !           173:     ngx_list_t                        headers;
        !           174: 
        !           175:     ngx_table_elt_t                  *host;
        !           176:     ngx_table_elt_t                  *connection;
        !           177:     ngx_table_elt_t                  *if_modified_since;
        !           178:     ngx_table_elt_t                  *if_unmodified_since;
        !           179:     ngx_table_elt_t                  *if_match;
        !           180:     ngx_table_elt_t                  *if_none_match;
        !           181:     ngx_table_elt_t                  *user_agent;
        !           182:     ngx_table_elt_t                  *referer;
        !           183:     ngx_table_elt_t                  *content_length;
        !           184:     ngx_table_elt_t                  *content_type;
        !           185: 
        !           186:     ngx_table_elt_t                  *range;
        !           187:     ngx_table_elt_t                  *if_range;
        !           188: 
        !           189:     ngx_table_elt_t                  *transfer_encoding;
        !           190:     ngx_table_elt_t                  *expect;
        !           191:     ngx_table_elt_t                  *upgrade;
        !           192: 
        !           193: #if (NGX_HTTP_GZIP)
        !           194:     ngx_table_elt_t                  *accept_encoding;
        !           195:     ngx_table_elt_t                  *via;
        !           196: #endif
        !           197: 
        !           198:     ngx_table_elt_t                  *authorization;
        !           199: 
        !           200:     ngx_table_elt_t                  *keep_alive;
        !           201: 
        !           202: #if (NGX_HTTP_X_FORWARDED_FOR)
        !           203:     ngx_array_t                       x_forwarded_for;
        !           204: #endif
        !           205: 
        !           206: #if (NGX_HTTP_REALIP)
        !           207:     ngx_table_elt_t                  *x_real_ip;
        !           208: #endif
        !           209: 
        !           210: #if (NGX_HTTP_HEADERS)
        !           211:     ngx_table_elt_t                  *accept;
        !           212:     ngx_table_elt_t                  *accept_language;
        !           213: #endif
        !           214: 
        !           215: #if (NGX_HTTP_DAV)
        !           216:     ngx_table_elt_t                  *depth;
        !           217:     ngx_table_elt_t                  *destination;
        !           218:     ngx_table_elt_t                  *overwrite;
        !           219:     ngx_table_elt_t                  *date;
        !           220: #endif
        !           221: 
        !           222:     ngx_str_t                         user;
        !           223:     ngx_str_t                         passwd;
        !           224: 
        !           225:     ngx_array_t                       cookies;
        !           226: 
        !           227:     ngx_str_t                         server;
        !           228:     off_t                             content_length_n;
        !           229:     time_t                            keep_alive_n;
        !           230: 
        !           231:     unsigned                          connection_type:2;
        !           232:     unsigned                          chunked:1;
        !           233:     unsigned                          msie:1;
        !           234:     unsigned                          msie6:1;
        !           235:     unsigned                          opera:1;
        !           236:     unsigned                          gecko:1;
        !           237:     unsigned                          chrome:1;
        !           238:     unsigned                          safari:1;
        !           239:     unsigned                          konqueror:1;
        !           240: } ngx_http_headers_in_t;
        !           241: 
        !           242: 
        !           243: typedef struct {
        !           244:     ngx_list_t                        headers;
        !           245: 
        !           246:     ngx_uint_t                        status;
        !           247:     ngx_str_t                         status_line;
        !           248: 
        !           249:     ngx_table_elt_t                  *server;
        !           250:     ngx_table_elt_t                  *date;
        !           251:     ngx_table_elt_t                  *content_length;
        !           252:     ngx_table_elt_t                  *content_encoding;
        !           253:     ngx_table_elt_t                  *location;
        !           254:     ngx_table_elt_t                  *refresh;
        !           255:     ngx_table_elt_t                  *last_modified;
        !           256:     ngx_table_elt_t                  *content_range;
        !           257:     ngx_table_elt_t                  *accept_ranges;
        !           258:     ngx_table_elt_t                  *www_authenticate;
        !           259:     ngx_table_elt_t                  *expires;
        !           260:     ngx_table_elt_t                  *etag;
        !           261: 
        !           262:     ngx_str_t                        *override_charset;
        !           263: 
        !           264:     size_t                            content_type_len;
        !           265:     ngx_str_t                         content_type;
        !           266:     ngx_str_t                         charset;
        !           267:     u_char                           *content_type_lowcase;
        !           268:     ngx_uint_t                        content_type_hash;
        !           269: 
        !           270:     ngx_array_t                       cache_control;
        !           271: 
        !           272:     off_t                             content_length_n;
        !           273:     time_t                            date_time;
        !           274:     time_t                            last_modified_time;
        !           275: } ngx_http_headers_out_t;
        !           276: 
        !           277: 
        !           278: typedef void (*ngx_http_client_body_handler_pt)(ngx_http_request_t *r);
        !           279: 
        !           280: typedef struct {
        !           281:     ngx_temp_file_t                  *temp_file;
        !           282:     ngx_chain_t                      *bufs;
        !           283:     ngx_buf_t                        *buf;
        !           284:     off_t                             rest;
        !           285:     ngx_chain_t                      *free;
        !           286:     ngx_chain_t                      *busy;
        !           287:     ngx_http_chunked_t               *chunked;
        !           288:     ngx_http_client_body_handler_pt   post_handler;
        !           289: } ngx_http_request_body_t;
        !           290: 
        !           291: 
        !           292: typedef struct ngx_http_addr_conf_s  ngx_http_addr_conf_t;
        !           293: 
        !           294: typedef struct {
        !           295:     ngx_http_addr_conf_t             *addr_conf;
        !           296:     ngx_http_conf_ctx_t              *conf_ctx;
        !           297: 
        !           298: #if (NGX_HTTP_SSL && defined SSL_CTRL_SET_TLSEXT_HOSTNAME)
        !           299:     ngx_str_t                        *ssl_servername;
        !           300: #if (NGX_PCRE)
        !           301:     ngx_http_regex_t                 *ssl_servername_regex;
        !           302: #endif
        !           303: #endif
        !           304: 
        !           305:     ngx_buf_t                       **busy;
        !           306:     ngx_int_t                         nbusy;
        !           307: 
        !           308:     ngx_buf_t                       **free;
        !           309:     ngx_int_t                         nfree;
        !           310: 
        !           311: #if (NGX_HTTP_SSL)
        !           312:     ngx_uint_t                        ssl;    /* unsigned  ssl:1; */
        !           313: #endif
        !           314: } ngx_http_connection_t;
        !           315: 
        !           316: 
        !           317: typedef void (*ngx_http_cleanup_pt)(void *data);
        !           318: 
        !           319: typedef struct ngx_http_cleanup_s  ngx_http_cleanup_t;
        !           320: 
        !           321: struct ngx_http_cleanup_s {
        !           322:     ngx_http_cleanup_pt               handler;
        !           323:     void                             *data;
        !           324:     ngx_http_cleanup_t               *next;
        !           325: };
        !           326: 
        !           327: 
        !           328: typedef ngx_int_t (*ngx_http_post_subrequest_pt)(ngx_http_request_t *r,
        !           329:     void *data, ngx_int_t rc);
        !           330: 
        !           331: typedef struct {
        !           332:     ngx_http_post_subrequest_pt       handler;
        !           333:     void                             *data;
        !           334: } ngx_http_post_subrequest_t;
        !           335: 
        !           336: 
        !           337: typedef struct ngx_http_postponed_request_s  ngx_http_postponed_request_t;
        !           338: 
        !           339: struct ngx_http_postponed_request_s {
        !           340:     ngx_http_request_t               *request;
        !           341:     ngx_chain_t                      *out;
        !           342:     ngx_http_postponed_request_t     *next;
        !           343: };
        !           344: 
        !           345: 
        !           346: typedef struct ngx_http_posted_request_s  ngx_http_posted_request_t;
        !           347: 
        !           348: struct ngx_http_posted_request_s {
        !           349:     ngx_http_request_t               *request;
        !           350:     ngx_http_posted_request_t        *next;
        !           351: };
        !           352: 
        !           353: 
        !           354: typedef ngx_int_t (*ngx_http_handler_pt)(ngx_http_request_t *r);
        !           355: typedef void (*ngx_http_event_handler_pt)(ngx_http_request_t *r);
        !           356: 
        !           357: 
        !           358: struct ngx_http_request_s {
        !           359:     uint32_t                          signature;         /* "HTTP" */
        !           360: 
        !           361:     ngx_connection_t                 *connection;
        !           362: 
        !           363:     void                            **ctx;
        !           364:     void                            **main_conf;
        !           365:     void                            **srv_conf;
        !           366:     void                            **loc_conf;
        !           367: 
        !           368:     ngx_http_event_handler_pt         read_event_handler;
        !           369:     ngx_http_event_handler_pt         write_event_handler;
        !           370: 
        !           371: #if (NGX_HTTP_CACHE)
        !           372:     ngx_http_cache_t                 *cache;
        !           373: #endif
        !           374: 
        !           375:     ngx_http_upstream_t              *upstream;
        !           376:     ngx_array_t                      *upstream_states;
        !           377:                                          /* of ngx_http_upstream_state_t */
        !           378: 
        !           379:     ngx_pool_t                       *pool;
        !           380:     ngx_buf_t                        *header_in;
        !           381: 
        !           382:     ngx_http_headers_in_t             headers_in;
        !           383:     ngx_http_headers_out_t            headers_out;
        !           384: 
        !           385:     ngx_http_request_body_t          *request_body;
        !           386: 
        !           387:     time_t                            lingering_time;
        !           388:     time_t                            start_sec;
        !           389:     ngx_msec_t                        start_msec;
        !           390: 
        !           391:     ngx_uint_t                        method;
        !           392:     ngx_uint_t                        http_version;
        !           393: 
        !           394:     ngx_str_t                         request_line;
        !           395:     ngx_str_t                         uri;
        !           396:     ngx_str_t                         args;
        !           397:     ngx_str_t                         exten;
        !           398:     ngx_str_t                         unparsed_uri;
        !           399: 
        !           400:     ngx_str_t                         method_name;
        !           401:     ngx_str_t                         http_protocol;
        !           402: 
        !           403:     ngx_chain_t                      *out;
        !           404:     ngx_http_request_t               *main;
        !           405:     ngx_http_request_t               *parent;
        !           406:     ngx_http_postponed_request_t     *postponed;
        !           407:     ngx_http_post_subrequest_t       *post_subrequest;
        !           408:     ngx_http_posted_request_t        *posted_requests;
        !           409: 
        !           410:     ngx_int_t                         phase_handler;
        !           411:     ngx_http_handler_pt               content_handler;
        !           412:     ngx_uint_t                        access_code;
        !           413: 
        !           414:     ngx_http_variable_value_t        *variables;
        !           415: 
        !           416: #if (NGX_PCRE)
        !           417:     ngx_uint_t                        ncaptures;
        !           418:     int                              *captures;
        !           419:     u_char                           *captures_data;
        !           420: #endif
        !           421: 
        !           422:     size_t                            limit_rate;
        !           423: 
        !           424:     /* used to learn the Apache compatible response length without a header */
        !           425:     size_t                            header_size;
        !           426: 
        !           427:     off_t                             request_length;
        !           428: 
        !           429:     ngx_uint_t                        err_status;
        !           430: 
        !           431:     ngx_http_connection_t            *http_connection;
        !           432: #if (NGX_HTTP_SPDY)
        !           433:     ngx_http_spdy_stream_t           *spdy_stream;
        !           434: #endif
        !           435: 
        !           436:     ngx_http_log_handler_pt           log_handler;
        !           437: 
        !           438:     ngx_http_cleanup_t               *cleanup;
        !           439: 
        !           440:     unsigned                          subrequests:8;
        !           441:     unsigned                          count:8;
        !           442:     unsigned                          blocked:8;
        !           443: 
        !           444:     unsigned                          aio:1;
        !           445: 
        !           446:     unsigned                          http_state:4;
        !           447: 
        !           448:     /* URI with "/." and on Win32 with "//" */
        !           449:     unsigned                          complex_uri:1;
        !           450: 
        !           451:     /* URI with "%" */
        !           452:     unsigned                          quoted_uri:1;
        !           453: 
        !           454:     /* URI with "+" */
        !           455:     unsigned                          plus_in_uri:1;
        !           456: 
        !           457:     /* URI with " " */
        !           458:     unsigned                          space_in_uri:1;
        !           459: 
        !           460:     unsigned                          invalid_header:1;
        !           461: 
        !           462:     unsigned                          add_uri_to_alias:1;
        !           463:     unsigned                          valid_location:1;
        !           464:     unsigned                          valid_unparsed_uri:1;
        !           465:     unsigned                          uri_changed:1;
        !           466:     unsigned                          uri_changes:4;
        !           467: 
        !           468:     unsigned                          request_body_in_single_buf:1;
        !           469:     unsigned                          request_body_in_file_only:1;
        !           470:     unsigned                          request_body_in_persistent_file:1;
        !           471:     unsigned                          request_body_in_clean_file:1;
        !           472:     unsigned                          request_body_file_group_access:1;
        !           473:     unsigned                          request_body_file_log_level:3;
        !           474: 
        !           475:     unsigned                          subrequest_in_memory:1;
        !           476:     unsigned                          waited:1;
        !           477: 
        !           478: #if (NGX_HTTP_CACHE)
        !           479:     unsigned                          cached:1;
        !           480: #endif
        !           481: 
        !           482: #if (NGX_HTTP_GZIP)
        !           483:     unsigned                          gzip_tested:1;
        !           484:     unsigned                          gzip_ok:1;
        !           485:     unsigned                          gzip_vary:1;
        !           486: #endif
        !           487: 
        !           488:     unsigned                          proxy:1;
        !           489:     unsigned                          bypass_cache:1;
        !           490:     unsigned                          no_cache:1;
        !           491: 
        !           492:     /*
        !           493:      * instead of using the request context data in
        !           494:      * ngx_http_limit_conn_module and ngx_http_limit_req_module
        !           495:      * we use the single bits in the request structure
        !           496:      */
        !           497:     unsigned                          limit_conn_set:1;
        !           498:     unsigned                          limit_req_set:1;
        !           499: 
        !           500: #if 0
        !           501:     unsigned                          cacheable:1;
        !           502: #endif
        !           503: 
        !           504:     unsigned                          pipeline:1;
        !           505:     unsigned                          chunked:1;
        !           506:     unsigned                          header_only:1;
        !           507:     unsigned                          keepalive:1;
        !           508:     unsigned                          lingering_close:1;
        !           509:     unsigned                          discard_body:1;
        !           510:     unsigned                          internal:1;
        !           511:     unsigned                          error_page:1;
        !           512:     unsigned                          ignore_content_encoding:1;
        !           513:     unsigned                          filter_finalize:1;
        !           514:     unsigned                          post_action:1;
        !           515:     unsigned                          request_complete:1;
        !           516:     unsigned                          request_output:1;
        !           517:     unsigned                          header_sent:1;
        !           518:     unsigned                          expect_tested:1;
        !           519:     unsigned                          root_tested:1;
        !           520:     unsigned                          done:1;
        !           521:     unsigned                          logged:1;
        !           522: 
        !           523:     unsigned                          buffered:4;
        !           524: 
        !           525:     unsigned                          main_filter_need_in_memory:1;
        !           526:     unsigned                          filter_need_in_memory:1;
        !           527:     unsigned                          filter_need_temporary:1;
        !           528:     unsigned                          allow_ranges:1;
        !           529: 
        !           530: #if (NGX_STAT_STUB)
        !           531:     unsigned                          stat_reading:1;
        !           532:     unsigned                          stat_writing:1;
        !           533: #endif
        !           534: 
        !           535:     /* used to parse HTTP headers */
        !           536: 
        !           537:     ngx_uint_t                        state;
        !           538: 
        !           539:     ngx_uint_t                        header_hash;
        !           540:     ngx_uint_t                        lowcase_index;
        !           541:     u_char                            lowcase_header[NGX_HTTP_LC_HEADER_LEN];
        !           542: 
        !           543:     u_char                           *header_name_start;
        !           544:     u_char                           *header_name_end;
        !           545:     u_char                           *header_start;
        !           546:     u_char                           *header_end;
        !           547: 
        !           548:     /*
        !           549:      * a memory that can be reused after parsing a request line
        !           550:      * via ngx_http_ephemeral_t
        !           551:      */
        !           552: 
        !           553:     u_char                           *uri_start;
        !           554:     u_char                           *uri_end;
        !           555:     u_char                           *uri_ext;
        !           556:     u_char                           *args_start;
        !           557:     u_char                           *request_start;
        !           558:     u_char                           *request_end;
        !           559:     u_char                           *method_end;
        !           560:     u_char                           *schema_start;
        !           561:     u_char                           *schema_end;
        !           562:     u_char                           *host_start;
        !           563:     u_char                           *host_end;
        !           564:     u_char                           *port_start;
        !           565:     u_char                           *port_end;
        !           566: 
        !           567:     unsigned                          http_minor:16;
        !           568:     unsigned                          http_major:16;
        !           569: };
        !           570: 
        !           571: 
        !           572: typedef struct {
        !           573:     ngx_http_posted_request_t         terminal_posted_request;
        !           574: #if (NGX_HAVE_AIO_SENDFILE)
        !           575:     u_char                            aio_preload;
        !           576: #endif
        !           577: } ngx_http_ephemeral_t;
        !           578: 
        !           579: 
        !           580: extern ngx_http_header_t       ngx_http_headers_in[];
        !           581: extern ngx_http_header_out_t   ngx_http_headers_out[];
        !           582: 
        !           583: 
        !           584: #define ngx_http_set_connection_log(c, l)                                     \
        !           585:                                                                               \
        !           586:     c->log->file = l->file;                                                   \
        !           587:     if (!(c->log->log_level & NGX_LOG_DEBUG_CONNECTION)) {                    \
        !           588:         c->log->log_level = l->log_level;                                     \
        !           589:     }
        !           590: 
        !           591: 
        !           592: #endif /* _NGX_HTTP_REQUEST_H_INCLUDED_ */

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