itsi 0.2.23 → 0.2.25
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 +8 -0
- data/Cargo.lock +991 -939
- data/Dockerfile +2 -2
- data/crates/itsi_scheduler/Cargo.toml +1 -1
- data/crates/itsi_server/Cargo.lock +2 -2
- data/crates/itsi_server/Cargo.toml +1 -1
- data/crates/itsi_server/src/server/binds/listener.rs +113 -68
- data/crates/itsi_server/src/server/serve_strategy/acceptor.rs +35 -11
- data/crates/itsi_server/src/server/serve_strategy/single_mode.rs +2 -1
- data/gems/scheduler/Cargo.lock +4043 -509
- data/gems/scheduler/lib/itsi/scheduler/version.rb +1 -1
- data/gems/server/Cargo.lock +1017 -938
- data/gems/server/lib/itsi/http_request.rb +8 -1
- data/gems/server/lib/itsi/server/version.rb +1 -1
- data/gems/server/test/helpers/test_helper.rb +2 -0
- data/gems/server/test/options/tls_handshake_timeout.rb +19 -0
- data/gems/server/test/rack/test_rack_server.rb +16 -0
- data/lib/itsi/version.rb +1 -1
- metadata +6 -5
|
@@ -80,7 +80,14 @@ module Itsi
|
|
|
80
80
|
env["rack.input"] = build_input_io
|
|
81
81
|
env["rack.hijack"] = self
|
|
82
82
|
each_header do |k, v|
|
|
83
|
-
|
|
83
|
+
rack_header = SPECIAL_RACK_HEADER_MAP[k] || RACK_HEADER_MAP[k]
|
|
84
|
+
if k == "cookie" && env.key?(rack_header)
|
|
85
|
+
# RFC 9113 allows HTTP/2 clients to split Cookie across fields. Rack
|
|
86
|
+
# expects one HTTP_COOKIE value, joined with "; " rather than comma.
|
|
87
|
+
env[rack_header] = "#{env[rack_header]}; #{v}"
|
|
88
|
+
else
|
|
89
|
+
env[rack_header] = v
|
|
90
|
+
end
|
|
84
91
|
end
|
|
85
92
|
env
|
|
86
93
|
end
|
|
@@ -8,6 +8,7 @@ require "itsi/server"
|
|
|
8
8
|
require "itsi/scheduler"
|
|
9
9
|
require "socket"
|
|
10
10
|
require "net/http"
|
|
11
|
+
require "openssl"
|
|
11
12
|
require "minitest/autorun"
|
|
12
13
|
|
|
13
14
|
Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
|
|
@@ -157,6 +158,7 @@ class RequestContext
|
|
|
157
158
|
@uri.host,
|
|
158
159
|
@uri.port,
|
|
159
160
|
use_ssl: @uri.scheme == "https",
|
|
161
|
+
verify_mode: OpenSSL::SSL::VERIFY_NONE,
|
|
160
162
|
**opts
|
|
161
163
|
)
|
|
162
164
|
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require_relative "../helpers/test_helper"
|
|
2
|
+
|
|
3
|
+
class TestTlsHandshakeTimeout < Minitest::Test
|
|
4
|
+
def test_incomplete_tls_handshake_does_not_block_listener_indefinitely
|
|
5
|
+
server(
|
|
6
|
+
protocol: "https",
|
|
7
|
+
itsi_rb: lambda do
|
|
8
|
+
header_read_timeout 5.0
|
|
9
|
+
get("/ok") { |r| r.ok "ok" }
|
|
10
|
+
end
|
|
11
|
+
) do
|
|
12
|
+
socket = TCPSocket.new("127.0.0.1", @uri.port)
|
|
13
|
+
|
|
14
|
+
assert_equal "ok", get("/ok")
|
|
15
|
+
ensure
|
|
16
|
+
socket&.close
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -201,6 +201,22 @@ class TestRackServer < Minitest::Test
|
|
|
201
201
|
end
|
|
202
202
|
end
|
|
203
203
|
|
|
204
|
+
def test_duplicate_cookie_request_headers_are_joined_for_rack
|
|
205
|
+
server(app_with_lint: lambda do |env|
|
|
206
|
+
[200, { "content-type" => "text/plain" }, [env["HTTP_COOKIE"].to_s]]
|
|
207
|
+
end) do |uri|
|
|
208
|
+
response = raw_http(
|
|
209
|
+
"GET / HTTP/1.1\r\n" \
|
|
210
|
+
"Host: #{uri.host}:#{uri.port}\r\n" \
|
|
211
|
+
"Cookie: _session_id=abc\r\n" \
|
|
212
|
+
"Cookie: _gat=1\r\n" \
|
|
213
|
+
"Connection: close\r\n\r\n"
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
assert_includes response, "\r\n\r\n_session_id=abc; _gat=1"
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
|
|
204
220
|
def test_multiple_headers
|
|
205
221
|
server(app_with_lint: lambda do |env|
|
|
206
222
|
[200, { "content-type" => "text/plain", "x-example" => "one, two, three" }, ["Multiple Headers"]]
|
data/lib/itsi/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: itsi
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.25
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Wouter Coppieters
|
|
@@ -15,28 +15,28 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - '='
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: 0.2.
|
|
18
|
+
version: 0.2.25
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - '='
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: 0.2.
|
|
25
|
+
version: 0.2.25
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: itsi-server
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
29
29
|
requirements:
|
|
30
30
|
- - '='
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: 0.2.
|
|
32
|
+
version: 0.2.25
|
|
33
33
|
type: :runtime
|
|
34
34
|
prerelease: false
|
|
35
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
36
36
|
requirements:
|
|
37
37
|
- - '='
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: 0.2.
|
|
39
|
+
version: 0.2.25
|
|
40
40
|
description: Wrapper Gem for both the Itsi server and the Itsi Fiber scheduler
|
|
41
41
|
email:
|
|
42
42
|
- wc@pico.net.nz
|
|
@@ -1139,6 +1139,7 @@ files:
|
|
|
1139
1139
|
- gems/server/test/options/test_request_timeout.rb
|
|
1140
1140
|
- gems/server/test/options/test_threads.rb
|
|
1141
1141
|
- gems/server/test/options/test_workers.rb
|
|
1142
|
+
- gems/server/test/options/tls_handshake_timeout.rb
|
|
1142
1143
|
- gems/server/test/options/unmatched_request.rb
|
|
1143
1144
|
- gems/server/test/rack/test_rack_server.rb
|
|
1144
1145
|
- gems/server/vendor/rb-sys-build/.cargo-ok
|