nxt_router.h (318:c2442f5e054d) nxt_router.h (343:9fa845db60fb)
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_ */