h1p 0.6.1 → 1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|