1 2 /* 3 * Copyright (C) NGINX, Inc. 4 */ 5 6 #ifndef _NXT_ROUTER_REQUEST_H_INCLUDED_ 7 #define _NXT_ROUTER_REQUEST_H_INCLUDED_ 8 9 10 typedef struct nxt_msg_info_s { 11 nxt_buf_t *buf; 12 nxt_port_mmap_tracking_t tracking; 13 nxt_work_handler_t completion_handler; 14 } nxt_msg_info_t; 15 16 17 typedef struct nxt_request_app_link_s nxt_request_app_link_t; 18 19 20 typedef enum { 21 NXT_APR_NEW_PORT, 22 NXT_APR_REQUEST_FAILED, 23 NXT_APR_GOT_RESPONSE, 24 NXT_APR_UPGRADE, 25 NXT_APR_CLOSE, 26 } nxt_apr_action_t; 27 28 29 typedef struct { 30 uint32_t stream; 31 nxt_app_t *app; 32 33 nxt_port_t *app_port; 34 nxt_apr_action_t apr_action; 35 36 nxt_http_request_t *request; 37 nxt_msg_info_t msg_info; 38 nxt_request_app_link_t *req_app_link; 39 } nxt_request_rpc_data_t; 40 41 42 struct nxt_request_app_link_s { 43 uint32_t stream; 44 nxt_atomic_t use_count; 45 46 nxt_port_t *app_port; 47 nxt_apr_action_t apr_action; 48 49 nxt_port_t *reply_port; 50 nxt_http_request_t *request; 51 nxt_msg_info_t msg_info; 52 nxt_request_rpc_data_t *req_rpc_data; 53 nxt_fd_t body_fd; 54 55 nxt_nsec_t res_time; 56 57 nxt_queue_link_t link_app_requests; /* for nxt_app_t.requests */ 58 /* for nxt_port_t.pending_requests */ 59 nxt_queue_link_t link_port_pending; 60 nxt_queue_link_t link_app_pending; /* for nxt_app_t.pending */ 61 /* for nxt_port_t.active_websockets */ 62 nxt_queue_link_t link_port_websockets; 63 64 nxt_mp_t *mem_pool; 65 nxt_work_t work; 66 67 int err_code; 68 const char *err_str; 69 }; 70 71 72 #endif /* _NXT_ROUTER_REQUEST_H_INCLUDED_ */ 73