yahns 1.12.2 → 1.12.3

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
  SHA1:
3
- metadata.gz: 7e7f2c5c9c51e65d39f39ecb7424434393e72673
4
- data.tar.gz: dbbc9e3459a4f89ab0bd2ad46bd72f60001d04be
3
+ metadata.gz: be964a6d1a0a80744bd419b896f4aa83cdadbd06
4
+ data.tar.gz: 907c5f15f7d6c2d49609326b1a8175d56a09cad7
5
5
  SHA512:
6
- metadata.gz: 8840e5441afcda2aa8b20c3b0ae3a2fc935d97260f86cea8b04e29ca78d0dfcbaaac717400ca3f7249d1b97c76302b3f1a20758a4d90154b0b0b577f6dc178ae
7
- data.tar.gz: a4d783b2ae2a860dfe948bb1d4747afb2dd8bf465bf3faf0c9a530ec5c7cde7fc38fdb0e3fb05c8782364c081ced26728d4a24a7837994738ad586d1fab76229
6
+ metadata.gz: 7bb344b77483d6fbb091b721fcc7b7d6f789738aa8552f7c7b85e856ca15b2edd2dd12b299b5af80a5d1484bded048c31599c5c187433bbf37987910a6effd47
7
+ data.tar.gz: 0d1226f4bddf82eb366f71d020cafaedf0b7a0b63eed07792588d902f14aaf26cebee084d8e07379455bf91c1653823887ad35234d20abb09c6581aaab7818b1
@@ -446,7 +446,10 @@ An example which seems to work is:
446
446
  ssl_ctx.key = OpenSSL::PKey::RSA.new(
447
447
  IO.read('/etc/ssl/private/example.key')
448
448
  )
449
- ssl_ctx.set_params # use defaults provided by Ruby on top of OpenSSL
449
+
450
+ # use defaults provided by Ruby on top of OpenSSL,
451
+ # but disable client certificate verification as it is rare:
452
+ ssl_ctx.set_params(verify_mode: OpenSSL::SSL::VERIFY_NONE)
450
453
 
451
454
  app(:rack, "/path/to/my/app/config.ru") do
452
455
  listen 443, ssl_ctx: ssl_ctx
@@ -5,7 +5,7 @@
5
5
  CONSTANT = "Yahns::VERSION"
6
6
  RVF = "lib/yahns/version.rb"
7
7
  GVF = "GIT-VERSION-FILE"
8
- DEF_VER = "v1.12.2"
8
+ DEF_VER = "v1.12.3"
9
9
  vn = DEF_VER.dup
10
10
 
11
11
  # First see if there is a version file (included in release tarballs),
@@ -68,6 +68,7 @@ def proxy_response_start(res, tip, kcar, req_res)
68
68
  env['REQUEST_METHOD'] != 'HEAD'.freeze
69
69
  flags = MSG_DONTWAIT
70
70
  alive = @hs.next? && self.class.persistent_connections
71
+ term = false
71
72
  response_headers = env['yahns.proxy_pass.response_headers']
72
73
 
73
74
  res = "HTTP/1.1 #{msg ? %Q(#{code} #{msg}) : status}\r\n".dup
@@ -76,7 +77,10 @@ def proxy_response_start(res, tip, kcar, req_res)
76
77
  when /\A(?:Connection|Keep-Alive)\z/i
77
78
  next # do not let some upstream headers leak through
78
79
  when %r{\AContent-Length\z}i
80
+ term = true
79
81
  flags |= MSG_MORE if have_body && value.to_i > 0
82
+ when %r{\ATransfer-Encoding\z}i
83
+ term = true if value =~ /\bchunked\b/i
80
84
  end
81
85
 
82
86
  # response header mapping
@@ -92,6 +96,13 @@ def proxy_response_start(res, tip, kcar, req_res)
92
96
 
93
97
  # For now, do not add a Date: header, assume upstream already did it
94
98
  # but do not care if they did not
99
+
100
+ # chunk the response ourselves if the client supports it,
101
+ # but the backend does not terminate properly
102
+ if alive && ! term && (env['HTTP_VERSION'] == 'HTTP/1.1'.freeze)
103
+ res << "Transfer-Encoding: chunked\r\n".freeze
104
+ alive = true
105
+ end
95
106
  res << (alive ? "Connection: keep-alive\r\n\r\n".freeze
96
107
  : "Connection: close\r\n\r\n".freeze)
97
108
 
@@ -154,6 +165,7 @@ def proxy_response_start(res, tip, kcar, req_res)
154
165
 
155
166
  case tmp = tip.shift || req_res.kgio_tryread(0x2000, rbuf)
156
167
  when String
168
+ tmp = chunk_out(tmp) if alive
157
169
  wbuf = proxy_write(wbuf, tmp, alive)
158
170
  when nil
159
171
  req_res.shutdown
@@ -174,7 +186,8 @@ def proxy_response_start(res, tip, kcar, req_res)
174
186
 
175
187
  def proxy_response_finish(kcar, wbuf, req_res)
176
188
  rbuf = Thread.current[:yahns_rbuf]
177
- if len = kcar.body_bytes_left
189
+ alive = wbuf.wbuf_persist
190
+ if len = kcar.body_bytes_left # known Content-Length
178
191
 
179
192
  case tmp = req_res.kgio_tryread(0x2000, rbuf)
180
193
  when String
@@ -186,7 +199,7 @@ def proxy_response_finish(kcar, wbuf, req_res)
186
199
  return :wait_readable # self remains in :ignore, wait on upstream
187
200
  end while len != 0
188
201
 
189
- elsif kcar.chunked? # nasty chunked body
202
+ elsif kcar.chunked? # nasty chunked response body
190
203
  buf = ''.dup
191
204
 
192
205
  unless req_res.proxy_trailers
@@ -221,8 +234,10 @@ def proxy_response_finish(kcar, wbuf, req_res)
221
234
 
222
235
  case tmp = req_res.kgio_tryread(0x2000, rbuf)
223
236
  when String
237
+ tmp = chunk_out(tmp) if alive
224
238
  wbuf.wbuf_write(self, tmp)
225
239
  when nil
240
+ wbuf.wbuf_write(self, "0\r\n\r\n".freeze) if alive
226
241
  req_res.shutdown
227
242
  break
228
243
  when :wait_readable
@@ -232,7 +247,7 @@ def proxy_response_finish(kcar, wbuf, req_res)
232
247
  end
233
248
 
234
249
  busy = wbuf.busy and return proxy_busy_mod_blocked(wbuf, busy)
235
- proxy_busy_mod_done(wbuf.wbuf_persist) # returns nil
250
+ proxy_busy_mod_done(alive) # returns nil
236
251
  end
237
252
 
238
253
  def proxy_wait_next(qflags)
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.2
4
+ version: 1.12.3
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-03-01 00:00:00.000000000 Z
11
+ date: 2016-04-08 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.5.2
239
+ rubygems_version: 2.6.2
240
240
  signing_key:
241
241
  specification_version: 4
242
242
  summary: sleepy, multi-threaded, non-blocking application server