h1p 0.6.1 → 1.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 +4 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +5 -5
- data/ext/h1p/h1p.c +19 -3
- data/h1p.gemspec +2 -2
- data/lib/h1p/version.rb +1 -1
- data/test/test_h1p.rb +8 -0
- metadata +6 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2d2493b6fc11d7deb1231f9a2d0bf1c6dc59b00a01065da7086e8c65326f74df
|
|
4
|
+
data.tar.gz: e30bf2c5a3213a4744a66a412e2db34a2b26b05baa8073409a18c7e0bd314de3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2adc85f461d3a41e7e67f9c199be486b85fd46407e60455329ac065a5779c60d62328a049091bb9d4b7d0be2f1610db38a8744c35f7071b06991ec837235a981
|
|
7
|
+
data.tar.gz: 926acbd38590f74666e8d774b6f54d3b610cbf0570495727049b2c2ba628a80888d30e2e0bd83ac26b3897c9a0875be42ce336a439a9e07a2dfb8160aebc8441
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
h1p (0
|
|
4
|
+
h1p (1.0)
|
|
5
5
|
|
|
6
6
|
GEM
|
|
7
7
|
remote: https://rubygems.org/
|
|
8
8
|
specs:
|
|
9
|
-
minitest (5.
|
|
9
|
+
minitest (5.18.0)
|
|
10
10
|
rake (13.0.6)
|
|
11
|
-
rake-compiler (1.2.
|
|
11
|
+
rake-compiler (1.2.3)
|
|
12
12
|
rake
|
|
13
13
|
|
|
14
14
|
PLATFORMS
|
|
@@ -16,9 +16,9 @@ PLATFORMS
|
|
|
16
16
|
|
|
17
17
|
DEPENDENCIES
|
|
18
18
|
h1p!
|
|
19
|
-
minitest (~> 5.
|
|
19
|
+
minitest (~> 5.18.0)
|
|
20
20
|
rake (~> 13.0.6)
|
|
21
|
-
rake-compiler (= 1.2.
|
|
21
|
+
rake-compiler (= 1.2.3)
|
|
22
22
|
|
|
23
23
|
BUNDLED WITH
|
|
24
24
|
2.2.26
|
data/ext/h1p/h1p.c
CHANGED
|
@@ -22,6 +22,7 @@ ID ID_call;
|
|
|
22
22
|
ID ID_downcase;
|
|
23
23
|
ID ID_eof_p;
|
|
24
24
|
ID ID_eq;
|
|
25
|
+
ID ID_join;
|
|
25
26
|
ID ID_read_method;
|
|
26
27
|
ID ID_read;
|
|
27
28
|
ID ID_readpartial;
|
|
@@ -56,6 +57,7 @@ VALUE STR_transfer_encoding_capitalized;
|
|
|
56
57
|
|
|
57
58
|
VALUE STR_CRLF;
|
|
58
59
|
VALUE STR_EMPTY_CHUNK;
|
|
60
|
+
VALUE STR_COMMA_SPACE;
|
|
59
61
|
|
|
60
62
|
VALUE SYM_backend_read;
|
|
61
63
|
VALUE SYM_backend_recv;
|
|
@@ -1176,12 +1178,24 @@ void send_response_write_status_line(send_response_ctx *ctx, VALUE protocol, VAL
|
|
|
1176
1178
|
ctx->buffer_len += partlen + 2;
|
|
1177
1179
|
}
|
|
1178
1180
|
|
|
1181
|
+
inline static VALUE format_comma_separated_header_values(VALUE array) {
|
|
1182
|
+
return rb_funcall(array, ID_join, 1, STR_COMMA_SPACE);
|
|
1183
|
+
}
|
|
1184
|
+
|
|
1179
1185
|
int send_response_write_header(VALUE key, VALUE val, VALUE arg) {
|
|
1180
1186
|
if (TYPE(key) != T_STRING) key = rb_funcall(key, ID_to_s, 0);
|
|
1181
1187
|
char *keyptr = RSTRING_PTR(key);
|
|
1182
1188
|
if (RSTRING_LEN(key) < 1 || keyptr[0] == ':') return 0;
|
|
1183
1189
|
|
|
1184
|
-
|
|
1190
|
+
switch (TYPE(val)) {
|
|
1191
|
+
case T_STRING:
|
|
1192
|
+
break;
|
|
1193
|
+
case T_ARRAY:
|
|
1194
|
+
val = format_comma_separated_header_values(val);
|
|
1195
|
+
break;
|
|
1196
|
+
default:
|
|
1197
|
+
val = rb_funcall(val, ID_to_s, 0);
|
|
1198
|
+
}
|
|
1185
1199
|
unsigned int keylen = RSTRING_LEN(key);
|
|
1186
1200
|
char *valptr = RSTRING_PTR(val);
|
|
1187
1201
|
unsigned int vallen = RSTRING_LEN(val);
|
|
@@ -1377,6 +1391,7 @@ void Init_H1P(void) {
|
|
|
1377
1391
|
ID_downcase = rb_intern("downcase");
|
|
1378
1392
|
ID_eof_p = rb_intern("eof?");
|
|
1379
1393
|
ID_eq = rb_intern("==");
|
|
1394
|
+
ID_join = rb_intern("join");
|
|
1380
1395
|
ID_read_method = rb_intern("__read_method__");
|
|
1381
1396
|
ID_read = rb_intern("read");
|
|
1382
1397
|
ID_readpartial = rb_intern("readpartial");
|
|
@@ -1405,8 +1420,9 @@ void Init_H1P(void) {
|
|
|
1405
1420
|
GLOBAL_STR(STR_transfer_encoding, "transfer-encoding");
|
|
1406
1421
|
GLOBAL_STR(STR_transfer_encoding_capitalized, "Transfer-Encoding");
|
|
1407
1422
|
|
|
1408
|
-
GLOBAL_STR(STR_CRLF,
|
|
1409
|
-
GLOBAL_STR(STR_EMPTY_CHUNK,
|
|
1423
|
+
GLOBAL_STR(STR_CRLF, "\r\n");
|
|
1424
|
+
GLOBAL_STR(STR_EMPTY_CHUNK, "0\r\n\r\n");
|
|
1425
|
+
GLOBAL_STR(STR_COMMA_SPACE, ", ");
|
|
1410
1426
|
|
|
1411
1427
|
SYM_backend_read = ID2SYM(ID_backend_read);
|
|
1412
1428
|
SYM_backend_recv = ID2SYM(ID_backend_recv);
|
data/h1p.gemspec
CHANGED
|
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
|
|
|
18
18
|
s.require_paths = ["lib"]
|
|
19
19
|
s.required_ruby_version = '>= 2.7'
|
|
20
20
|
|
|
21
|
-
s.add_development_dependency 'rake-compiler', '1.2.
|
|
21
|
+
s.add_development_dependency 'rake-compiler', '1.2.3'
|
|
22
22
|
s.add_development_dependency 'rake', '~>13.0.6'
|
|
23
|
-
s.add_development_dependency 'minitest', '~>5.
|
|
23
|
+
s.add_development_dependency 'minitest', '~>5.18.0'
|
|
24
24
|
end
|
data/lib/h1p/version.rb
CHANGED
data/test/test_h1p.rb
CHANGED
|
@@ -35,6 +35,14 @@ class SendResponseTest < MiniTest::Test
|
|
|
35
35
|
assert_equal "HTTP/1.1 200 OK\r\nFoo: Bar\r\nX-Blah: 123\r\nContent-Length: 0\r\n\r\n", response
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
+
def test_send_response_multiple_header_values
|
|
39
|
+
i, o = IO.pipe
|
|
40
|
+
H1P.send_response(o, { :Foo => ['Bar', 'Baz'], 'X-Blah' => 123 })
|
|
41
|
+
o.close
|
|
42
|
+
response = i.read
|
|
43
|
+
assert_equal "HTTP/1.1 200 OK\r\nFoo: Bar, Baz\r\nX-Blah: 123\r\nContent-Length: 0\r\n\r\n", response
|
|
44
|
+
end
|
|
45
|
+
|
|
38
46
|
def test_send_response_with_body
|
|
39
47
|
i, o = IO.pipe
|
|
40
48
|
H1P.send_response(o, {}, "foobar")
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: h1p
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0
|
|
4
|
+
version: '1.0'
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sharon Rosner
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-
|
|
11
|
+
date: 2023-06-07 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake-compiler
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - '='
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 1.2.
|
|
19
|
+
version: 1.2.3
|
|
20
20
|
type: :development
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - '='
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 1.2.
|
|
26
|
+
version: 1.2.3
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: rake
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -44,14 +44,14 @@ dependencies:
|
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: 5.
|
|
47
|
+
version: 5.18.0
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: 5.
|
|
54
|
+
version: 5.18.0
|
|
55
55
|
description:
|
|
56
56
|
email: sharon@noteflakes.com
|
|
57
57
|
executables: []
|