1 2/* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) NGINX, Inc. 5 */ 6 7#ifndef _NXT_HTTP_H_INCLUDED_ 8#define _NXT_HTTP_H_INCLUDED_ 9 10#include <nxt_regex.h> 11 12 13typedef enum { 14 NXT_HTTP_UNSET = -1, 15 NXT_HTTP_INVALID = 0, 16 17 NXT_HTTP_CONTINUE = 100, 18 NXT_HTTP_SWITCHING_PROTOCOLS = 101, 19 20 NXT_HTTP_OK = 200, 21 NXT_HTTP_NO_CONTENT = 204, 22 23 NXT_HTTP_MULTIPLE_CHOICES = 300, 24 NXT_HTTP_MOVED_PERMANENTLY = 301, 25 NXT_HTTP_FOUND = 302, 26 NXT_HTTP_SEE_OTHER = 303, 27 NXT_HTTP_NOT_MODIFIED = 304, 28 NXT_HTTP_TEMPORARY_REDIRECT = 307, 29 NXT_HTTP_PERMANENT_REDIRECT = 308, 30 31 NXT_HTTP_BAD_REQUEST = 400, 32 NXT_HTTP_FORBIDDEN = 403, 33 NXT_HTTP_NOT_FOUND = 404, 34 NXT_HTTP_METHOD_NOT_ALLOWED = 405, 35 NXT_HTTP_REQUEST_TIMEOUT = 408, 36 NXT_HTTP_LENGTH_REQUIRED = 411, 37 NXT_HTTP_PAYLOAD_TOO_LARGE = 413, 38 NXT_HTTP_URI_TOO_LONG = 414, 39 NXT_HTTP_UPGRADE_REQUIRED = 426, 40 NXT_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE = 431, 41 42 NXT_HTTP_TO_HTTPS = 497, 43 44 NXT_HTTP_INTERNAL_SERVER_ERROR = 500, 45 NXT_HTTP_NOT_IMPLEMENTED = 501, 46 NXT_HTTP_BAD_GATEWAY = 502, 47 NXT_HTTP_SERVICE_UNAVAILABLE = 503, 48 NXT_HTTP_GATEWAY_TIMEOUT = 504, 49 NXT_HTTP_VERSION_NOT_SUPPORTED = 505, 50 NXT_HTTP_SERVER_ERROR_MAX = 599, 51 52 NXT_HTTP_STATUS_MAX = 999, 53} nxt_http_status_t; 54 55 56typedef enum { 57 NXT_HTTP_TE_NONE = 0, 58 NXT_HTTP_TE_CHUNKED = 1, 59 NXT_HTTP_TE_UNSUPPORTED = 2, 60} nxt_http_te_t; 61 62 63typedef enum { 64 NXT_HTTP_PROTO_H1 = 0, 65 NXT_HTTP_PROTO_H2, 66 NXT_HTTP_PROTO_DEVNULL, 67} nxt_http_protocol_t; 68 69 70typedef struct { 71 nxt_work_handler_t ready_handler; 72 nxt_work_handler_t error_handler; 73} nxt_http_request_state_t; 74 75 76typedef struct nxt_h1proto_s nxt_h1proto_t; 77 78struct nxt_h1p_websocket_timer_s { 79 nxt_timer_t timer; 80 nxt_h1proto_t *h1p; 81 nxt_msec_t keepalive_interval; 82}; 83 84 85typedef union { 86 void *any; 87 nxt_h1proto_t *h1; 88} nxt_http_proto_t; 89 90 91#define nxt_http_field_name_set(_field, _name) \ 92 do { \
| 1 2/* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) NGINX, Inc. 5 */ 6 7#ifndef _NXT_HTTP_H_INCLUDED_ 8#define _NXT_HTTP_H_INCLUDED_ 9 10#include <nxt_regex.h> 11 12 13typedef enum { 14 NXT_HTTP_UNSET = -1, 15 NXT_HTTP_INVALID = 0, 16 17 NXT_HTTP_CONTINUE = 100, 18 NXT_HTTP_SWITCHING_PROTOCOLS = 101, 19 20 NXT_HTTP_OK = 200, 21 NXT_HTTP_NO_CONTENT = 204, 22 23 NXT_HTTP_MULTIPLE_CHOICES = 300, 24 NXT_HTTP_MOVED_PERMANENTLY = 301, 25 NXT_HTTP_FOUND = 302, 26 NXT_HTTP_SEE_OTHER = 303, 27 NXT_HTTP_NOT_MODIFIED = 304, 28 NXT_HTTP_TEMPORARY_REDIRECT = 307, 29 NXT_HTTP_PERMANENT_REDIRECT = 308, 30 31 NXT_HTTP_BAD_REQUEST = 400, 32 NXT_HTTP_FORBIDDEN = 403, 33 NXT_HTTP_NOT_FOUND = 404, 34 NXT_HTTP_METHOD_NOT_ALLOWED = 405, 35 NXT_HTTP_REQUEST_TIMEOUT = 408, 36 NXT_HTTP_LENGTH_REQUIRED = 411, 37 NXT_HTTP_PAYLOAD_TOO_LARGE = 413, 38 NXT_HTTP_URI_TOO_LONG = 414, 39 NXT_HTTP_UPGRADE_REQUIRED = 426, 40 NXT_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE = 431, 41 42 NXT_HTTP_TO_HTTPS = 497, 43 44 NXT_HTTP_INTERNAL_SERVER_ERROR = 500, 45 NXT_HTTP_NOT_IMPLEMENTED = 501, 46 NXT_HTTP_BAD_GATEWAY = 502, 47 NXT_HTTP_SERVICE_UNAVAILABLE = 503, 48 NXT_HTTP_GATEWAY_TIMEOUT = 504, 49 NXT_HTTP_VERSION_NOT_SUPPORTED = 505, 50 NXT_HTTP_SERVER_ERROR_MAX = 599, 51 52 NXT_HTTP_STATUS_MAX = 999, 53} nxt_http_status_t; 54 55 56typedef enum { 57 NXT_HTTP_TE_NONE = 0, 58 NXT_HTTP_TE_CHUNKED = 1, 59 NXT_HTTP_TE_UNSUPPORTED = 2, 60} nxt_http_te_t; 61 62 63typedef enum { 64 NXT_HTTP_PROTO_H1 = 0, 65 NXT_HTTP_PROTO_H2, 66 NXT_HTTP_PROTO_DEVNULL, 67} nxt_http_protocol_t; 68 69 70typedef struct { 71 nxt_work_handler_t ready_handler; 72 nxt_work_handler_t error_handler; 73} nxt_http_request_state_t; 74 75 76typedef struct nxt_h1proto_s nxt_h1proto_t; 77 78struct nxt_h1p_websocket_timer_s { 79 nxt_timer_t timer; 80 nxt_h1proto_t *h1p; 81 nxt_msec_t keepalive_interval; 82}; 83 84 85typedef union { 86 void *any; 87 nxt_h1proto_t *h1; 88} nxt_http_proto_t; 89 90 91#define nxt_http_field_name_set(_field, _name) \ 92 do { \
|
242 void (*send)(nxt_task_t *task, nxt_http_request_t *r, nxt_buf_t *out); 243 nxt_off_t (*body_bytes_sent)(nxt_task_t *task, nxt_http_proto_t proto); 244 void (*discard)(nxt_task_t *task, nxt_http_request_t *r, nxt_buf_t *last); 245 void (*close)(nxt_task_t *task, nxt_http_proto_t proto, 246 nxt_socket_conf_joint_t *joint); 247 248 void (*peer_connect)(nxt_task_t *task, nxt_http_peer_t *peer); 249 void (*peer_header_send)(nxt_task_t *task, nxt_http_peer_t *peer); 250 void (*peer_header_read)(nxt_task_t *task, nxt_http_peer_t *peer); 251 void (*peer_read)(nxt_task_t *task, nxt_http_peer_t *peer); 252 void (*peer_close)(nxt_task_t *task, nxt_http_peer_t *peer); 253 254 void (*ws_frame_start)(nxt_task_t *task, nxt_http_request_t *r, 255 nxt_buf_t *ws_frame); 256} nxt_http_proto_table_t; 257 258 259struct nxt_http_client_ip_s { 260 nxt_http_route_addr_rule_t *source; 261 nxt_str_t *header; 262 uint32_t header_hash; 263 uint8_t recursive; /* 1 bit */ 264}; 265 266 267#define NXT_HTTP_DATE_LEN nxt_length("Wed, 31 Dec 1986 16:40:00 GMT") 268 269nxt_inline u_char * 270nxt_http_date(u_char *buf, struct tm *tm) 271{ 272 static const char *week[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", 273 "Sat" }; 274 275 static const char *month[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", 276 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; 277 278 return nxt_sprintf(buf, buf + NXT_HTTP_DATE_LEN, 279 "%s, %02d %s %4d %02d:%02d:%02d GMT", 280 week[tm->tm_wday], tm->tm_mday, 281 month[tm->tm_mon], tm->tm_year + 1900, 282 tm->tm_hour, tm->tm_min, tm->tm_sec); 283} 284 285 286nxt_int_t nxt_http_init(nxt_task_t *task); 287nxt_int_t nxt_h1p_init(nxt_task_t *task); 288nxt_int_t nxt_http_response_hash_init(nxt_task_t *task); 289 290void nxt_http_conn_init(nxt_task_t *task, void *obj, void *data); 291nxt_http_request_t *nxt_http_request_create(nxt_task_t *task); 292void nxt_http_request_error(nxt_task_t *task, nxt_http_request_t *r, 293 nxt_http_status_t status); 294void nxt_http_request_read_body(nxt_task_t *task, nxt_http_request_t *r); 295void nxt_http_request_header_send(nxt_task_t *task, nxt_http_request_t *r, 296 nxt_work_handler_t body_handler, void *data); 297void nxt_http_request_ws_frame_start(nxt_task_t *task, nxt_http_request_t *r, 298 nxt_buf_t *ws_frame); 299void nxt_http_request_send(nxt_task_t *task, nxt_http_request_t *r, 300 nxt_buf_t *out); 301nxt_buf_t *nxt_http_buf_mem(nxt_task_t *task, nxt_http_request_t *r, 302 size_t size); 303nxt_buf_t *nxt_http_buf_last(nxt_http_request_t *r); 304void nxt_http_request_error_handler(nxt_task_t *task, void *obj, void *data); 305void nxt_http_request_close_handler(nxt_task_t *task, void *obj, void *data); 306 307nxt_int_t nxt_http_request_host(void *ctx, nxt_http_field_t *field, 308 uintptr_t data); 309nxt_int_t nxt_http_request_field(void *ctx, nxt_http_field_t *field, 310 uintptr_t offset); 311nxt_int_t nxt_http_request_content_length(void *ctx, nxt_http_field_t *field, 312 uintptr_t data); 313 314nxt_http_routes_t *nxt_http_routes_create(nxt_task_t *task, 315 nxt_router_temp_conf_t *tmcf, nxt_conf_value_t *routes_conf); 316nxt_http_action_t *nxt_http_action_create(nxt_task_t *task, 317 nxt_router_temp_conf_t *tmcf, nxt_str_t *pass); 318nxt_int_t nxt_http_routes_resolve(nxt_task_t *task, 319 nxt_router_temp_conf_t *tmcf); 320nxt_int_t nxt_http_pass_segments(nxt_mp_t *mp, nxt_str_t *pass, 321 nxt_str_t *segments, nxt_uint_t n); 322nxt_http_action_t *nxt_http_pass_application(nxt_task_t *task, 323 nxt_router_conf_t *rtcf, nxt_str_t *name); 324nxt_http_route_addr_rule_t *nxt_http_route_addr_rule_create( 325 nxt_task_t *task, nxt_mp_t *mp, nxt_conf_value_t *cv); 326nxt_int_t nxt_http_route_addr_rule(nxt_http_request_t *r, 327 nxt_http_route_addr_rule_t *addr_rule, nxt_sockaddr_t *sockaddr); 328nxt_http_route_rule_t *nxt_http_route_types_rule_create(nxt_task_t *task, 329 nxt_mp_t *mp, nxt_conf_value_t *types); 330nxt_int_t nxt_http_route_test_rule(nxt_http_request_t *r, 331 nxt_http_route_rule_t *rule, u_char *start, size_t length); 332 333nxt_int_t nxt_http_action_init(nxt_task_t *task, nxt_router_temp_conf_t *tmcf, 334 nxt_conf_value_t *cv, nxt_http_action_t *action); 335void nxt_http_request_action(nxt_task_t *task, nxt_http_request_t *r, 336 nxt_http_action_t *action); 337 338nxt_int_t nxt_upstreams_create(nxt_task_t *task, nxt_router_temp_conf_t *tmcf, 339 nxt_conf_value_t *conf); 340nxt_int_t nxt_upstreams_joint_create(nxt_router_temp_conf_t *tmcf, 341 nxt_upstream_t ***upstream_joint); 342 343nxt_int_t nxt_http_return_init(nxt_mp_t *mp, nxt_http_action_t *action, 344 nxt_http_action_conf_t *acf); 345 346nxt_int_t nxt_http_static_init(nxt_task_t *task, nxt_router_temp_conf_t *tmcf, 347 nxt_http_action_t *action, nxt_http_action_conf_t *acf); 348nxt_int_t nxt_http_static_mtypes_init(nxt_mp_t *mp, nxt_lvlhsh_t *hash); 349nxt_int_t nxt_http_static_mtypes_hash_add(nxt_mp_t *mp, nxt_lvlhsh_t *hash, 350 nxt_str_t *exten, nxt_str_t *type); 351nxt_str_t *nxt_http_static_mtype_get(nxt_lvlhsh_t *hash, nxt_str_t *exten); 352 353nxt_http_action_t *nxt_http_application_handler(nxt_task_t *task, 354 nxt_http_request_t *r, nxt_http_action_t *action); 355nxt_int_t nxt_upstream_find(nxt_upstreams_t *upstreams, nxt_str_t *name, 356 nxt_http_action_t *action); 357nxt_http_action_t *nxt_upstream_proxy_handler(nxt_task_t *task, 358 nxt_http_request_t *r, nxt_upstream_t *upstream); 359 360nxt_int_t nxt_http_proxy_init(nxt_mp_t *mp, nxt_http_action_t *action, 361 nxt_http_action_conf_t *acf); 362nxt_int_t nxt_http_proxy_date(void *ctx, nxt_http_field_t *field, 363 uintptr_t data); 364nxt_int_t nxt_http_proxy_content_length(void *ctx, nxt_http_field_t *field, 365 uintptr_t data); 366nxt_int_t nxt_http_proxy_skip(void *ctx, nxt_http_field_t *field, 367 uintptr_t data); 368nxt_buf_t *nxt_http_proxy_buf_mem_alloc(nxt_task_t *task, nxt_http_request_t *r, 369 size_t size); 370void nxt_http_proxy_buf_mem_free(nxt_task_t *task, nxt_http_request_t *r, 371 nxt_buf_t *b); 372 373extern nxt_time_string_t nxt_http_date_cache; 374 375extern nxt_lvlhsh_t nxt_response_fields_hash; 376 377extern const nxt_http_proto_table_t nxt_http_proto[]; 378 379void nxt_h1p_websocket_first_frame_start(nxt_task_t *task, 380 nxt_http_request_t *r, nxt_buf_t *ws_frame); 381void nxt_h1p_websocket_frame_start(nxt_task_t *task, nxt_http_request_t *r, 382 nxt_buf_t *ws_frame); 383void nxt_h1p_complete_buffers(nxt_task_t *task, nxt_h1proto_t *h1p, 384 nxt_bool_t all); 385nxt_msec_t nxt_h1p_conn_request_timer_value(nxt_conn_t *c, uintptr_t data); 386 387extern const nxt_conn_state_t nxt_h1p_idle_close_state; 388 389#endif /* _NXT_HTTP_H_INCLUDED_ */
| 242 void (*send)(nxt_task_t *task, nxt_http_request_t *r, nxt_buf_t *out); 243 nxt_off_t (*body_bytes_sent)(nxt_task_t *task, nxt_http_proto_t proto); 244 void (*discard)(nxt_task_t *task, nxt_http_request_t *r, nxt_buf_t *last); 245 void (*close)(nxt_task_t *task, nxt_http_proto_t proto, 246 nxt_socket_conf_joint_t *joint); 247 248 void (*peer_connect)(nxt_task_t *task, nxt_http_peer_t *peer); 249 void (*peer_header_send)(nxt_task_t *task, nxt_http_peer_t *peer); 250 void (*peer_header_read)(nxt_task_t *task, nxt_http_peer_t *peer); 251 void (*peer_read)(nxt_task_t *task, nxt_http_peer_t *peer); 252 void (*peer_close)(nxt_task_t *task, nxt_http_peer_t *peer); 253 254 void (*ws_frame_start)(nxt_task_t *task, nxt_http_request_t *r, 255 nxt_buf_t *ws_frame); 256} nxt_http_proto_table_t; 257 258 259struct nxt_http_client_ip_s { 260 nxt_http_route_addr_rule_t *source; 261 nxt_str_t *header; 262 uint32_t header_hash; 263 uint8_t recursive; /* 1 bit */ 264}; 265 266 267#define NXT_HTTP_DATE_LEN nxt_length("Wed, 31 Dec 1986 16:40:00 GMT") 268 269nxt_inline u_char * 270nxt_http_date(u_char *buf, struct tm *tm) 271{ 272 static const char *week[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", 273 "Sat" }; 274 275 static const char *month[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", 276 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; 277 278 return nxt_sprintf(buf, buf + NXT_HTTP_DATE_LEN, 279 "%s, %02d %s %4d %02d:%02d:%02d GMT", 280 week[tm->tm_wday], tm->tm_mday, 281 month[tm->tm_mon], tm->tm_year + 1900, 282 tm->tm_hour, tm->tm_min, tm->tm_sec); 283} 284 285 286nxt_int_t nxt_http_init(nxt_task_t *task); 287nxt_int_t nxt_h1p_init(nxt_task_t *task); 288nxt_int_t nxt_http_response_hash_init(nxt_task_t *task); 289 290void nxt_http_conn_init(nxt_task_t *task, void *obj, void *data); 291nxt_http_request_t *nxt_http_request_create(nxt_task_t *task); 292void nxt_http_request_error(nxt_task_t *task, nxt_http_request_t *r, 293 nxt_http_status_t status); 294void nxt_http_request_read_body(nxt_task_t *task, nxt_http_request_t *r); 295void nxt_http_request_header_send(nxt_task_t *task, nxt_http_request_t *r, 296 nxt_work_handler_t body_handler, void *data); 297void nxt_http_request_ws_frame_start(nxt_task_t *task, nxt_http_request_t *r, 298 nxt_buf_t *ws_frame); 299void nxt_http_request_send(nxt_task_t *task, nxt_http_request_t *r, 300 nxt_buf_t *out); 301nxt_buf_t *nxt_http_buf_mem(nxt_task_t *task, nxt_http_request_t *r, 302 size_t size); 303nxt_buf_t *nxt_http_buf_last(nxt_http_request_t *r); 304void nxt_http_request_error_handler(nxt_task_t *task, void *obj, void *data); 305void nxt_http_request_close_handler(nxt_task_t *task, void *obj, void *data); 306 307nxt_int_t nxt_http_request_host(void *ctx, nxt_http_field_t *field, 308 uintptr_t data); 309nxt_int_t nxt_http_request_field(void *ctx, nxt_http_field_t *field, 310 uintptr_t offset); 311nxt_int_t nxt_http_request_content_length(void *ctx, nxt_http_field_t *field, 312 uintptr_t data); 313 314nxt_http_routes_t *nxt_http_routes_create(nxt_task_t *task, 315 nxt_router_temp_conf_t *tmcf, nxt_conf_value_t *routes_conf); 316nxt_http_action_t *nxt_http_action_create(nxt_task_t *task, 317 nxt_router_temp_conf_t *tmcf, nxt_str_t *pass); 318nxt_int_t nxt_http_routes_resolve(nxt_task_t *task, 319 nxt_router_temp_conf_t *tmcf); 320nxt_int_t nxt_http_pass_segments(nxt_mp_t *mp, nxt_str_t *pass, 321 nxt_str_t *segments, nxt_uint_t n); 322nxt_http_action_t *nxt_http_pass_application(nxt_task_t *task, 323 nxt_router_conf_t *rtcf, nxt_str_t *name); 324nxt_http_route_addr_rule_t *nxt_http_route_addr_rule_create( 325 nxt_task_t *task, nxt_mp_t *mp, nxt_conf_value_t *cv); 326nxt_int_t nxt_http_route_addr_rule(nxt_http_request_t *r, 327 nxt_http_route_addr_rule_t *addr_rule, nxt_sockaddr_t *sockaddr); 328nxt_http_route_rule_t *nxt_http_route_types_rule_create(nxt_task_t *task, 329 nxt_mp_t *mp, nxt_conf_value_t *types); 330nxt_int_t nxt_http_route_test_rule(nxt_http_request_t *r, 331 nxt_http_route_rule_t *rule, u_char *start, size_t length); 332 333nxt_int_t nxt_http_action_init(nxt_task_t *task, nxt_router_temp_conf_t *tmcf, 334 nxt_conf_value_t *cv, nxt_http_action_t *action); 335void nxt_http_request_action(nxt_task_t *task, nxt_http_request_t *r, 336 nxt_http_action_t *action); 337 338nxt_int_t nxt_upstreams_create(nxt_task_t *task, nxt_router_temp_conf_t *tmcf, 339 nxt_conf_value_t *conf); 340nxt_int_t nxt_upstreams_joint_create(nxt_router_temp_conf_t *tmcf, 341 nxt_upstream_t ***upstream_joint); 342 343nxt_int_t nxt_http_return_init(nxt_mp_t *mp, nxt_http_action_t *action, 344 nxt_http_action_conf_t *acf); 345 346nxt_int_t nxt_http_static_init(nxt_task_t *task, nxt_router_temp_conf_t *tmcf, 347 nxt_http_action_t *action, nxt_http_action_conf_t *acf); 348nxt_int_t nxt_http_static_mtypes_init(nxt_mp_t *mp, nxt_lvlhsh_t *hash); 349nxt_int_t nxt_http_static_mtypes_hash_add(nxt_mp_t *mp, nxt_lvlhsh_t *hash, 350 nxt_str_t *exten, nxt_str_t *type); 351nxt_str_t *nxt_http_static_mtype_get(nxt_lvlhsh_t *hash, nxt_str_t *exten); 352 353nxt_http_action_t *nxt_http_application_handler(nxt_task_t *task, 354 nxt_http_request_t *r, nxt_http_action_t *action); 355nxt_int_t nxt_upstream_find(nxt_upstreams_t *upstreams, nxt_str_t *name, 356 nxt_http_action_t *action); 357nxt_http_action_t *nxt_upstream_proxy_handler(nxt_task_t *task, 358 nxt_http_request_t *r, nxt_upstream_t *upstream); 359 360nxt_int_t nxt_http_proxy_init(nxt_mp_t *mp, nxt_http_action_t *action, 361 nxt_http_action_conf_t *acf); 362nxt_int_t nxt_http_proxy_date(void *ctx, nxt_http_field_t *field, 363 uintptr_t data); 364nxt_int_t nxt_http_proxy_content_length(void *ctx, nxt_http_field_t *field, 365 uintptr_t data); 366nxt_int_t nxt_http_proxy_skip(void *ctx, nxt_http_field_t *field, 367 uintptr_t data); 368nxt_buf_t *nxt_http_proxy_buf_mem_alloc(nxt_task_t *task, nxt_http_request_t *r, 369 size_t size); 370void nxt_http_proxy_buf_mem_free(nxt_task_t *task, nxt_http_request_t *r, 371 nxt_buf_t *b); 372 373extern nxt_time_string_t nxt_http_date_cache; 374 375extern nxt_lvlhsh_t nxt_response_fields_hash; 376 377extern const nxt_http_proto_table_t nxt_http_proto[]; 378 379void nxt_h1p_websocket_first_frame_start(nxt_task_t *task, 380 nxt_http_request_t *r, nxt_buf_t *ws_frame); 381void nxt_h1p_websocket_frame_start(nxt_task_t *task, nxt_http_request_t *r, 382 nxt_buf_t *ws_frame); 383void nxt_h1p_complete_buffers(nxt_task_t *task, nxt_h1proto_t *h1p, 384 nxt_bool_t all); 385nxt_msec_t nxt_h1p_conn_request_timer_value(nxt_conn_t *c, uintptr_t data); 386 387extern const nxt_conn_state_t nxt_h1p_idle_close_state; 388 389#endif /* _NXT_HTTP_H_INCLUDED_ */
|