jaws 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/jaws/server.rb +31 -10
- data/spec/spec_helper.rb +1 -0
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.1
|
data/lib/jaws/server.rb
CHANGED
@@ -64,7 +64,7 @@ module Jaws
|
|
64
64
|
# Initializes a new Jaws server object. Pass it a hash of options (:Host, :Port, :MaxClients, and :SystemCores valid)
|
65
65
|
def initialize(options = DefaultOptions)
|
66
66
|
@options = DefaultOptions.merge(options)
|
67
|
-
|
67
|
+
DefaultOptions.each do |k,v|
|
68
68
|
send(:"#{Jaws.decapse_name(k.to_s)}=", @options[k])
|
69
69
|
end
|
70
70
|
self.extend Mutex_m
|
@@ -156,6 +156,14 @@ module Jaws
|
|
156
156
|
else
|
157
157
|
headers.delete("Content-Length")
|
158
158
|
end
|
159
|
+
|
160
|
+
if (req.version[0] <= 1 && req.version[1] < 1) #old http versions
|
161
|
+
if (!body_len) # with no pre-defined length
|
162
|
+
headers.delete("Transfer-Encoding")
|
163
|
+
headers["Connection"] = "close"
|
164
|
+
# become connection-close with a transfer-encoding of identity
|
165
|
+
end
|
166
|
+
end
|
159
167
|
|
160
168
|
headers.each do |key, vals|
|
161
169
|
vals.each_line do |val|
|
@@ -165,6 +173,13 @@ module Jaws
|
|
165
173
|
response << "\r\n"
|
166
174
|
|
167
175
|
client.write(response)
|
176
|
+
|
177
|
+
connection_should_close = false
|
178
|
+
if ((req.headers["CONNECTION"] && req.headers["CONNECTION"] =~ /close/) ||
|
179
|
+
(headers["Connection"] && headers["Connection"] =~ /close/) ||
|
180
|
+
(req.version == [1,0] && req.headers["CONNECTION"] !~ /keep-alive/))
|
181
|
+
connection_should_close = true
|
182
|
+
end
|
168
183
|
|
169
184
|
# only output a body if the request wants one and the status code
|
170
185
|
# should have one.
|
@@ -188,21 +203,27 @@ module Jaws
|
|
188
203
|
return
|
189
204
|
end
|
190
205
|
else
|
191
|
-
# If the app didn't set a length, we
|
192
|
-
|
193
|
-
|
194
|
-
|
206
|
+
# If the app didn't set a length, we need to send the data
|
207
|
+
# in a way the client will understand. That means, for http<1.1
|
208
|
+
# we close the connection. For http>1.0 we do chunked.
|
209
|
+
if (connection_should_close && headers["Content-Encoding"] != 'chunked')
|
210
|
+
body.each do |chunk|
|
211
|
+
client.write(chunk)
|
212
|
+
end
|
213
|
+
else
|
214
|
+
body.each do |chunk|
|
215
|
+
client.write(chunk.size.to_s(16) + "\r\n")
|
216
|
+
client.write(chunk)
|
217
|
+
client.write("\r\n")
|
218
|
+
end
|
219
|
+
client.write("0\r\n")
|
195
220
|
client.write("\r\n")
|
196
221
|
end
|
197
|
-
client.write("0\r\n")
|
198
|
-
client.write("\r\n")
|
199
222
|
end
|
200
223
|
end
|
201
224
|
|
202
225
|
# if the conditions are right, close the connection
|
203
|
-
if (
|
204
|
-
(headers["Connection"] && headers["Connection"] =~ /close/) ||
|
205
|
-
(req.version == [1,0]))
|
226
|
+
if (connection_should_close)
|
206
227
|
client.close_write
|
207
228
|
end
|
208
229
|
rescue Errno::EPIPE
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 5
|
8
|
-
-
|
9
|
-
version: 0.5.
|
8
|
+
- 1
|
9
|
+
version: 0.5.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Graham Batty
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-03-
|
17
|
+
date: 2010-03-17 00:00:00 -06:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|