Commit Graph

1179 Commits

Author SHA1 Message Date
Max Romanov 7053a35a60 Fixed WebSocket implementation that was broken on some systems.
The "nxt_http_websocket" request state, defined in "nxt_http_websocket.c",
is used in "nxt_router.c" and must be linked with external symbol declared
in "nxt_router.c".

Due to the missing "extern" keyword, building Unit with some linkers
(notably gold and LLD) caused WebSocket connections to get stuck or even
crash the router process.
2019-08-30 00:07:54 +03:00
Igor Sysoev e2abfaf381 Adding body handler to nxt_http_request_header_send(). 2019-08-26 18:29:00 +03:00
Max Romanov e291841b33 Node.js: introducing websocket support. 2019-08-20 16:32:05 +03:00
Max Romanov e501c74ddc Introducing websocket support in router and libunit. 2019-08-20 16:31:53 +03:00
Max Romanov 686f5b1436 Changing the sequence of body send execution.
Request state ready_handler required for further websocket events processing.
It is not required for regular response transferring.
2019-08-16 14:55:18 +03:00
Max Romanov 29911538ea Improving response header fields processing.
Fields are filtered one by one before being added to fields list.
This avoids adding and then skipping connection-specific fields.
2019-08-16 00:56:38 +03:00
Max Romanov caea9d3c07 Fixing multi-thread port write racing conditions. 2019-08-16 00:48:11 +03:00
Max Romanov 1b095ff417 Renaming supplemental request structures in router.
- nxt_req_app_link_t  -> nxt_request_app_link_t
- nxt_req_conn_link_t -> nxt_request_rpc_data_t

Corresponding abbreviated field names also changed:
- ra -> req_app_link
- rc -> req_rpc_data
2019-08-14 23:59:46 +03:00
Max Romanov 4bef4256c0 Java: implementing multipart message support.
This closes #265 issue on GitHub.
2019-08-14 15:24:41 +03:00
Valentin Bartenev 274260bd28 Router: allowed empty configurations.
Now it's possible to delete "listeners" and "applications" objects.

This closes #187 issue on GitHub.
2019-08-06 17:13:13 +03:00
Valentin Bartenev 7fd9444728 Node.js: returning "this" from writeHead() to allow chaining.
In Node.js version 11.10.0 and later, the writeHead() function returns "this".
2019-08-06 16:24:11 +03:00
Igor Sysoev c7210eaa5a nxt_h1proto_t definition was moved to h1proto implementation. 2019-08-06 15:29:40 +03:00
Igor Sysoev 17bb22a4e4 Refactored HTTP protocol callback table. 2019-08-06 15:29:39 +03:00
Axel Duch 7785c96c1a Added routing based on request scheme.
Scheme matches exact string “http” or “https”.
2019-07-24 13:47:35 +03:00
Valentin Bartenev 242dc363ce Perl: propagated compile options from perl build.
Some Perl compile options affects ABI and not using them while compiling
our module resulted in non-working build.

Notably on 32-bit Debian 10, Perl is built with -D_FILE_OFFSET_BITS=64
and our module after being compiled without this option caused segmentation
faults in unexpected places.
2019-07-17 21:17:30 +03:00
Max Romanov dcf46a63eb Exiting application process in case of pre_init stage error. 2019-07-17 16:57:43 +03:00
Max Romanov aab235c4dc Java: fixing realpath error message. 2019-07-17 10:52:48 +03:00
Valentin Bartenev ef89815f03 PHP: fixed script filename setting, broken after 2a71417d297f. 2019-07-16 17:58:48 +03:00
Max Romanov cc578b2e63 PHP: added PATH_INFO support. 2019-07-05 21:10:01 +03:00
Valentin Bartenev 924165c90b PHP: improved response status code handling.
There's no reason to parse "http_status_line"; the PHP interpreter already
does this.  If the line contains a valid status code, it's assigned to
"http_response_code".

This also fixes invalid status line handling, where the nxt_int_parse()
function returned -1; it was cast to unsigned, yielding response code 65535.
2019-07-05 18:42:30 +03:00
Max Romanov b1ee073707 PHP: removing excessive debug message. 2019-06-28 12:20:00 +03:00
Max Romanov ce17fef73d Fixed application crash handling in router.
Before this fix, request in router may hang until timeout expired if
application crashed during request processing.
2019-06-28 12:19:54 +03:00
Max Romanov 9ea4be7e4e Fixing allocation alignment for port fragments.
All allocated blocks for lvlhash required to be aligned because lower
address bits used for various extra information.  Using unaligned blocks
may cause invalid memory aceess.

This was issue found on buildbot running large configuration tests.
2019-06-28 12:19:48 +03:00
Max Romanov 3ceec5f4d2 Java: adding Content-Type response header for static files. 2019-06-28 12:19:40 +03:00
Igor Sysoev a2c1907fda Decreased level of some shutdown() and send() errors. 2019-06-18 18:01:03 +03:00
Max Romanov 24400b3a5d Node.js: packaging new nxt_napi.h.
File nxt_napi.h (introduced in 53533ba0097c) added into packaged files
list.

This closes #261 issue on GitHub.
2019-06-17 18:16:06 +03:00
Igor Sysoev 1f8c395fc0 Cookie-based routing should be case-sensitive. 2019-06-10 18:47:35 +03:00
Igor Sysoev 6a775f58af Added routing based on cookies. 2019-05-30 15:33:51 +03:00
Igor Sysoev 5fb3daa5af Added routing based on arguments. 2019-05-30 15:33:51 +03:00
Igor Sysoev 16273cf1c6 Handling routing errors. 2019-05-30 15:33:51 +03:00
Igor Sysoev 0ba7cfce75 Added routing based on header fields. 2019-05-30 15:33:51 +03:00
Igor Sysoev 3aaebe4169 Fixed segfault with empty routes array. 2019-05-30 15:33:51 +03:00
Igor Sysoev f2aa190f60 Fixed segfault with empty rule array. 2019-05-30 15:33:51 +03:00
Max Romanov 8241539734 Java: fixing typo in context initialization. 2019-05-30 15:02:09 +03:00
Max Romanov 6a2928b4bf Java: fixing request scheme using 'tls' flag. 2019-05-30 15:02:07 +03:00
Valentin Bartenev 6a6bc63c48 Configuration: support for POST operations on arrays.
It allows to add an array element without specifying the index.
2019-04-24 20:31:00 +03:00
Valentin Bartenev 4d35a7bbac Configuration: support for manipulations of array elements.
Now PUT and DELETE operations also work on elements.
This closes #242 issue on GitHub.
2019-04-24 20:31:00 +03:00
Valentin Bartenev 30768b7b3c Refactored nxt_conf_op_compile().
Now index is always initialized for create operations.

The changes in nxt_conf_op_compile() simplify adding upcoming support of
operations with arrays.

No functional changes.
2019-04-24 20:31:00 +03:00
Valentin Bartenev 1467d34d73 Removed unused field from nxt_conf_op_s. 2019-04-24 20:31:00 +03:00
Max Romanov c6e96647a1 Node.js: using low-case header names as key in req.headers.
Node.js modules (body-parser, row-body) search low-cased names
('content-length', 'content-type' etc.) to properly assemble request body.

This closes #246 issue on GitHub.
2019-04-17 19:15:41 +03:00
Valentin Bartenev 5e1cf14565 Controller: rejecting double wildcards. 2019-04-12 17:44:55 +03:00
Valentin Bartenev f0cc14d394 Simplified cycles in nxt_http_route_rule(). 2019-04-12 17:44:54 +03:00
Igor Sysoev 8339b15158 Added support for wildcards in the middle of match patterns. 2019-04-10 13:47:34 +03:00
Valentin Bartenev 7b839bf5da Backed out changeset f74d4dd9c3db.
This closes #240 issue on GitHub.
2019-04-03 18:40:47 +03:00
Max Romanov 6241099db2 Removing unused variables and assignments.
Warnings introduced in 53533ba0097c commit.
2019-04-02 16:07:49 +03:00
Max Romanov 56101e47ee Adding 'connection' to request as an alias to 'socket'.
Adding actual 'remoteAddress' and 'localAddress' into socket object.

This closes #232 issue on GitHub.
2019-04-01 16:40:49 +03:00
Max Romanov 8557cb3660 Introducing close event to notify about server stop.
This closes #236 on GitHub.
Thanks to 0xcdcdcdcd.
2019-04-01 16:40:40 +03:00
Max Romanov aca42de18a Adding syntax sugar.
With exceptions and overloads.
2019-04-01 16:40:33 +03:00
Max Romanov b96e5fd848 Turning off port read event state after main process fork.
Master port stores two file descriptors and works as a read port on the master
process side.  After a fork, the port switches into write mode and the read
socket closes, but the same event structure is used for the write socket.
However, the inherited structure remained in read state, telling the epoll
engine to use MOD operation instead of ADD.  The patch resets read event
state, so the engine may write using proper ADD operation.
2019-03-25 14:49:28 +03:00
Max Romanov 6c694d4b47 Ignoring EPERM error when changing application process uid/gid.
This closes #228 issue on GitHub.
2019-03-22 15:32:58 +03:00