llhttp 0.4.0 → 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: 3ee045e3bd145819a128933ba6e2bdc42493055e523afb6f96eb1b19e7efe5f9
4
- data.tar.gz: 2143e6db1b7ff74e412b7839e1584380040d61f680596ed427b759638c1f837c
3
+ metadata.gz: 1e15a0ef9a22a029ad2b29b6a173fa5eb9bc7cee0a7ec819bf0cb9be068e106b
4
+ data.tar.gz: 50b10fdfeaa7a752f1ce50bcb3f4ebb4e7b0eea75af978acd2c5fa467eed345a
5
5
  SHA512:
6
- metadata.gz: 43be9c7c4858ae2e5862f0ae20f42a53f4bf2d526fb95bb879c108422f8cc5da1865e6a05037fc47eae4d4c0c7522046bbfc192e0204ee96478278cec623e3f7
7
- data.tar.gz: '09049aaa065e7467a4a570b231273412eb3d66b9a3be342422eaf779e32b19a87e950a45e1b4720f50f179ce0c17f62295c67f86e10d360d5cc21a9d653f2a19'
6
+ metadata.gz: 38088c14fd79320cbd278dc305259636e1bed27358061eb94d2f99a859c0b0ce2d72976832b5026c861f98c57daf2782c8a00d1faf91d9898c9674e847a76455
7
+ data.tar.gz: 4e1be65888e3a2f9593c4208ae67c2cf9792d4779689755df882851817637e7b111a8e08caee4eb95509f38ced4119a48898744351f376ce941eb7f617ab03ef
data/CHANGELOG.md CHANGED
@@ -1,11 +1,17 @@
1
- ## v0.4.0
1
+ ## [v0.5.0](https://github.com/metabahn/llhttp/releases/tag/2021-09-21)
2
+
3
+ *released on 2021-09-21*
4
+
5
+ * `chg` [#26](https://github.com/metabahn/llhttp/pull/26) Refactor parser data to include all values ([bryanp](https://github.com/bryanp))
6
+
7
+ ## [v0.4.0](https://github.com/metabahn/llhttp/releases/tag/2021-09-09)
2
8
 
3
9
  *released on 2021-09-09*
4
10
 
5
11
  * `add` [#25](https://github.com/metabahn/llhttp/pull/25) Add support for resetting the parser ([bryanp](https://github.com/bryanp))
6
12
  * `chg` [#24](https://github.com/metabahn/llhttp/pull/24) Update mri to llhttp 6.0.5 ([bryanp](https://github.com/bryanp))
7
13
 
8
- ## v0.3.0
14
+ ## [v0.3.0](https://github.com/metabahn/llhttp/releases/tag/2021-05-06)
9
15
 
10
16
  *released on 2021-05-06*
11
17
 
@@ -10,34 +10,43 @@
10
10
 
11
11
  static VALUE mLLHttp, cParser, eError;
12
12
 
13
- static ID rb_llhttp_callback_on_message_begin;
14
- static ID rb_llhttp_callback_on_url;
15
- static ID rb_llhttp_callback_on_status;
16
- static ID rb_llhttp_callback_on_header_field;
17
- static ID rb_llhttp_callback_on_header_value;
18
- static ID rb_llhttp_callback_on_headers_complete;
19
- static ID rb_llhttp_callback_on_body;
20
- static ID rb_llhttp_callback_on_message_complete;
21
- static ID rb_llhttp_callback_on_chunk_header;
22
- static ID rb_llhttp_callback_on_chunk_complete;
23
- static ID rb_llhttp_callback_on_url_complete;
24
- static ID rb_llhttp_callback_on_status_complete;
25
- static ID rb_llhttp_callback_on_header_field_complete;
26
- static ID rb_llhttp_callback_on_header_value_complete;
13
+ typedef struct {
14
+ VALUE delegate;
15
+ ID on_message_begin;
16
+ ID on_url;
17
+ ID on_status;
18
+ ID on_header_field;
19
+ ID on_header_value;
20
+ ID on_headers_complete;
21
+ ID on_body;
22
+ ID on_message_complete;
23
+ ID on_chunk_header;
24
+ ID on_chunk_complete;
25
+ ID on_url_complete;
26
+ ID on_status_complete;
27
+ ID on_header_field_complete;
28
+ ID on_header_value_complete;
29
+ } rb_llhttp_parser_data;
27
30
 
28
31
  static void rb_llhttp_free(llhttp_t *parser) {
29
- if (parser) {
32
+ rb_llhttp_parser_data *parserData = (rb_llhttp_parser_data*) parser->data;
33
+
34
+ // If `parserData` is not `0`, it (and settings) were initialized.
35
+ //
36
+ if (parserData != 0) {
37
+ free(parserData);
30
38
  free(parser->settings);
31
- free(parser);
32
39
  }
40
+
41
+ free(parser);
33
42
  }
34
43
 
35
44
  VALUE rb_llhttp_allocate(VALUE klass) {
36
45
  llhttp_t *parser = (llhttp_t *)malloc(sizeof(llhttp_t));
37
- llhttp_settings_t *settings = (llhttp_settings_t *)malloc(sizeof(llhttp_settings_t));
38
46
 
39
- llhttp_settings_init(settings);
40
- llhttp_init(parser, HTTP_BOTH, settings);
47
+ // Set data to false so we know when the parser has been initialized.
48
+ //
49
+ parser->data = 0;
41
50
 
42
51
  return Data_Wrap_Struct(klass, 0, rb_llhttp_free, parser);
43
52
  }
@@ -51,77 +60,105 @@ void rb_llhttp_data_callback_call(VALUE delegate, ID method, char *data, size_t
51
60
  }
52
61
 
53
62
  int rb_llhttp_on_message_begin(llhttp_t *parser) {
54
- return NUM2INT(rb_llhttp_callback_call((VALUE)parser->data, rb_llhttp_callback_on_message_begin));
63
+ rb_llhttp_parser_data *parserData = (rb_llhttp_parser_data*) parser->data;
64
+
65
+ return NUM2INT(rb_llhttp_callback_call(parserData->delegate, parserData->on_message_begin));
55
66
  }
56
67
 
57
68
  int rb_llhttp_on_headers_complete(llhttp_t *parser) {
58
- return NUM2INT(rb_llhttp_callback_call((VALUE)parser->data, rb_llhttp_callback_on_headers_complete));
69
+ rb_llhttp_parser_data *parserData = (rb_llhttp_parser_data*) parser->data;
70
+
71
+ return NUM2INT(rb_llhttp_callback_call(parserData->delegate, parserData->on_headers_complete));
59
72
  }
60
73
 
61
74
  int rb_llhttp_on_message_complete(llhttp_t *parser) {
62
- return NUM2INT(rb_llhttp_callback_call((VALUE)parser->data, rb_llhttp_callback_on_message_complete));
75
+ rb_llhttp_parser_data *parserData = (rb_llhttp_parser_data*) parser->data;
76
+
77
+ return NUM2INT(rb_llhttp_callback_call(parserData->delegate, parserData->on_message_complete));
63
78
  }
64
79
 
65
80
  int rb_llhttp_on_chunk_header(llhttp_t *parser) {
66
- return NUM2INT(rb_llhttp_callback_call((VALUE)parser->data, rb_llhttp_callback_on_chunk_header));
81
+ rb_llhttp_parser_data *parserData = (rb_llhttp_parser_data*) parser->data;
82
+
83
+ return NUM2INT(rb_llhttp_callback_call(parserData->delegate, parserData->on_chunk_header));
67
84
  }
68
85
 
69
86
  int rb_llhttp_on_url(llhttp_t *parser, char *data, size_t length) {
70
- rb_llhttp_data_callback_call((VALUE)parser->data, rb_llhttp_callback_on_url, data, length);
87
+ rb_llhttp_parser_data *parserData = (rb_llhttp_parser_data*) parser->data;
88
+
89
+ rb_llhttp_data_callback_call(parserData->delegate, parserData->on_url, data, length);
71
90
 
72
91
  return 0;
73
92
  }
74
93
 
75
94
  int rb_llhttp_on_status(llhttp_t *parser, char *data, size_t length) {
76
- rb_llhttp_data_callback_call((VALUE)parser->data, rb_llhttp_callback_on_status, data, length);
95
+ rb_llhttp_parser_data *parserData = (rb_llhttp_parser_data*) parser->data;
96
+
97
+ rb_llhttp_data_callback_call(parserData->delegate, parserData->on_status, data, length);
77
98
 
78
99
  return 0;
79
100
  }
80
101
 
81
102
  int rb_llhttp_on_header_field(llhttp_t *parser, char *data, size_t length) {
82
- rb_llhttp_data_callback_call((VALUE)parser->data, rb_llhttp_callback_on_header_field, data, length);
103
+ rb_llhttp_parser_data *parserData = (rb_llhttp_parser_data*) parser->data;
104
+
105
+ rb_llhttp_data_callback_call(parserData->delegate, parserData->on_header_field, data, length);
83
106
 
84
107
  return 0;
85
108
  }
86
109
 
87
110
  int rb_llhttp_on_header_value(llhttp_t *parser, char *data, size_t length) {
88
- rb_llhttp_data_callback_call((VALUE)parser->data, rb_llhttp_callback_on_header_value, data, length);
111
+ rb_llhttp_parser_data *parserData = (rb_llhttp_parser_data*) parser->data;
112
+
113
+ rb_llhttp_data_callback_call(parserData->delegate, parserData->on_header_value, data, length);
89
114
 
90
115
  return 0;
91
116
  }
92
117
 
93
118
  int rb_llhttp_on_body(llhttp_t *parser, char *data, size_t length) {
94
- rb_llhttp_data_callback_call((VALUE)parser->data, rb_llhttp_callback_on_body, data, length);
119
+ rb_llhttp_parser_data *parserData = (rb_llhttp_parser_data*) parser->data;
120
+
121
+ rb_llhttp_data_callback_call(parserData->delegate, parserData->on_body, data, length);
95
122
 
96
123
  return 0;
97
124
  }
98
125
 
99
126
  int rb_llhttp_on_chunk_complete(llhttp_t *parser) {
100
- rb_llhttp_callback_call((VALUE)parser->data, rb_llhttp_callback_on_chunk_complete);
127
+ rb_llhttp_parser_data *parserData = (rb_llhttp_parser_data*) parser->data;
128
+
129
+ rb_llhttp_callback_call(parserData->delegate, parserData->on_chunk_complete);
101
130
 
102
131
  return 0;
103
132
  }
104
133
 
105
134
  int rb_llhttp_on_url_complete(llhttp_t *parser) {
106
- rb_llhttp_callback_call((VALUE)parser->data, rb_llhttp_callback_on_url_complete);
135
+ rb_llhttp_parser_data *parserData = (rb_llhttp_parser_data*) parser->data;
136
+
137
+ rb_llhttp_callback_call(parserData->delegate, parserData->on_url_complete);
107
138
 
108
139
  return 0;
109
140
  }
110
141
 
111
142
  int rb_llhttp_on_status_complete(llhttp_t *parser) {
112
- rb_llhttp_callback_call((VALUE)parser->data, rb_llhttp_callback_on_status_complete);
143
+ rb_llhttp_parser_data *parserData = (rb_llhttp_parser_data*) parser->data;
144
+
145
+ rb_llhttp_callback_call(parserData->delegate, parserData->on_status_complete);
113
146
 
114
147
  return 0;
115
148
  }
116
149
 
117
150
  int rb_llhttp_on_header_field_complete(llhttp_t *parser) {
118
- rb_llhttp_callback_call((VALUE)parser->data, rb_llhttp_callback_on_header_field_complete);
151
+ rb_llhttp_parser_data *parserData = (rb_llhttp_parser_data*) parser->data;
152
+
153
+ rb_llhttp_callback_call(parserData->delegate, parserData->on_header_field_complete);
119
154
 
120
155
  return 0;
121
156
  }
122
157
 
123
158
  int rb_llhttp_on_header_value_complete(llhttp_t *parser) {
124
- rb_llhttp_callback_call((VALUE)parser->data, rb_llhttp_callback_on_header_value_complete);
159
+ rb_llhttp_parser_data *parserData = (rb_llhttp_parser_data*) parser->data;
160
+
161
+ rb_llhttp_callback_call(parserData->delegate, parserData->on_header_value_complete);
125
162
 
126
163
  return 0;
127
164
  }
@@ -159,8 +196,6 @@ VALUE rb_llhttp_reset(VALUE self) {
159
196
 
160
197
  Data_Get_Struct(self, llhttp_t, parser);
161
198
 
162
- llhttp_settings_t *settings = parser->settings;
163
-
164
199
  llhttp_reset(parser);
165
200
 
166
201
  return Qtrue;
@@ -221,84 +256,86 @@ static VALUE rb_llhttp_init(VALUE self, VALUE type) {
221
256
 
222
257
  Data_Get_Struct(self, llhttp_t, parser);
223
258
 
224
- llhttp_settings_t *settings = parser->settings;
225
-
226
- VALUE delegate = rb_iv_get(self, "@delegate");
227
-
228
- rb_llhttp_callback_on_message_begin = rb_intern("internal_on_message_begin");
229
- rb_llhttp_callback_on_headers_complete = rb_intern("internal_on_headers_complete");
230
- rb_llhttp_callback_on_message_complete = rb_intern("internal_on_message_complete");
231
- rb_llhttp_callback_on_chunk_header = rb_intern("internal_on_chunk_header");
232
- rb_llhttp_callback_on_url = rb_intern("on_url");
233
- rb_llhttp_callback_on_status = rb_intern("on_status");
234
- rb_llhttp_callback_on_header_field = rb_intern("on_header_field");
235
- rb_llhttp_callback_on_header_value = rb_intern("on_header_value");
236
- rb_llhttp_callback_on_body = rb_intern("on_body");
237
- rb_llhttp_callback_on_chunk_complete = rb_intern("on_chunk_complete");
238
- rb_llhttp_callback_on_url_complete = rb_intern("on_url_complete");
239
- rb_llhttp_callback_on_status_complete = rb_intern("on_status_complete");
240
- rb_llhttp_callback_on_header_field_complete = rb_intern("on_header_field_complete");
241
- rb_llhttp_callback_on_header_value_complete = rb_intern("on_header_value_complete");
242
-
243
- if (rb_respond_to(delegate, rb_intern("on_message_begin"))) {
259
+ llhttp_settings_t *settings = (llhttp_settings_t *)malloc(sizeof(llhttp_settings_t));
260
+ llhttp_settings_init(settings);
261
+
262
+ rb_llhttp_parser_data *parserData = malloc(sizeof(rb_llhttp_parser_data));
263
+ parserData->delegate = rb_iv_get(self, "@delegate");
264
+
265
+ parserData->on_message_begin = rb_intern("internal_on_message_begin");
266
+ parserData->on_headers_complete = rb_intern("internal_on_headers_complete");
267
+ parserData->on_message_complete = rb_intern("internal_on_message_complete");
268
+ parserData->on_chunk_header = rb_intern("internal_on_chunk_header");
269
+ parserData->on_url = rb_intern("on_url");
270
+ parserData->on_status = rb_intern("on_status");
271
+ parserData->on_header_field = rb_intern("on_header_field");
272
+ parserData->on_header_value = rb_intern("on_header_value");
273
+ parserData->on_body = rb_intern("on_body");
274
+ parserData->on_chunk_complete = rb_intern("on_chunk_complete");
275
+ parserData->on_url_complete = rb_intern("on_url_complete");
276
+ parserData->on_status_complete = rb_intern("on_status_complete");
277
+ parserData->on_header_field_complete = rb_intern("on_header_field_complete");
278
+ parserData->on_header_value_complete = rb_intern("on_header_value_complete");
279
+
280
+ if (rb_respond_to(parserData->delegate, rb_intern("on_message_begin"))) {
244
281
  settings->on_message_begin = (llhttp_cb)rb_llhttp_on_message_begin;
245
282
  }
246
283
 
247
- if (rb_respond_to(delegate, rb_intern("on_headers_complete"))) {
284
+ if (rb_respond_to(parserData->delegate, rb_intern("on_headers_complete"))) {
248
285
  settings->on_headers_complete = (llhttp_cb)rb_llhttp_on_headers_complete;
249
286
  }
250
287
 
251
- if (rb_respond_to(delegate, rb_intern("on_message_complete"))) {
288
+ if (rb_respond_to(parserData->delegate, rb_intern("on_message_complete"))) {
252
289
  settings->on_message_complete = (llhttp_cb)rb_llhttp_on_message_complete;
253
290
  }
254
291
 
255
- if (rb_respond_to(delegate, rb_intern("on_chunk_header"))) {
292
+ if (rb_respond_to(parserData->delegate, rb_intern("on_chunk_header"))) {
256
293
  settings->on_chunk_header = (llhttp_cb)rb_llhttp_on_chunk_header;
257
294
  }
258
295
 
259
- if (rb_respond_to(delegate, rb_llhttp_callback_on_url)) {
296
+ if (rb_respond_to(parserData->delegate, parserData->on_url)) {
260
297
  settings->on_url = (llhttp_data_cb)rb_llhttp_on_url;
261
298
  }
262
299
 
263
- if (rb_respond_to(delegate, rb_llhttp_callback_on_status)) {
300
+ if (rb_respond_to(parserData->delegate, parserData->on_status)) {
264
301
  settings->on_status = (llhttp_data_cb)rb_llhttp_on_status;
265
302
  }
266
303
 
267
- if (rb_respond_to(delegate, rb_llhttp_callback_on_header_field)) {
304
+ if (rb_respond_to(parserData->delegate, parserData->on_header_field)) {
268
305
  settings->on_header_field = (llhttp_data_cb)rb_llhttp_on_header_field;
269
306
  }
270
307
 
271
- if (rb_respond_to(delegate, rb_llhttp_callback_on_header_value)) {
308
+ if (rb_respond_to(parserData->delegate, parserData->on_header_value)) {
272
309
  settings->on_header_value = (llhttp_data_cb)rb_llhttp_on_header_value;
273
310
  }
274
311
 
275
- if (rb_respond_to(delegate, rb_llhttp_callback_on_body)) {
312
+ if (rb_respond_to(parserData->delegate, parserData->on_body)) {
276
313
  settings->on_body = (llhttp_data_cb)rb_llhttp_on_body;
277
314
  }
278
315
 
279
- if (rb_respond_to(delegate, rb_llhttp_callback_on_chunk_complete)) {
316
+ if (rb_respond_to(parserData->delegate, parserData->on_chunk_complete)) {
280
317
  settings->on_chunk_complete = (llhttp_cb)rb_llhttp_on_chunk_complete;
281
318
  }
282
319
 
283
- if (rb_respond_to(delegate, rb_llhttp_callback_on_url_complete)) {
320
+ if (rb_respond_to(parserData->delegate, parserData->on_url_complete)) {
284
321
  settings->on_url_complete = (llhttp_cb)rb_llhttp_on_url_complete;
285
322
  }
286
323
 
287
- if (rb_respond_to(delegate, rb_llhttp_callback_on_status_complete)) {
324
+ if (rb_respond_to(parserData->delegate, parserData->on_status_complete)) {
288
325
  settings->on_status_complete = (llhttp_cb)rb_llhttp_on_status_complete;
289
326
  }
290
327
 
291
- if (rb_respond_to(delegate, rb_llhttp_callback_on_header_field_complete)) {
328
+ if (rb_respond_to(parserData->delegate, parserData->on_header_field_complete)) {
292
329
  settings->on_header_field_complete = (llhttp_cb)rb_llhttp_on_header_field_complete;
293
330
  }
294
331
 
295
- if (rb_respond_to(delegate, rb_llhttp_callback_on_header_value_complete)) {
332
+ if (rb_respond_to(parserData->delegate, parserData->on_header_value_complete)) {
296
333
  settings->on_header_value_complete = (llhttp_cb)rb_llhttp_on_header_value_complete;
297
334
  }
298
335
 
299
336
  llhttp_init(parser, FIX2INT(type), settings);
300
337
 
301
- parser->data = (void*)delegate;
338
+ parser->data = (void*)parserData;
302
339
 
303
340
  return Qtrue;
304
341
  }
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LLHttp
4
- VERSION = "0.4.0"
4
+ VERSION = "0.5.0"
5
5
 
6
6
  # [public] LLHttp's current version.
7
7
  #
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: llhttp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bryan Powell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-09 00:00:00.000000000 Z
11
+ date: 2021-09-22 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Ruby bindings for llhttp.
14
14
  email: bryan@metabahn.com
@@ -50,7 +50,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
50
50
  - !ruby/object:Gem::Version
51
51
  version: '0'
52
52
  requirements: []
53
- rubygems_version: 3.2.15
53
+ rubygems_version: 3.2.22
54
54
  signing_key:
55
55
  specification_version: 4
56
56
  summary: Ruby bindings for llhttp.