Skip to content

Commit 0d2b990

Browse files
committed
release: 6.1.1
1 parent fa2e12e commit 0d2b990

File tree

5 files changed

+2030
-5229
lines changed

5 files changed

+2030
-5229
lines changed

Diff for: CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
cmake_minimum_required(VERSION 3.5.1)
22
cmake_policy(SET CMP0069 NEW)
33

4-
project(llhttp VERSION 8.1.2)
4+
project(llhttp VERSION 6.1.1)
55
include(GNUInstallDirs)
66

77
set(CMAKE_C_STANDARD 99)

Diff for: README.md

+3-255
Original file line numberDiff line numberDiff line change
@@ -92,239 +92,6 @@ if (err == HPE_OK) {
9292
```
9393
For more information on API usage, please refer to [src/native/api.h](https://github.com/nodejs/llhttp/blob/main/src/native/api.h).
9494
95-
## API
96-
97-
### llhttp_settings_t
98-
99-
The settings object contains a list of callbacks that the parser will invoke.
100-
101-
The following callbacks can return `0` (proceed normally), `-1` (error) or `HPE_PAUSED` (pause the parser):
102-
103-
* `on_message_begin`: Invoked when a new request/response starts.
104-
* `on_message_complete`: Invoked when a request/response has been completedly parsed.
105-
* `on_url_complete`: Invoked after the URL has been parsed.
106-
* `on_method_complete`: Invoked after the HTTP method has been parsed.
107-
* `on_version_complete`: Invoked after the HTTP version has been parsed.
108-
* `on_status_complete`: Invoked after the status code has been parsed.
109-
* `on_header_field_complete`: Invoked after a header name has been parsed.
110-
* `on_header_value_complete`: Invoked after a header value has been parsed.
111-
* `on_chunk_header`: Invoked after a new chunk is started. The current chunk length is stored in `parser->content_length`.
112-
* `on_chunk_extension_name_complete`: Invoked after a chunk extension name is started.
113-
* `on_chunk_extension_value_complete`: Invoked after a chunk extension value is started.
114-
* `on_chunk_complete`: Invoked after a new chunk is received.
115-
* `on_reset`: Invoked after `on_message_complete` and before `on_message_begin` when a new message
116-
is received on the same parser. This is not invoked for the first message of the parser.
117-
118-
The following callbacks can return `0` (proceed normally), `-1` (error) or `HPE_USER` (error from the callback):
119-
120-
* `on_url`: Invoked when another character of the URL is received.
121-
* `on_status`: Invoked when another character of the status is received.
122-
* `on_method`: Invoked when another character of the method is received.
123-
When parser is created with `HTTP_BOTH` and the input is a response, this also invoked for the sequence `HTTP/`
124-
of the first message.
125-
* `on_version`: Invoked when another character of the version is received.
126-
* `on_header_field`: Invoked when another character of a header name is received.
127-
* `on_header_value`: Invoked when another character of a header value is received.
128-
* `on_chunk_extension_name`: Invoked when another character of a chunk extension name is received.
129-
* `on_chunk_extension_value`: Invoked when another character of a extension value is received.
130-
131-
The callback `on_headers_complete`, invoked when headers are completed, can return:
132-
133-
* `0`: Proceed normally.
134-
* `1`: Assume that request/response has no body, and proceed to parsing the next message.
135-
* `2`: Assume absence of body (as above) and make `llhttp_execute()` return `HPE_PAUSED_UPGRADE`.
136-
* `-1`: Error
137-
* `HPE_PAUSED`: Pause the parser.
138-
139-
### `void llhttp_init(llhttp_t* parser, llhttp_type_t type, const llhttp_settings_t* settings)`
140-
141-
Initialize the parser with specific type and user settings.
142-
143-
### `uint8_t llhttp_get_type(llhttp_t* parser)`
144-
145-
Returns the type of the parser.
146-
147-
### `uint8_t llhttp_get_http_major(llhttp_t* parser)`
148-
149-
Returns the major version of the HTTP protocol of the current request/response.
150-
151-
### `uint8_t llhttp_get_http_minor(llhttp_t* parser)`
152-
153-
Returns the minor version of the HTTP protocol of the current request/response.
154-
155-
### `uint8_t llhttp_get_method(llhttp_t* parser)`
156-
157-
Returns the method of the current request.
158-
159-
### `int llhttp_get_status_code(llhttp_t* parser)`
160-
161-
Returns the method of the current response.
162-
163-
### `uint8_t llhttp_get_upgrade(llhttp_t* parser)`
164-
165-
Returns `1` if request includes the `Connection: upgrade` header.
166-
167-
### `void llhttp_reset(llhttp_t* parser)`
168-
169-
Reset an already initialized parser back to the start state, preserving the
170-
existing parser type, callback settings, user data, and lenient flags.
171-
172-
### `void llhttp_settings_init(llhttp_settings_t* settings)`
173-
174-
Initialize the settings object.
175-
176-
### `llhttp_errno_t llhttp_execute(llhttp_t* parser, const char* data, size_t len)`
177-
178-
Parse full or partial request/response, invoking user callbacks along the way.
179-
180-
If any of `llhttp_data_cb` returns errno not equal to `HPE_OK` - the parsing interrupts,
181-
and such errno is returned from `llhttp_execute()`. If `HPE_PAUSED` was used as a errno,
182-
the execution can be resumed with `llhttp_resume()` call.
183-
184-
In a special case of CONNECT/Upgrade request/response `HPE_PAUSED_UPGRADE` is returned
185-
after fully parsing the request/response. If the user wishes to continue parsing,
186-
they need to invoke `llhttp_resume_after_upgrade()`.
187-
188-
**if this function ever returns a non-pause type error, it will continue to return
189-
the same error upon each successive call up until `llhttp_init()` is called.**
190-
191-
### `llhttp_errno_t llhttp_finish(llhttp_t* parser)`
192-
193-
This method should be called when the other side has no further bytes to
194-
send (e.g. shutdown of readable side of the TCP connection.)
195-
196-
Requests without `Content-Length` and other messages might require treating
197-
all incoming bytes as the part of the body, up to the last byte of the
198-
connection.
199-
200-
This method will invoke `on_message_complete()` callback if the
201-
request was terminated safely. Otherwise a error code would be returned.
202-
203-
204-
### `int llhttp_message_needs_eof(const llhttp_t* parser)`
205-
206-
Returns `1` if the incoming message is parsed until the last byte, and has to be completed by calling `llhttp_finish()` on EOF.
207-
208-
### `int llhttp_should_keep_alive(const llhttp_t* parser)`
209-
210-
Returns `1` if there might be any other messages following the last that was
211-
successfully parsed.
212-
213-
### `void llhttp_pause(llhttp_t* parser)`
214-
215-
Make further calls of `llhttp_execute()` return `HPE_PAUSED` and set
216-
appropriate error reason.
217-
218-
**Do not call this from user callbacks! User callbacks must return
219-
`HPE_PAUSED` if pausing is required.**
220-
221-
### `void llhttp_resume(llhttp_t* parser)`
222-
223-
Might be called to resume the execution after the pause in user's callback.
224-
225-
See `llhttp_execute()` above for details.
226-
227-
**Call this only if `llhttp_execute()` returns `HPE_PAUSED`.**
228-
229-
### `void llhttp_resume_after_upgrade(llhttp_t* parser)`
230-
231-
Might be called to resume the execution after the pause in user's callback.
232-
See `llhttp_execute()` above for details.
233-
234-
**Call this only if `llhttp_execute()` returns `HPE_PAUSED_UPGRADE`**
235-
236-
### `llhttp_errno_t llhttp_get_errno(const llhttp_t* parser)`
237-
238-
Returns the latest error.
239-
240-
### `const char* llhttp_get_error_reason(const llhttp_t* parser)`
241-
242-
Returns the verbal explanation of the latest returned error.
243-
244-
**User callback should set error reason when returning the error. See
245-
`llhttp_set_error_reason()` for details.**
246-
247-
### `void llhttp_set_error_reason(llhttp_t* parser, const char* reason)`
248-
249-
Assign verbal description to the returned error. Must be called in user
250-
callbacks right before returning the errno.
251-
252-
**`HPE_USER` error code might be useful in user callbacks.**
253-
254-
### `const char* llhttp_get_error_pos(const llhttp_t* parser)`
255-
256-
Returns the pointer to the last parsed byte before the returned error. The
257-
pointer is relative to the `data` argument of `llhttp_execute()`.
258-
259-
**This method might be useful for counting the number of parsed bytes.**
260-
261-
### `const char* llhttp_errno_name(llhttp_errno_t err)`
262-
263-
Returns textual name of error code.
264-
265-
### `const char* llhttp_method_name(llhttp_method_t method)`
266-
267-
Returns textual name of HTTP method.
268-
269-
### `const char* llhttp_status_name(llhttp_status_t status)`
270-
271-
Returns textual name of HTTP status.
272-
273-
### `void llhttp_set_lenient_headers(llhttp_t* parser, int enabled)`
274-
275-
Enables/disables lenient header value parsing (disabled by default).
276-
Lenient parsing disables header value token checks, extending llhttp's
277-
protocol support to highly non-compliant clients/server.
278-
279-
No `HPE_INVALID_HEADER_TOKEN` will be raised for incorrect header values when
280-
lenient parsing is "on".
281-
282-
**USE AT YOUR OWN RISK!**
283-
284-
### `void llhttp_set_lenient_chunked_length(llhttp_t* parser, int enabled)`
285-
286-
Enables/disables lenient handling of conflicting `Transfer-Encoding` and
287-
`Content-Length` headers (disabled by default).
288-
289-
Normally `llhttp` would error when `Transfer-Encoding` is present in
290-
conjunction with `Content-Length`.
291-
292-
This error is important to prevent HTTP request smuggling, but may be less desirable
293-
for small number of cases involving legacy servers.
294-
295-
**USE AT YOUR OWN RISK!**
296-
297-
### `void llhttp_set_lenient_keep_alive(llhttp_t* parser, int enabled)`
298-
299-
Enables/disables lenient handling of `Connection: close` and HTTP/1.0
300-
requests responses.
301-
302-
Normally `llhttp` would error on (in strict mode) or discard (in loose mode)
303-
the HTTP request/response after the request/response with `Connection: close`
304-
and `Content-Length`.
305-
306-
This is important to prevent cache poisoning attacks,
307-
but might interact badly with outdated and insecure clients.
308-
309-
With this flag the extra request/response will be parsed normally.
310-
311-
**USE AT YOUR OWN RISK!**
312-
313-
### `void llhttp_set_lenient_transfer_encoding(llhttp_t* parser, int enabled)`
314-
315-
Enables/disables lenient handling of `Transfer-Encoding` header.
316-
317-
Normally `llhttp` would error when a `Transfer-Encoding` has `chunked` value
318-
and another value after it (either in a single header or in multiple
319-
headers whose value are internally joined using `, `).
320-
321-
This is mandated by the spec to reliably determine request body size and thus
322-
avoid request smuggling.
323-
324-
With this flag the extra value will be parsed normally.
325-
326-
**USE AT YOUR OWN RISK!**
327-
32895
## Build Instructions
32996
33097
Make sure you have [Node.js](https://nodejs.org/), npm and npx installed. Then under project directory run:
@@ -338,41 +105,23 @@ make
338105

339106
### Bindings to other languages
340107

341-
* Lua: [MunifTanjim/llhttp.lua][11]
342108
* Python: [pallas/pyllhttp][8]
343109
* Ruby: [metabahn/llhttp][9]
344110
* Rust: [JackLiar/rust-llhttp][10]
345111

346112
### Using with CMake
347113

348-
If you want to use this library in a CMake project as a shared library, you can use the snippet below.
349-
350-
```
351-
FetchContent_Declare(llhttp
352-
URL "https://github.com/nodejs/llhttp/archive/refs/tags/release/v8.1.0.tar.gz")
353-
354-
FetchContent_MakeAvailable(llhttp)
355-
356-
# Link with the llhttp_shared target
357-
target_link_libraries(${EXAMPLE_PROJECT_NAME} ${PROJECT_LIBRARIES} llhttp_shared ${PROJECT_NAME})
358-
```
359-
360-
If you want to use this library in a CMake project as a static library, you can set some cache variables first.
114+
If you want to use this library in a CMake project you can use the snippet below.
361115

362116
```
363117
FetchContent_Declare(llhttp
364-
URL "https://github.com/nodejs/llhttp/archive/refs/tags/release/v8.1.0.tar.gz")
118+
URL "https://github.com/nodejs/llhttp/archive/refs/tags/v6.0.5.tar.gz") # Using version 6.0.5
365119
366-
set(BUILD_SHARED_LIBS OFF CACHE INTERNAL "")
367-
set(BUILD_STATIC_LIBS ON CACHE INTERNAL "")
368120
FetchContent_MakeAvailable(llhttp)
369121
370-
# Link with the llhttp_static target
371-
target_link_libraries(${EXAMPLE_PROJECT_NAME} ${PROJECT_LIBRARIES} llhttp_static ${PROJECT_NAME})
122+
target_link_libraries(${EXAMPLE_PROJECT_NAME} ${PROJECT_LIBRARIES} llhttp ${PROJECT_NAME})
372123
```
373124

374-
_Note that using the git repo directly (e.g., via a git repo url and tag) will not work with FetchContent_Declare because [CMakeLists.txt](./CMakeLists.txt) requires string replacements (e.g., `_RELEASE_`) before it will build._
375-
376125
## Building on Windows
377126

378127
### Installation
@@ -431,4 +180,3 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
431180
[8]: https://github.com/pallas/pyllhttp
432181
[9]: https://github.com/metabahn/llhttp
433182
[10]: https://github.com/JackLiar/rust-llhttp
434-
[11]: https://github.com/MunifTanjim/llhttp.lua

0 commit comments

Comments
 (0)