nxt_router.c (1915:48167dd83aa5) nxt_router.c (1920:7c19530e2502)
1
2/*
3 * Copyright (C) Igor Sysoev
4 * Copyright (C) Valentin V. Bartenev
5 * Copyright (C) NGINX, Inc.
6 */
7
8#include <nxt_router.h>

--- 30 unchanged lines hidden (view full) ---

39
40
41#if (NXT_TLS)
42
43typedef struct {
44 nxt_str_t name;
45 nxt_socket_conf_t *socket_conf;
46 nxt_router_temp_conf_t *temp_conf;
1
2/*
3 * Copyright (C) Igor Sysoev
4 * Copyright (C) Valentin V. Bartenev
5 * Copyright (C) NGINX, Inc.
6 */
7
8#include <nxt_router.h>

--- 30 unchanged lines hidden (view full) ---

39
40
41#if (NXT_TLS)
42
43typedef struct {
44 nxt_str_t name;
45 nxt_socket_conf_t *socket_conf;
46 nxt_router_temp_conf_t *temp_conf;
47 nxt_conf_value_t *conf_cmds;
47 nxt_tls_init_t *tls_init;
48 nxt_bool_t last;
49
48 nxt_bool_t last;
49
50 nxt_queue_link_t link; /* for nxt_socket_conf_t.tls */
50 nxt_queue_link_t link; /* for nxt_socket_conf_t.tls */
51} nxt_router_tlssock_t;
52
53#endif
54
55
56typedef struct {
57 nxt_str_t *name;
58 nxt_socket_conf_t *socket_conf;

--- 59 unchanged lines hidden (view full) ---

118static void nxt_router_listen_socket_ready(nxt_task_t *task,
119 nxt_port_recv_msg_t *msg, void *data);
120static void nxt_router_listen_socket_error(nxt_task_t *task,
121 nxt_port_recv_msg_t *msg, void *data);
122#if (NXT_TLS)
123static void nxt_router_tls_rpc_handler(nxt_task_t *task,
124 nxt_port_recv_msg_t *msg, void *data);
125static nxt_int_t nxt_router_conf_tls_insert(nxt_router_temp_conf_t *tmcf,
51} nxt_router_tlssock_t;
52
53#endif
54
55
56typedef struct {
57 nxt_str_t *name;
58 nxt_socket_conf_t *socket_conf;

--- 59 unchanged lines hidden (view full) ---

118static void nxt_router_listen_socket_ready(nxt_task_t *task,
119 nxt_port_recv_msg_t *msg, void *data);
120static void nxt_router_listen_socket_error(nxt_task_t *task,
121 nxt_port_recv_msg_t *msg, void *data);
122#if (NXT_TLS)
123static void nxt_router_tls_rpc_handler(nxt_task_t *task,
124 nxt_port_recv_msg_t *msg, void *data);
125static nxt_int_t nxt_router_conf_tls_insert(nxt_router_temp_conf_t *tmcf,
126 nxt_conf_value_t *value, nxt_socket_conf_t *skcf,
127 nxt_conf_value_t * conf_cmds, nxt_bool_t last);
126 nxt_conf_value_t *value, nxt_socket_conf_t *skcf, nxt_tls_init_t *tls_init,
127 nxt_bool_t last);
128#endif
129static void nxt_router_app_rpc_create(nxt_task_t *task,
130 nxt_router_temp_conf_t *tmcf, nxt_app_t *app);
131static void nxt_router_app_prefork_ready(nxt_task_t *task,
132 nxt_port_recv_msg_t *msg, void *data);
133static void nxt_router_app_prefork_error(nxt_task_t *task,
134 nxt_port_recv_msg_t *msg, void *data);
135static nxt_socket_conf_t *nxt_router_socket_conf(nxt_task_t *task,

--- 1200 unchanged lines hidden (view full) ---

1336 nxt_str_t name, path, target;
1337 nxt_app_t *app, *prev;
1338 nxt_str_t *t, *s, *targets;
1339 nxt_uint_t n, i;
1340 nxt_port_t *port;
1341 nxt_router_t *router;
1342 nxt_app_joint_t *app_joint;
1343#if (NXT_TLS)
128#endif
129static void nxt_router_app_rpc_create(nxt_task_t *task,
130 nxt_router_temp_conf_t *tmcf, nxt_app_t *app);
131static void nxt_router_app_prefork_ready(nxt_task_t *task,
132 nxt_port_recv_msg_t *msg, void *data);
133static void nxt_router_app_prefork_error(nxt_task_t *task,
134 nxt_port_recv_msg_t *msg, void *data);
135static nxt_socket_conf_t *nxt_router_socket_conf(nxt_task_t *task,

--- 1200 unchanged lines hidden (view full) ---

1336 nxt_str_t name, path, target;
1337 nxt_app_t *app, *prev;
1338 nxt_str_t *t, *s, *targets;
1339 nxt_uint_t n, i;
1340 nxt_port_t *port;
1341 nxt_router_t *router;
1342 nxt_app_joint_t *app_joint;
1343#if (NXT_TLS)
1344 nxt_conf_value_t *certificate, *conf_cmds;
1344 nxt_tls_init_t *tls_init;
1345 nxt_conf_value_t *certificate;
1345#endif
1346 nxt_conf_value_t *conf, *http, *value, *websocket;
1347 nxt_conf_value_t *applications, *application;
1348 nxt_conf_value_t *listeners, *listener;
1349 nxt_conf_value_t *routes_conf, *static_conf;
1350 nxt_socket_conf_t *skcf;
1351 nxt_http_routes_t *routes;
1352 nxt_event_engine_t *engine;

--- 5 unchanged lines hidden (view full) ---

1358 static nxt_str_t http_path = nxt_string("/settings/http");
1359 static nxt_str_t applications_path = nxt_string("/applications");
1360 static nxt_str_t listeners_path = nxt_string("/listeners");
1361 static nxt_str_t routes_path = nxt_string("/routes");
1362 static nxt_str_t access_log_path = nxt_string("/access_log");
1363#if (NXT_TLS)
1364 static nxt_str_t certificate_path = nxt_string("/tls/certificate");
1365 static nxt_str_t conf_commands_path = nxt_string("/tls/conf_commands");
1346#endif
1347 nxt_conf_value_t *conf, *http, *value, *websocket;
1348 nxt_conf_value_t *applications, *application;
1349 nxt_conf_value_t *listeners, *listener;
1350 nxt_conf_value_t *routes_conf, *static_conf;
1351 nxt_socket_conf_t *skcf;
1352 nxt_http_routes_t *routes;
1353 nxt_event_engine_t *engine;

--- 5 unchanged lines hidden (view full) ---

1359 static nxt_str_t http_path = nxt_string("/settings/http");
1360 static nxt_str_t applications_path = nxt_string("/applications");
1361 static nxt_str_t listeners_path = nxt_string("/listeners");
1362 static nxt_str_t routes_path = nxt_string("/routes");
1363 static nxt_str_t access_log_path = nxt_string("/access_log");
1364#if (NXT_TLS)
1365 static nxt_str_t certificate_path = nxt_string("/tls/certificate");
1366 static nxt_str_t conf_commands_path = nxt_string("/tls/conf_commands");
1367 static nxt_str_t conf_cache_path = nxt_string("/tls/session/cache_size");
1368 static nxt_str_t conf_timeout_path = nxt_string("/tls/session/timeout");
1366#endif
1367 static nxt_str_t static_path = nxt_string("/settings/http/static");
1368 static nxt_str_t websocket_path = nxt_string("/settings/http/websocket");
1369
1370 conf = nxt_conf_json_parse(tmcf->mem_pool, start, end, NULL);
1371 if (conf == NULL) {
1372 nxt_alert(task, "configuration parsing error");
1373 return NXT_ERROR;

--- 362 unchanged lines hidden (view full) ---

1736 t->start = (u_char *) task->thread->runtime->tmp;
1737 t->length = nxt_strlen(t->start);
1738 }
1739
1740#if (NXT_TLS)
1741 certificate = nxt_conf_get_path(listener, &certificate_path);
1742
1743 if (certificate != NULL) {
1369#endif
1370 static nxt_str_t static_path = nxt_string("/settings/http/static");
1371 static nxt_str_t websocket_path = nxt_string("/settings/http/websocket");
1372
1373 conf = nxt_conf_json_parse(tmcf->mem_pool, start, end, NULL);
1374 if (conf == NULL) {
1375 nxt_alert(task, "configuration parsing error");
1376 return NXT_ERROR;

--- 362 unchanged lines hidden (view full) ---

1739 t->start = (u_char *) task->thread->runtime->tmp;
1740 t->length = nxt_strlen(t->start);
1741 }
1742
1743#if (NXT_TLS)
1744 certificate = nxt_conf_get_path(listener, &certificate_path);
1745
1746 if (certificate != NULL) {
1744 conf_cmds = nxt_conf_get_path(listener, &conf_commands_path);
1747 tls_init = nxt_mp_get(tmcf->mem_pool, sizeof(nxt_tls_init_t));
1748 if (nxt_slow_path(tls_init == NULL)) {
1749 return NXT_ERROR;
1750 }
1745
1751
1752 tls_init->cache_size = 0;
1753 tls_init->timeout = 300;
1754
1755 value = nxt_conf_get_path(listener, &conf_cache_path);
1756 if (value != NULL) {
1757 tls_init->cache_size = nxt_conf_get_number(value);
1758 }
1759
1760 value = nxt_conf_get_path(listener, &conf_timeout_path);
1761 if (value != NULL) {
1762 tls_init->timeout = nxt_conf_get_number(value);
1763 }
1764
1765 tls_init->conf_cmds = nxt_conf_get_path(listener,
1766 &conf_commands_path);
1767
1746 if (nxt_conf_type(certificate) == NXT_CONF_ARRAY) {
1747 n = nxt_conf_array_elements_count(certificate);
1748
1749 for (i = 0; i < n; i++) {
1750 value = nxt_conf_get_array_element(certificate, i);
1751
1752 nxt_assert(value != NULL);
1753
1754 ret = nxt_router_conf_tls_insert(tmcf, value, skcf,
1768 if (nxt_conf_type(certificate) == NXT_CONF_ARRAY) {
1769 n = nxt_conf_array_elements_count(certificate);
1770
1771 for (i = 0; i < n; i++) {
1772 value = nxt_conf_get_array_element(certificate, i);
1773
1774 nxt_assert(value != NULL);
1775
1776 ret = nxt_router_conf_tls_insert(tmcf, value, skcf,
1755 conf_cmds, i == 0);
1777 tls_init, i == 0);
1756 if (nxt_slow_path(ret != NXT_OK)) {
1757 goto fail;
1758 }
1759 }
1760
1761 } else {
1762 /* NXT_CONF_STRING */
1763 ret = nxt_router_conf_tls_insert(tmcf, certificate, skcf,
1778 if (nxt_slow_path(ret != NXT_OK)) {
1779 goto fail;
1780 }
1781 }
1782
1783 } else {
1784 /* NXT_CONF_STRING */
1785 ret = nxt_router_conf_tls_insert(tmcf, certificate, skcf,
1764 conf_cmds, 1);
1786 tls_init, 1);
1765 if (nxt_slow_path(ret != NXT_OK)) {
1766 goto fail;
1767 }
1768 }
1769 }
1770#endif
1771
1772 skcf->listen->handler = nxt_http_conn_init;

--- 78 unchanged lines hidden (view full) ---

1851}
1852
1853
1854#if (NXT_TLS)
1855
1856static nxt_int_t
1857nxt_router_conf_tls_insert(nxt_router_temp_conf_t *tmcf,
1858 nxt_conf_value_t *value, nxt_socket_conf_t *skcf,
1787 if (nxt_slow_path(ret != NXT_OK)) {
1788 goto fail;
1789 }
1790 }
1791 }
1792#endif
1793
1794 skcf->listen->handler = nxt_http_conn_init;

--- 78 unchanged lines hidden (view full) ---

1873}
1874
1875
1876#if (NXT_TLS)
1877
1878static nxt_int_t
1879nxt_router_conf_tls_insert(nxt_router_temp_conf_t *tmcf,
1880 nxt_conf_value_t *value, nxt_socket_conf_t *skcf,
1859 nxt_conf_value_t *conf_cmds, nxt_bool_t last)
1881 nxt_tls_init_t *tls_init, nxt_bool_t last)
1860{
1861 nxt_router_tlssock_t *tls;
1862
1863 tls = nxt_mp_get(tmcf->mem_pool, sizeof(nxt_router_tlssock_t));
1864 if (nxt_slow_path(tls == NULL)) {
1865 return NXT_ERROR;
1866 }
1867
1882{
1883 nxt_router_tlssock_t *tls;
1884
1885 tls = nxt_mp_get(tmcf->mem_pool, sizeof(nxt_router_tlssock_t));
1886 if (nxt_slow_path(tls == NULL)) {
1887 return NXT_ERROR;
1888 }
1889
1890 tls->tls_init = tls_init;
1868 tls->socket_conf = skcf;
1891 tls->socket_conf = skcf;
1869 tls->conf_cmds = conf_cmds;
1870 tls->temp_conf = tmcf;
1871 tls->last = last;
1872 nxt_conf_get_string(value, &tls->name);
1873
1874 nxt_queue_insert_tail(&tmcf->tls, &tls->link);
1875
1876 return NXT_OK;
1877}

--- 584 unchanged lines hidden (view full) ---

2462
2463 tlscf->no_wait_shutdown = 1;
2464 tls->socket_conf->tls = tlscf;
2465
2466 } else {
2467 tlscf = tls->socket_conf->tls;
2468 }
2469
1892 tls->temp_conf = tmcf;
1893 tls->last = last;
1894 nxt_conf_get_string(value, &tls->name);
1895
1896 nxt_queue_insert_tail(&tmcf->tls, &tls->link);
1897
1898 return NXT_OK;
1899}

--- 584 unchanged lines hidden (view full) ---

2484
2485 tlscf->no_wait_shutdown = 1;
2486 tls->socket_conf->tls = tlscf;
2487
2488 } else {
2489 tlscf = tls->socket_conf->tls;
2490 }
2491
2492 tls->tls_init->conf = tlscf;
2493
2470 bundle = nxt_mp_get(mp, sizeof(nxt_tls_bundle_conf_t));
2471 if (nxt_slow_path(bundle == NULL)) {
2472 goto fail;
2473 }
2474
2475 if (nxt_slow_path(nxt_str_dup(mp, &bundle->name, &tls->name) == NULL)) {
2476 goto fail;
2477 }
2478
2479 bundle->chain_file = msg->fd[0];
2480 bundle->next = tlscf->bundle;
2481 tlscf->bundle = bundle;
2482
2494 bundle = nxt_mp_get(mp, sizeof(nxt_tls_bundle_conf_t));
2495 if (nxt_slow_path(bundle == NULL)) {
2496 goto fail;
2497 }
2498
2499 if (nxt_slow_path(nxt_str_dup(mp, &bundle->name, &tls->name) == NULL)) {
2500 goto fail;
2501 }
2502
2503 bundle->chain_file = msg->fd[0];
2504 bundle->next = tlscf->bundle;
2505 tlscf->bundle = bundle;
2506
2483 ret = task->thread->runtime->tls->server_init(task, tlscf, mp,
2484 tls->conf_cmds, tls->last);
2507 ret = task->thread->runtime->tls->server_init(task, mp, tls->tls_init,
2508 tls->last);
2485 if (nxt_slow_path(ret != NXT_OK)) {
2486 goto fail;
2487 }
2488
2489 nxt_work_queue_add(&task->thread->engine->fast_work_queue,
2490 nxt_router_conf_apply, task, tmcf, NULL);
2491 return;
2492

--- 3123 unchanged lines hidden ---
2509 if (nxt_slow_path(ret != NXT_OK)) {
2510 goto fail;
2511 }
2512
2513 nxt_work_queue_add(&task->thread->engine->fast_work_queue,
2514 nxt_router_conf_apply, task, tmcf, NULL);
2515 return;
2516

--- 3123 unchanged lines hidden ---