yahns 1.12.4 → 1.12.5
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/GIT-VERSION-GEN +1 -1
- data/lib/yahns/http_client.rb +3 -3
- data/lib/yahns/proxy_http_response.rb +6 -2
- data/lib/yahns/proxy_pass.rb +4 -1
- data/test/test_client_expire.rb +11 -2
- data/test/test_proxy_pass.rb +10 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b9e19ad9295dcdd4fb3423900a4061e9a4495597
|
4
|
+
data.tar.gz: e98ed154740a92a0378b0ddc255561bcda1ea391
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e80a5f1d8ec22f04c7e80a1d128e18a6c05923ad2c850cafdae763c50e03c29242279160d73de267593789ab09b5e31beff797d177f5ff57aba7939de174480
|
7
|
+
data.tar.gz: 44fec12611e1e0f8f83868879b53c8fb9186e61c8be1bc5b020c4879ed25fdbbe5c1eb3aabe650e7b2270d7c4dcb6b77f1f21949926755987f1fe1bd05a37f0f
|
data/GIT-VERSION-GEN
CHANGED
data/lib/yahns/http_client.rb
CHANGED
@@ -22,8 +22,7 @@ def step_write
|
|
22
22
|
case rv = @state.wbuf_flush(self)
|
23
23
|
when :wait_writable, :wait_readable
|
24
24
|
return rv # tell epoll/kqueue to wait on this more
|
25
|
-
when :ignore # :ignore on hijack
|
26
|
-
@state = :ignore
|
25
|
+
when :ignore # :ignore on hijack, @state already set in hijack_cleanup
|
27
26
|
return :ignore
|
28
27
|
when Yahns::StreamFile
|
29
28
|
@state = rv # continue looping
|
@@ -254,8 +253,9 @@ def yahns_read(bytes, buf)
|
|
254
253
|
# (and complicated) as our hijack support will allow "un-hijacking"
|
255
254
|
# the socket.
|
256
255
|
def hijack_cleanup
|
257
|
-
# prevent socket from holding process up
|
256
|
+
# prevent socket from holding process exit up
|
258
257
|
Thread.current[:yahns_fdmap].forget(self)
|
258
|
+
@state = :ignore
|
259
259
|
@input = nil # keep env["rack.input"] accessible, though
|
260
260
|
end
|
261
261
|
|
@@ -105,8 +105,12 @@ def proxy_response_start(res, tip, kcar, req_res)
|
|
105
105
|
|
106
106
|
# chunk the response ourselves if the client supports it,
|
107
107
|
# but the backend does not terminate properly
|
108
|
-
if alive && ! term
|
109
|
-
|
108
|
+
if alive && ! term
|
109
|
+
if env['HTTP_VERSION'] == 'HTTP/1.1'.freeze
|
110
|
+
res << "Transfer-Encoding: chunked\r\n".freeze
|
111
|
+
else # we can't persist HTTP/1.0 and HTTP/0.9 w/o Content-Length
|
112
|
+
alive = false
|
113
|
+
end
|
110
114
|
end
|
111
115
|
res << (alive ? "Connection: keep-alive\r\n\r\n".freeze
|
112
116
|
: "Connection: close\r\n\r\n".freeze)
|
data/lib/yahns/proxy_pass.rb
CHANGED
@@ -226,9 +226,12 @@ def call(env)
|
|
226
226
|
ver = 'HTTP/1.0'.freeze
|
227
227
|
end
|
228
228
|
|
229
|
+
addr = env['REMOTE_ADDR']
|
230
|
+
xff = env['HTTP_X_FORWARDED_FOR']
|
231
|
+
xff = xff =~ /\S/ ? "#{xff}, #{addr}" : addr
|
229
232
|
req = "#{env['REQUEST_METHOD']} #{req} #{ver}\r\n" \
|
230
233
|
"X-Forwarded-Proto: #{env['rack.url_scheme']}\r\n" \
|
231
|
-
"X-Forwarded-For: #{
|
234
|
+
"X-Forwarded-For: #{xff}\r\n".dup
|
232
235
|
|
233
236
|
# pass most HTTP_* headers through as-is
|
234
237
|
chunked = false
|
data/test/test_client_expire.rb
CHANGED
@@ -99,6 +99,14 @@ def test_client_expire_desperate
|
|
99
99
|
end
|
100
100
|
stderr_path err.path
|
101
101
|
end
|
102
|
+
|
103
|
+
# 1024 is common on old systems, but nowadays Jessie seems to be 65536
|
104
|
+
nr = Process.getrlimit(:NOFILE)[0]
|
105
|
+
if nr >= 1024
|
106
|
+
nr = 1024
|
107
|
+
do_rlimit = true
|
108
|
+
end
|
109
|
+
|
102
110
|
pid = mkserver(cfg) do
|
103
111
|
keep = { $stderr => true, $stdout => true, $stdin => true, @srv => true }
|
104
112
|
ObjectSpace.each_object(IO) do |obj|
|
@@ -108,7 +116,9 @@ def test_client_expire_desperate
|
|
108
116
|
rescue IOError # could be uninitialized
|
109
117
|
end
|
110
118
|
end
|
119
|
+
Process.setrlimit(:NOFILE, nr) if do_rlimit
|
111
120
|
end
|
121
|
+
|
112
122
|
f = get_tcp_client(host, port)
|
113
123
|
f.write "G"
|
114
124
|
s = get_tcp_client(host, port)
|
@@ -119,10 +129,9 @@ def test_client_expire_desperate
|
|
119
129
|
assert_match(%r{keep-alive}, str)
|
120
130
|
sleep 1
|
121
131
|
|
122
|
-
# ignore errors, just beat the crap out of the process
|
123
|
-
nr = Process.getrlimit(:NOFILE)[0] # 1024 is common
|
124
132
|
assert_operator nr, :>, 666, "increase RLIM_NOFILE (ulimit -n)"
|
125
133
|
nr -= 50
|
134
|
+
# ignore errors, just beat the crap out of the process
|
126
135
|
opts = { out: "/dev/null", err: "/dev/null", close_others: true }
|
127
136
|
begin
|
128
137
|
pids = 2.times.map do
|
data/test/test_proxy_pass.rb
CHANGED
@@ -572,6 +572,16 @@ def check_response_trailer(host, port)
|
|
572
572
|
end
|
573
573
|
|
574
574
|
def check_eof_body(host, port)
|
575
|
+
Timeout.timeout(30) do
|
576
|
+
s = TCPSocket.new(host, port)
|
577
|
+
s.write("GET /eof-body-fast HTTP/1.0\r\nConnection:keep-alive\r\n\r\n")
|
578
|
+
res = s.read
|
579
|
+
assert_match %r{\AHTTP/1\.[01] 200 OK\r\n}, res
|
580
|
+
assert_match %r{\r\nConnection: close\r\n}, res
|
581
|
+
assert_match %r{\r\n\r\neof-body-fast\z}, res
|
582
|
+
s.close
|
583
|
+
end
|
584
|
+
|
575
585
|
Timeout.timeout(60) do
|
576
586
|
s = TCPSocket.new(host, port)
|
577
587
|
s.write("GET /eof-body-fast HTTP/1.0\r\n\r\n")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yahns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.12.
|
4
|
+
version: 1.12.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- yahns hackers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-05
|
11
|
+
date: 2016-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: kgio
|
@@ -236,7 +236,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
236
236
|
version: '0'
|
237
237
|
requirements: []
|
238
238
|
rubyforge_project:
|
239
|
-
rubygems_version: 2.6.
|
239
|
+
rubygems_version: 2.6.4
|
240
240
|
signing_key:
|
241
241
|
specification_version: 4
|
242
242
|
summary: sleepy, multi-threaded, non-blocking application server
|