summaryrefslogtreecommitdiffhomepage
path: root/src (follow)
AgeCommit message (Collapse)AuthorFilesLines
2019-09-19Initial applications isolation support using Linux namespaces.Tiago de Bem Natel de Moura13-165/+1048
2019-09-19Releasing WebSocket frame in case of buffer allocation failure.Max Romanov1-0/+2
Found by Coverity (CID 349456).
2019-09-18Fixing master process crash after failed fork.Max Romanov2-3/+8
This closes #312 issue on GitHub.
2019-09-18Go: removing nxt_main.h usage.Max Romanov1-3/+2
One small step to Go modules support.
2019-09-18Fixing request release order to avoid crashes on exit.Max Romanov1-6/+10
Each request references the router process structure that owns all memory maps. The process structure has a reference counter; each request increases the counter to lock the structure in memory until request processing ends. Incoming and outgoing buffers reference memory maps that the process owns, so the process structure should be released only when all buffers are released to avoid invalid memory access and a crash. This describes the libunit library mechanism used for application processes. The background of this issue is as follows: The issue was found on buildbot when the router crashed during Java websocket tests. The Java application receives a notification from the master process; when the notification is processed, libunit deletes the process structure from its process hash and decrements the use counter; however, active websocket connections maintain their use counts on the process structure. After that, when the master process is stopping the application, libunit releases active websocket connections. At this point, it's important to release the connections' memory buffers before the corresponding process structure and all shared memory segments are released.
2019-09-18Go: do not store pointer to Go object.Max Romanov2-2/+49
To pass Go object references to C and back we use hack with casting to unsafe and then to uintptr. However, we should not store such references because Go not guaratnee it will be available by the same address. Introducing map with integer key helps to avoid dereference stored address. This closes #253 and #309 issues on GitHub.
2019-09-18Reducing number of warning messages.Max Romanov1-6/+5
One alert per failed allocation is enough.
2019-09-18Protecting context structures with mutex.Max Romanov1-4/+63
By design, Unit context is created for the thread which reads messages from the router. However, Go request handlers are called in a separate goroutine that may be executed in a different thread. To avoid a racing condition, access to lists of free structures in the context should be serialized. This patch should fix random crashes in Go applications under high load. This is related to #253 and #309 issues on GitHub.
2019-09-18Configuration: added ability to modify object members with slashes.Valentin Bartenev1-39/+49
Example: PUT/POST/DELETE /config/listeners/unix:%2Fpath%2Fto%2Fsocket This follows a49ee872e83d.
2019-09-17HTTP parser: fixed parsing of target after literal space character.Valentin Bartenev2-3/+32
In theory, all space characters in request target must be encoded; however, some clients may violate the specification. For the sake of interoperability, Unit supports unencoded space characters. Previously, if there was a space character before the extension or arguments parts, those parts weren't recognized. Also, quoted symbols and complex target weren't detected after a space character.
2019-09-16HTTP parser: removed unused "plus_in_target" flag.Valentin Bartenev3-48/+15
2019-09-16HTTP parser: removed unused "offset" field.Valentin Bartenev1-2/+0
Thanks to 洪志道 (Hong Zhi Dao).
2019-09-16HTTP parser: removed unused "exten_start" and "args_start" fields.Valentin Bartenev3-47/+37
2019-09-16Configuration: added ability to access object members with slashes.Valentin Bartenev6-4/+104
Now URI encoding can be used to escape "/" in the request path: GET /config/listeners/unix:%2Fpath%2Fto%2Fsocket/
2019-09-09Added "extern" to nxt_http_fields_hash_proto to avoid link issues.Max Romanov1-1/+1
2019-09-05Java: introducing websocket support.Max Romanov111-58/+15254
2019-09-02Making request state handler calls more consistent.Max Romanov2-10/+4
2019-08-30Fixed WebSocket implementation that was broken on some systems.Max Romanov1-1/+1
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-26Adding body handler to nxt_http_request_header_send().Igor Sysoev5-16/+27
2019-08-20Node.js: introducing websocket support.Max Romanov15-175/+2373
2019-08-20Introducing websocket support in router and libunit.Max Romanov26-440/+3508
2019-08-16Changing the sequence of body send execution.Max Romanov3-11/+11
Request state ready_handler required for further websocket events processing. It is not required for regular response transferring.
2019-08-16Improving response header fields processing.Max Romanov3-27/+46
Fields are filtered one by one before being added to fields list. This avoids adding and then skipping connection-specific fields.
2019-08-16Fixing multi-thread port write racing conditions.Max Romanov4-159/+165
2019-08-14Renaming supplemental request structures in router.Max Romanov2-349/+420
- 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-14Java: implementing multipart message support.Max Romanov4-14/+192
This closes #265 issue on GitHub.
2019-08-06Router: allowed empty configurations.Valentin Bartenev1-191/+189
Now it's possible to delete "listeners" and "applications" objects. This closes #187 issue on GitHub.
2019-08-06Node.js: returning "this" from writeHead() to allow chaining.Valentin Bartenev1-0/+2
In Node.js version 11.10.0 and later, the writeHead() function returns "this".
2019-08-06nxt_h1proto_t definition was moved to h1proto implementation.Igor Sysoev2-19/+21
2019-08-06Refactored HTTP protocol callback table.Igor Sysoev4-83/+48
2019-07-24Added routing based on request scheme.Axel Duch5-20/+69
Scheme matches exact string “http” or “https”.
2019-07-17Perl: propagated compile options from perl build.Valentin Bartenev1-1/+0
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-17Exiting application process in case of pre_init stage error.Max Romanov1-4/+1
2019-07-17Java: fixing realpath error message.Max Romanov1-1/+1
2019-07-16PHP: fixed script filename setting, broken after 2a71417d297f.Valentin Bartenev1-6/+8
2019-07-05PHP: added PATH_INFO support.Max Romanov1-74/+96
2019-07-05PHP: improved response status code handling.Valentin Bartenev1-12/+2
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-06-28PHP: removing excessive debug message.Max Romanov1-2/+0
2019-06-28Fixed application crash handling in router.Max Romanov1-4/+4
Before this fix, request in router may hang until timeout expired if application crashed during request processing.
2019-06-28Fixing allocation alignment for port fragments.Max Romanov1-1/+1
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-28Java: adding Content-Type response header for static files.Max Romanov1-0/+1
2019-06-18Decreased level of some shutdown() and send() errors.Igor Sysoev1-2/+2
2019-06-17Node.js: packaging new nxt_napi.h.Max Romanov1-0/+1
File nxt_napi.h (introduced in 53533ba0097c) added into packaged files list. This closes #261 issue on GitHub.
2019-06-10Cookie-based routing should be case-sensitive.Igor Sysoev1-5/+3
2019-05-30Added routing based on cookies.Igor Sysoev2-1/+219
2019-05-30Added routing based on arguments.Igor Sysoev2-15/+209
2019-05-30Handling routing errors.Igor Sysoev3-42/+47
2019-05-30Added routing based on header fields.Igor Sysoev4-67/+409
2019-05-30Fixed segfault with empty routes array.Igor Sysoev1-9/+6
2019-05-30Fixed segfault with empty rule array.Igor Sysoev1-3/+3