1 2/* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) NGINX, Inc. 5 */ 6 7#ifndef _NXT_ROUTER_H_INCLUDED_ 8#define _NXT_ROUTER_H_INCLUDED_ 9 10 11#include <nxt_main.h> 12#include <nxt_runtime.h> 13#include <nxt_main_process.h> 14#include <nxt_application.h> 15 16 17typedef struct { 18 nxt_thread_spinlock_t lock; 19 nxt_queue_t engines; 20 21 nxt_queue_t sockets; /* of nxt_socket_conf_t */ 22 nxt_queue_t apps; /* of nxt_app_t */ 23} nxt_router_t; 24 25 26typedef struct { 27 uint32_t count; 28 uint32_t threads; 29 nxt_router_t *router; 30 nxt_mp_t *mem_pool; 31} nxt_router_conf_t; 32 33 34typedef struct { 35 nxt_event_engine_t *engine; 36 nxt_work_t *jobs; 37 38 enum { 39 NXT_ROUTER_ENGINE_KEEP = 0, 40 NXT_ROUTER_ENGINE_ADD, 41 NXT_ROUTER_ENGINE_DELETE, 42 } action; 43} nxt_router_engine_conf_t; 44 45 46typedef struct { 47 nxt_queue_t creating; /* of nxt_socket_conf_t */ 48 nxt_queue_t pending; /* of nxt_socket_conf_t */ 49 nxt_queue_t updating; /* of nxt_socket_conf_t */ 50 nxt_queue_t keeping; /* of nxt_socket_conf_t */ 51 nxt_queue_t deleting; /* of nxt_socket_conf_t */ 52 53 nxt_queue_t apps; /* of nxt_app_t */ 54 nxt_queue_t previous; /* of nxt_app_t */ 55 56 uint32_t new_threads; 57 uint32_t stream; 58 uint32_t count; 59 60 nxt_event_engine_t *engine; 61 nxt_port_t *port; 62 nxt_array_t *engines; 63 nxt_router_conf_t *conf; 64 nxt_mp_t *mem_pool; 65} nxt_router_temp_conf_t; 66 67 68typedef struct { 69 nxt_task_t task; 70 nxt_work_t work; 71 nxt_router_temp_conf_t *tmcf; 72} nxt_joint_job_t; 73 74 75 76typedef nxt_int_t (*nxt_app_prepare_msg_t)(nxt_task_t *task, 77 nxt_app_request_t *r, nxt_app_wmsg_t *wmsg); 78 79 80struct nxt_app_s { 81 nxt_thread_mutex_t mutex; /* Protects ports queue. */ 82 nxt_queue_t ports; /* of nxt_port_t.app_link */ 83 84 nxt_queue_t requests; /* of nxt_req_conn_link_t */ 85 nxt_str_t name; 86 87 uint32_t pending_workers; 88 uint32_t workers; 89 uint32_t max_workers;
| 1 2/* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) NGINX, Inc. 5 */ 6 7#ifndef _NXT_ROUTER_H_INCLUDED_ 8#define _NXT_ROUTER_H_INCLUDED_ 9 10 11#include <nxt_main.h> 12#include <nxt_runtime.h> 13#include <nxt_main_process.h> 14#include <nxt_application.h> 15 16 17typedef struct { 18 nxt_thread_spinlock_t lock; 19 nxt_queue_t engines; 20 21 nxt_queue_t sockets; /* of nxt_socket_conf_t */ 22 nxt_queue_t apps; /* of nxt_app_t */ 23} nxt_router_t; 24 25 26typedef struct { 27 uint32_t count; 28 uint32_t threads; 29 nxt_router_t *router; 30 nxt_mp_t *mem_pool; 31} nxt_router_conf_t; 32 33 34typedef struct { 35 nxt_event_engine_t *engine; 36 nxt_work_t *jobs; 37 38 enum { 39 NXT_ROUTER_ENGINE_KEEP = 0, 40 NXT_ROUTER_ENGINE_ADD, 41 NXT_ROUTER_ENGINE_DELETE, 42 } action; 43} nxt_router_engine_conf_t; 44 45 46typedef struct { 47 nxt_queue_t creating; /* of nxt_socket_conf_t */ 48 nxt_queue_t pending; /* of nxt_socket_conf_t */ 49 nxt_queue_t updating; /* of nxt_socket_conf_t */ 50 nxt_queue_t keeping; /* of nxt_socket_conf_t */ 51 nxt_queue_t deleting; /* of nxt_socket_conf_t */ 52 53 nxt_queue_t apps; /* of nxt_app_t */ 54 nxt_queue_t previous; /* of nxt_app_t */ 55 56 uint32_t new_threads; 57 uint32_t stream; 58 uint32_t count; 59 60 nxt_event_engine_t *engine; 61 nxt_port_t *port; 62 nxt_array_t *engines; 63 nxt_router_conf_t *conf; 64 nxt_mp_t *mem_pool; 65} nxt_router_temp_conf_t; 66 67 68typedef struct { 69 nxt_task_t task; 70 nxt_work_t work; 71 nxt_router_temp_conf_t *tmcf; 72} nxt_joint_job_t; 73 74 75 76typedef nxt_int_t (*nxt_app_prepare_msg_t)(nxt_task_t *task, 77 nxt_app_request_t *r, nxt_app_wmsg_t *wmsg); 78 79 80struct nxt_app_s { 81 nxt_thread_mutex_t mutex; /* Protects ports queue. */ 82 nxt_queue_t ports; /* of nxt_port_t.app_link */ 83 84 nxt_queue_t requests; /* of nxt_req_conn_link_t */ 85 nxt_str_t name; 86 87 uint32_t pending_workers; 88 uint32_t workers; 89 uint32_t max_workers;
|
| 90 uint32_t max_pending_responses;
|
90 91 nxt_msec_t timeout; 92 93 nxt_app_type_t type:8; 94 uint8_t live; /* 1 bit */ 95 96 nxt_queue_link_t link; 97 98 nxt_str_t conf; 99 nxt_app_prepare_msg_t prepare_msg;
| 91 92 nxt_msec_t timeout; 93 94 nxt_app_type_t type:8; 95 uint8_t live; /* 1 bit */ 96 97 nxt_queue_link_t link; 98 99 nxt_str_t conf; 100 nxt_app_prepare_msg_t prepare_msg;
|
| 101 102 nxt_atomic_t use_count;
|
100}; 101 102 103typedef struct { 104 uint32_t count; 105 nxt_socket_t fd; 106} nxt_router_socket_t; 107 108 109typedef struct { 110 uint32_t count; 111 nxt_queue_link_t link; 112 nxt_router_socket_t *socket; 113 nxt_router_conf_t *router_conf; 114 nxt_sockaddr_t *sockaddr; 115 116 nxt_app_t *application; 117 118 nxt_listen_socket_t listen; 119 120 size_t header_buffer_size; 121 size_t large_header_buffer_size; 122 size_t large_header_buffers; 123 size_t body_buffer_size; 124 size_t max_body_size; 125 nxt_msec_t header_read_timeout; 126 nxt_msec_t body_read_timeout; 127} nxt_socket_conf_t; 128 129 130typedef struct { 131 uint32_t count; 132 nxt_queue_link_t link; 133 nxt_event_engine_t *engine; 134 nxt_socket_conf_t *socket_conf; 135 136 /* Modules configuraitons. */ 137} nxt_socket_conf_joint_t; 138 139 140void nxt_router_new_port_handler(nxt_task_t *task, nxt_port_recv_msg_t *msg); 141void nxt_router_conf_data_handler(nxt_task_t *task, nxt_port_recv_msg_t *msg); 142void nxt_router_remove_pid_handler(nxt_task_t *task, nxt_port_recv_msg_t *msg); 143
| 103}; 104 105 106typedef struct { 107 uint32_t count; 108 nxt_socket_t fd; 109} nxt_router_socket_t; 110 111 112typedef struct { 113 uint32_t count; 114 nxt_queue_link_t link; 115 nxt_router_socket_t *socket; 116 nxt_router_conf_t *router_conf; 117 nxt_sockaddr_t *sockaddr; 118 119 nxt_app_t *application; 120 121 nxt_listen_socket_t listen; 122 123 size_t header_buffer_size; 124 size_t large_header_buffer_size; 125 size_t large_header_buffers; 126 size_t body_buffer_size; 127 size_t max_body_size; 128 nxt_msec_t header_read_timeout; 129 nxt_msec_t body_read_timeout; 130} nxt_socket_conf_t; 131 132 133typedef struct { 134 uint32_t count; 135 nxt_queue_link_t link; 136 nxt_event_engine_t *engine; 137 nxt_socket_conf_t *socket_conf; 138 139 /* Modules configuraitons. */ 140} nxt_socket_conf_joint_t; 141 142 143void nxt_router_new_port_handler(nxt_task_t *task, nxt_port_recv_msg_t *msg); 144void nxt_router_conf_data_handler(nxt_task_t *task, nxt_port_recv_msg_t *msg); 145void nxt_router_remove_pid_handler(nxt_task_t *task, nxt_port_recv_msg_t *msg); 146
|
144nxt_bool_t nxt_router_app_remove_port(nxt_port_t *port);
| 147void nxt_router_app_port_close(nxt_task_t *task, nxt_port_t *port); 148void nxt_router_app_use(nxt_task_t *task, nxt_app_t *app, int i);
|
145 146#endif /* _NXT_ROUTER_H_INCLUDED_ */
| 149 150#endif /* _NXT_ROUTER_H_INCLUDED_ */
|