llhttp-ffi 0.3.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ec9725ef7398a6548859c7aab1dfb17a3bfc1aa1db2824d6f917a44528df130a
4
- data.tar.gz: 790e594a54a2c0b5ffac84c3f88ee83d8190b2f159b2e535e302c13b92211dfd
3
+ metadata.gz: 9720c041b7640bb1d125d8b62c758c78127a7d665c93f1d564df6b2fbaac0581
4
+ data.tar.gz: 2fde51f637fd54f90888e944ee29257aee370e7f3353c2edb4040a28539c5018
5
5
  SHA512:
6
- metadata.gz: dbefe79c2c76d2bed5aab900924f1ae7d45f9a7b5a21b19f0773e0e594c3123c7aefbad04af2418bf85d3f5d9e1a1c200b0cc37e6b3f74a4224dfbd84ef771a0
7
- data.tar.gz: 655d99b69334d5b9471aab8a43142d021e556d20813805b95508f556bd6f990bbaa8d7a634b293435978971ae8c66233def9ba49be892bf25d9d9b50a8c90f01
6
+ metadata.gz: 7048b50742f8e1cb52d62906f57b5d38f5af4835ee5fe8e39c3d188409329f802423a9f278f2bbdaea59102a7313956f2ff7037158ee29aac2b29fb6b56311df
7
+ data.tar.gz: 885c7f34f7917b0bf4da8116159045f3821c010467a84e9485fd10c3418d1972e1a88127a03c3e2900a5ad9017e014997b0773f5987614ec5621d8023b64906c
data/CHANGELOG.md CHANGED
@@ -1,38 +1,49 @@
1
- ## [v0.3.1](https://github.com/metabahn/llhttp/releases/tag/2021-06-25)
1
+ ## [v0.5.0](https://github.com/bryanp/llhttp/releases/tag/2023-03-29)
2
+
3
+ *released on 2023-03-29*
4
+
5
+ * `chg` [#27](https://github.com/bryanp/llhttp/pull/27) Update ffi to llhttp 8.1.0 ([bryanp](https://github.com/bryanp))
6
+
7
+ ## v0.4.0
8
+
9
+ *released on 2021-09-09*
10
+
11
+ * `add` [#25](https://github.com/bryanp/llhttp/pull/25) Add support for resetting the parser ([bryanp](https://github.com/bryanp))
12
+ * `chg` [#23](https://github.com/bryanp/llhttp/pull/23) Update ffi to llhttp 6.0.5 ([bryanp](https://github.com/bryanp))
13
+
14
+ ## [v0.3.1](https://github.com/bryanp/llhttp/releases/tag/2021-06-25)
2
15
 
3
16
  *released on 2021-06-25*
4
17
 
5
- * `fix` [#22](https://github.com/metabahn/llhttp/pull/22) Fix call to ffi free ([bryanp](https://github.com/bryanp))
18
+ * `fix` [#22](https://github.com/bryanp/llhttp/pull/22) Fix call to ffi free ([bryanp](https://github.com/bryanp))
6
19
 
7
- ## [v0.3.0](https://github.com/metabahn/llhttp/releases/tag/2021-05-13)
20
+ ## [v0.3.0](https://github.com/bryanp/llhttp/releases/tag/2021-05-13)
8
21
 
9
22
  *released on 2021-05-13*
10
23
 
11
- * `chg` [#19](https://github.com/metabahn/llhttp/pull/19) Add back support for Ruby 2.5 in ffi ([bryanp](https://github.com/bryanp))
24
+ * `chg` [#19](https://github.com/bryanp/llhttp/pull/19) Add back support for Ruby 2.5 in ffi ([bryanp](https://github.com/bryanp))
12
25
 
13
- ## [v0.2.0](https://github.com/metabahn/llhttp/releases/tag/2021-05-06)
26
+ ## [v0.2.0](https://github.com/bryanp/llhttp/releases/tag/2021-05-06)
14
27
 
15
28
  *released on 2021-05-06*
16
29
 
17
- * `chg` [#17](https://github.com/metabahn/llhttp/pull/17) Update ffi to llhttp 6.0.1 ([bryanp](https://github.com/bryanp))
18
- * `chg` [#18](https://github.com/metabahn/llhttp/pull/18) Drop support for Ruby 2.5 ([bryanp](https://github.com/bryanp))
30
+ * `chg` [#17](https://github.com/bryanp/llhttp/pull/17) Update ffi to llhttp 6.0.1 ([bryanp](https://github.com/bryanp))
31
+ * `chg` [#18](https://github.com/bryanp/llhttp/pull/18) Drop support for Ruby 2.5 ([bryanp](https://github.com/bryanp))
19
32
 
20
- ## [v0.1.0](https://github.com/metabahn/llhttp/releases/tag/2021-04-06)
33
+ ## [v0.1.0](https://github.com/bryanp/llhttp/releases/tag/2021-04-06)
21
34
 
22
35
  *released on 2021-04-06*
23
36
 
24
- * `chg` [#14](https://github.com/metabahn/llhttp/pull/14) Update ffi to llhttp 5.1.0 ([bryanp](https://github.com/bryanp))
37
+ * `chg` [#14](https://github.com/bryanp/llhttp/pull/14) Update ffi to llhttp 5.1.0 ([bryanp](https://github.com/bryanp))
25
38
 
26
- ## [v0.0.1](https://github.com/metabahn/llhttp/releases/tag/2021-03-04)
39
+ ## [v0.0.1](https://github.com/bryanp/llhttp/releases/tag/2021-03-04)
27
40
 
28
41
  *released on 2021-03-04*
29
42
 
30
- * `fix` [#13](https://github.com/metabahn/llhttp/pull/13) Resolve an issue with the parser finalizer ([bryanp](https://github.com/bryanp))
43
+ * `fix` [#13](https://github.com/bryanp/llhttp/pull/13) Resolve an issue with the parser finalizer ([bryanp](https://github.com/bryanp))
31
44
 
32
- ## [v0.0.0](https://github.com/metabahn/llhttp/releases/tag/2021-03-03)
45
+ ## [v0.0.0](https://github.com/bryanp/llhttp/releases/tag/2021-03-03)
33
46
 
34
47
  *released on 2021-03-03*
35
48
 
36
- * `add` [#12](https://github.com/metabahn/llhttp/pull/12) Introduce llhttp-ffi for better compatibility ([bryanp](https://github.com/bryanp))
37
-
38
-
49
+ * `add` [#12](https://github.com/bryanp/llhttp/pull/12) Introduce llhttp-ffi for better compatibility ([bryanp](https://github.com/bryanp))
data/README.md CHANGED
@@ -33,5 +33,5 @@ parser << "GET / HTTP/1.1\r\n\r\n"
33
33
 
34
34
  # Reset the parser for the next request:
35
35
  #
36
- parser.finish
36
+ parser.reset
37
37
  ```
Binary file
Binary file
Binary file
data/ext/llhttp/api.c CHANGED
@@ -1,26 +1,3 @@
1
- // This software is licensed under the MIT License.
2
-
3
- // Copyright Fedor Indutny, 2018.
4
-
5
- // Permission is hereby granted, free of charge, to any person obtaining a
6
- // copy of this software and associated documentation files (the
7
- // "Software"), to deal in the Software without restriction, including
8
- // without limitation the rights to use, copy, modify, merge, publish,
9
- // distribute, sublicense, and/or sell copies of the Software, and to permit
10
- // persons to whom the Software is furnished to do so, subject to the
11
- // following conditions:
12
-
13
- // The above copyright notice and this permission notice shall be included
14
- // in all copies or substantial portions of the Software.
15
-
16
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
19
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
21
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
22
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
23
-
24
1
  #include <stdlib.h>
25
2
  #include <stdio.h>
26
3
  #include <string.h>
@@ -69,21 +46,40 @@ extern int wasm_on_url(llhttp_t* p, const char* at, size_t length);
69
46
  extern int wasm_on_status(llhttp_t* p, const char* at, size_t length);
70
47
  extern int wasm_on_header_field(llhttp_t* p, const char* at, size_t length);
71
48
  extern int wasm_on_header_value(llhttp_t* p, const char* at, size_t length);
72
- extern int wasm_on_headers_complete(llhttp_t * p);
49
+ extern int wasm_on_headers_complete(llhttp_t * p, int status_code,
50
+ uint8_t upgrade, int should_keep_alive);
73
51
  extern int wasm_on_body(llhttp_t* p, const char* at, size_t length);
74
52
  extern int wasm_on_message_complete(llhttp_t * p);
75
53
 
54
+ static int wasm_on_headers_complete_wrap(llhttp_t* p) {
55
+ return wasm_on_headers_complete(p, p->status_code, p->upgrade,
56
+ llhttp_should_keep_alive(p));
57
+ }
58
+
76
59
  const llhttp_settings_t wasm_settings = {
77
60
  wasm_on_message_begin,
78
61
  wasm_on_url,
79
62
  wasm_on_status,
63
+ NULL,
64
+ NULL,
80
65
  wasm_on_header_field,
81
66
  wasm_on_header_value,
82
- wasm_on_headers_complete,
67
+ NULL,
68
+ NULL,
69
+ wasm_on_headers_complete_wrap,
83
70
  wasm_on_body,
84
71
  wasm_on_message_complete,
85
72
  NULL,
86
73
  NULL,
74
+ NULL,
75
+ NULL,
76
+ NULL,
77
+ NULL,
78
+ NULL,
79
+ NULL,
80
+ NULL,
81
+ NULL,
82
+ NULL,
87
83
  };
88
84
 
89
85
 
@@ -97,6 +93,8 @@ void llhttp_free(llhttp_t* parser) {
97
93
  free(parser);
98
94
  }
99
95
 
96
+ #endif // defined(__wasm__)
97
+
100
98
  /* Some getters required to get stuff from the parser */
101
99
 
102
100
  uint8_t llhttp_get_type(llhttp_t* parser) {
@@ -123,8 +121,6 @@ uint8_t llhttp_get_upgrade(llhttp_t* parser) {
123
121
  return parser->upgrade;
124
122
  }
125
123
 
126
- #endif // defined(__wasm__)
127
-
128
124
 
129
125
  void llhttp_reset(llhttp_t* parser) {
130
126
  llhttp_type_t type = parser->type;
@@ -243,6 +239,15 @@ const char* llhttp_method_name(llhttp_method_t method) {
243
239
  #undef HTTP_METHOD_GEN
244
240
  }
245
241
 
242
+ const char* llhttp_status_name(llhttp_status_t status) {
243
+ #define HTTP_STATUS_GEN(NUM, NAME, STRING) case HTTP_STATUS_##NAME: return #STRING;
244
+ switch (status) {
245
+ HTTP_STATUS_MAP(HTTP_STATUS_GEN)
246
+ default: abort();
247
+ }
248
+ #undef HTTP_STATUS_GEN
249
+ }
250
+
246
251
 
247
252
  void llhttp_set_lenient_headers(llhttp_t* parser, int enabled) {
248
253
  if (enabled) {
@@ -270,6 +275,14 @@ void llhttp_set_lenient_keep_alive(llhttp_t* parser, int enabled) {
270
275
  }
271
276
  }
272
277
 
278
+ void llhttp_set_lenient_transfer_encoding(llhttp_t* parser, int enabled) {
279
+ if (enabled) {
280
+ parser->lenient_flags |= LENIENT_TRANSFER_ENCODING;
281
+ } else {
282
+ parser->lenient_flags &= ~LENIENT_TRANSFER_ENCODING;
283
+ }
284
+ }
285
+
273
286
  /* Callbacks */
274
287
 
275
288
 
@@ -308,6 +321,34 @@ int llhttp__on_status_complete(llhttp_t* s, const char* p, const char* endp) {
308
321
  }
309
322
 
310
323
 
324
+ int llhttp__on_method(llhttp_t* s, const char* p, const char* endp) {
325
+ int err;
326
+ SPAN_CALLBACK_MAYBE(s, on_method, p, endp - p);
327
+ return err;
328
+ }
329
+
330
+
331
+ int llhttp__on_method_complete(llhttp_t* s, const char* p, const char* endp) {
332
+ int err;
333
+ CALLBACK_MAYBE(s, on_method_complete);
334
+ return err;
335
+ }
336
+
337
+
338
+ int llhttp__on_version(llhttp_t* s, const char* p, const char* endp) {
339
+ int err;
340
+ SPAN_CALLBACK_MAYBE(s, on_version, p, endp - p);
341
+ return err;
342
+ }
343
+
344
+
345
+ int llhttp__on_version_complete(llhttp_t* s, const char* p, const char* endp) {
346
+ int err;
347
+ CALLBACK_MAYBE(s, on_version_complete);
348
+ return err;
349
+ }
350
+
351
+
311
352
  int llhttp__on_header_field(llhttp_t* s, const char* p, const char* endp) {
312
353
  int err;
313
354
  SPAN_CALLBACK_MAYBE(s, on_header_field, p, endp - p);
@@ -364,6 +405,34 @@ int llhttp__on_chunk_header(llhttp_t* s, const char* p, const char* endp) {
364
405
  }
365
406
 
366
407
 
408
+ int llhttp__on_chunk_extension_name(llhttp_t* s, const char* p, const char* endp) {
409
+ int err;
410
+ SPAN_CALLBACK_MAYBE(s, on_chunk_extension_name, p, endp - p);
411
+ return err;
412
+ }
413
+
414
+
415
+ int llhttp__on_chunk_extension_name_complete(llhttp_t* s, const char* p, const char* endp) {
416
+ int err;
417
+ CALLBACK_MAYBE(s, on_chunk_extension_name_complete);
418
+ return err;
419
+ }
420
+
421
+
422
+ int llhttp__on_chunk_extension_value(llhttp_t* s, const char* p, const char* endp) {
423
+ int err;
424
+ SPAN_CALLBACK_MAYBE(s, on_chunk_extension_value, p, endp - p);
425
+ return err;
426
+ }
427
+
428
+
429
+ int llhttp__on_chunk_extension_value_complete(llhttp_t* s, const char* p, const char* endp) {
430
+ int err;
431
+ CALLBACK_MAYBE(s, on_chunk_extension_value_complete);
432
+ return err;
433
+ }
434
+
435
+
367
436
  int llhttp__on_chunk_complete(llhttp_t* s, const char* p, const char* endp) {
368
437
  int err;
369
438
  CALLBACK_MAYBE(s, on_chunk_complete);
@@ -371,6 +440,13 @@ int llhttp__on_chunk_complete(llhttp_t* s, const char* p, const char* endp) {
371
440
  }
372
441
 
373
442
 
443
+ int llhttp__on_reset(llhttp_t* s, const char* p, const char* endp) {
444
+ int err;
445
+ CALLBACK_MAYBE(s, on_reset);
446
+ return err;
447
+ }
448
+
449
+
374
450
  /* Private */
375
451
 
376
452
 
data/ext/llhttp/http.c CHANGED
@@ -1,26 +1,3 @@
1
- // This software is licensed under the MIT License.
2
-
3
- // Copyright Fedor Indutny, 2018.
4
-
5
- // Permission is hereby granted, free of charge, to any person obtaining a
6
- // copy of this software and associated documentation files (the
7
- // "Software"), to deal in the Software without restriction, including
8
- // without limitation the rights to use, copy, modify, merge, publish,
9
- // distribute, sublicense, and/or sell copies of the Software, and to permit
10
- // persons to whom the Software is furnished to do so, subject to the
11
- // following conditions:
12
-
13
- // The above copyright notice and this permission notice shall be included
14
- // in all copies or substantial portions of the Software.
15
-
16
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
19
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
21
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
22
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
23
-
24
1
  #include <stdio.h>
25
2
  #ifndef LLHTTP__TEST
26
3
  # include "llhttp.h"
@@ -75,7 +52,8 @@ int llhttp__after_headers_complete(llhttp_t* parser, const char* p,
75
52
  return 2;
76
53
  } else if (parser->flags & F_TRANSFER_ENCODING) {
77
54
  if (parser->type == HTTP_REQUEST &&
78
- (parser->lenient_flags & LENIENT_CHUNKED_LENGTH) == 0) {
55
+ (parser->lenient_flags & LENIENT_CHUNKED_LENGTH) == 0 &&
56
+ (parser->lenient_flags & LENIENT_TRANSFER_ENCODING) == 0) {
79
57
  /* RFC 7230 3.3.3 */
80
58
 
81
59
  /* If a Transfer-Encoding header field