ftw 0.0.33 → 0.0.34
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.
- data/lib/ftw/agent.rb +15 -6
- data/lib/ftw/connection.rb +3 -1
- data/lib/ftw/protocol.rb +13 -1
- data/lib/ftw/version.rb +1 -1
- metadata +49 -50
data/lib/ftw/agent.rb
CHANGED
@@ -302,13 +302,22 @@ class FTW::Agent
|
|
302
302
|
def execute(request)
|
303
303
|
# TODO(sissel): Make redirection-following optional, but default.
|
304
304
|
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
305
|
+
tries = 3
|
306
|
+
begin
|
307
|
+
connection, error = connect(request.headers["Host"], request.port,
|
308
|
+
request.protocol == "https")
|
309
|
+
if !error.nil?
|
310
|
+
p :error => error
|
311
|
+
raise error
|
312
|
+
end
|
313
|
+
response = request.execute(connection)
|
314
|
+
rescue EOFError => e
|
315
|
+
tries -= 1
|
316
|
+
@logger.warn("Error while sending request, will retry.",
|
317
|
+
:tries_left => tries,
|
318
|
+
:exception => e)
|
319
|
+
retry if tries > 0
|
310
320
|
end
|
311
|
-
response = request.execute(connection)
|
312
321
|
|
313
322
|
redirects = 0
|
314
323
|
# Follow redirects
|
data/lib/ftw/connection.rb
CHANGED
@@ -232,7 +232,9 @@ class FTW::Connection
|
|
232
232
|
if readable?(timeout)
|
233
233
|
begin
|
234
234
|
# Read at most 'length' data, so read less from the socket
|
235
|
-
|
235
|
+
# We'll read less than 'length' if the pushback buffer has
|
236
|
+
# data in it already.
|
237
|
+
@socket.sysread(length - data.length, @read_buffer)
|
236
238
|
data << @read_buffer
|
237
239
|
return data
|
238
240
|
rescue EOFError => e
|
data/lib/ftw/protocol.rb
CHANGED
@@ -134,12 +134,21 @@ module FTW::Protocol
|
|
134
134
|
end
|
135
135
|
end # def read_body
|
136
136
|
|
137
|
+
# A shorthand for discarding the body of a request or response.
|
138
|
+
#
|
139
|
+
# This is the same as:
|
140
|
+
#
|
141
|
+
# foo.read_body { |c| }
|
142
|
+
def discard_body
|
143
|
+
read_body { |c| }
|
144
|
+
end # def discard_body
|
145
|
+
|
137
146
|
# Read the length bytes from the body. Yield each chunk read to the block
|
138
147
|
# given. This method is generally only called by http clients, not servers.
|
139
148
|
def read_http_body_length(length, &block)
|
140
149
|
remaining = length
|
141
150
|
while remaining > 0
|
142
|
-
data = @body.read
|
151
|
+
data = @body.read(remaining)
|
143
152
|
@logger.debug("Read bytes", :length => data.size)
|
144
153
|
if data.size > remaining
|
145
154
|
# Read too much data, only wanted part of this. Push the rest back.
|
@@ -165,6 +174,9 @@ module FTW::Protocol
|
|
165
174
|
parser.on_message_complete = proc { done = true }
|
166
175
|
|
167
176
|
while !done # will break on special conditions below
|
177
|
+
# TODO(sissel): In JRuby, this read will sometimes hang for ever
|
178
|
+
# because there's some wonkiness in IO.select on SSLSockets in JRuby.
|
179
|
+
# Maybe we should fix it...
|
168
180
|
data = @body.read
|
169
181
|
offset = parser << data
|
170
182
|
if offset != data.length
|
data/lib/ftw/version.rb
CHANGED
metadata
CHANGED
@@ -1,98 +1,97 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ftw
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.34
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jordan Sissel
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
12
|
+
date: 2013-05-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
|
15
|
+
name: cabin
|
16
16
|
version_requirements: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
17
|
requirements:
|
19
|
-
- -
|
18
|
+
- - '>'
|
20
19
|
- !ruby/object:Gem::Version
|
21
20
|
version: '0'
|
22
|
-
name: cabin
|
23
|
-
prerelease: false
|
24
|
-
requirement: !ruby/object:Gem::Requirement
|
25
21
|
none: false
|
22
|
+
requirement: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>'
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
|
-
|
27
|
+
none: false
|
28
|
+
prerelease: false
|
31
29
|
type: :runtime
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: http_parser.rb
|
32
32
|
version_requirements: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
33
|
requirements:
|
35
34
|
- - '='
|
36
35
|
- !ruby/object:Gem::Version
|
37
36
|
version: 0.5.3
|
38
|
-
name: http_parser.rb
|
39
|
-
prerelease: false
|
40
|
-
requirement: !ruby/object:Gem::Requirement
|
41
37
|
none: false
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
42
39
|
requirements:
|
43
40
|
- - '='
|
44
41
|
- !ruby/object:Gem::Version
|
45
42
|
version: 0.5.3
|
46
|
-
|
43
|
+
none: false
|
44
|
+
prerelease: false
|
47
45
|
type: :runtime
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: addressable
|
48
48
|
version_requirements: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
49
|
requirements:
|
51
|
-
- -
|
50
|
+
- - '>='
|
52
51
|
- !ruby/object:Gem::Version
|
53
52
|
version: '0'
|
54
|
-
name: addressable
|
55
|
-
prerelease: false
|
56
|
-
requirement: !ruby/object:Gem::Requirement
|
57
53
|
none: false
|
54
|
+
requirement: !ruby/object:Gem::Requirement
|
58
55
|
requirements:
|
59
|
-
- -
|
56
|
+
- - '>='
|
60
57
|
- !ruby/object:Gem::Version
|
61
58
|
version: '0'
|
62
|
-
|
59
|
+
none: false
|
60
|
+
prerelease: false
|
63
61
|
type: :runtime
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: backports
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
65
|
requirements:
|
67
|
-
- -
|
66
|
+
- - '>='
|
68
67
|
- !ruby/object:Gem::Version
|
69
68
|
version: 2.6.2
|
70
|
-
name: backports
|
71
|
-
prerelease: false
|
72
|
-
requirement: !ruby/object:Gem::Requirement
|
73
69
|
none: false
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
74
71
|
requirements:
|
75
|
-
- -
|
72
|
+
- - '>='
|
76
73
|
- !ruby/object:Gem::Version
|
77
74
|
version: 2.6.2
|
75
|
+
none: false
|
76
|
+
prerelease: false
|
77
|
+
type: :runtime
|
78
78
|
- !ruby/object:Gem::Dependency
|
79
|
-
|
79
|
+
name: minitest
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
81
|
requirements:
|
83
|
-
- -
|
82
|
+
- - '>'
|
84
83
|
- !ruby/object:Gem::Version
|
85
84
|
version: '0'
|
86
|
-
name: minitest
|
87
|
-
prerelease: false
|
88
|
-
requirement: !ruby/object:Gem::Requirement
|
89
85
|
none: false
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
90
87
|
requirements:
|
91
|
-
- -
|
88
|
+
- - '>'
|
92
89
|
- !ruby/object:Gem::Version
|
93
90
|
version: '0'
|
94
|
-
|
95
|
-
|
91
|
+
none: false
|
92
|
+
prerelease: false
|
93
|
+
type: :development
|
94
|
+
description: For The Web. Trying to build a solid and sane API for client and server web stuff. Client and Server operations for HTTP, WebSockets, SPDY, etc.
|
96
95
|
email:
|
97
96
|
- jls@semicomplete.com
|
98
97
|
executables: []
|
@@ -100,6 +99,7 @@ extensions: []
|
|
100
99
|
extra_rdoc_files: []
|
101
100
|
files:
|
102
101
|
- lib/ftw.rb
|
102
|
+
- lib/rack/handler/ftw.rb
|
103
103
|
- lib/ftw/websocket.rb
|
104
104
|
- lib/ftw/protocol.rb
|
105
105
|
- lib/ftw/webserver.rb
|
@@ -126,7 +126,6 @@ files:
|
|
126
126
|
- lib/ftw/dns/dns.rb
|
127
127
|
- lib/ftw/http/headers.rb
|
128
128
|
- lib/ftw/http/message.rb
|
129
|
-
- lib/rack/handler/ftw.rb
|
130
129
|
- test/docs.rb
|
131
130
|
- test/all.rb
|
132
131
|
- test/testing.rb
|
@@ -138,28 +137,28 @@ files:
|
|
138
137
|
homepage: http://github.com/jordansissel/ruby-ftw
|
139
138
|
licenses:
|
140
139
|
- Apache License (2.0)
|
141
|
-
post_install_message:
|
140
|
+
post_install_message:
|
142
141
|
rdoc_options: []
|
143
142
|
require_paths:
|
144
143
|
- lib
|
145
144
|
- lib
|
146
145
|
required_ruby_version: !ruby/object:Gem::Requirement
|
147
|
-
none: false
|
148
146
|
requirements:
|
149
|
-
- -
|
147
|
+
- - '>='
|
150
148
|
- !ruby/object:Gem::Version
|
151
149
|
version: '0'
|
152
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
150
|
none: false
|
151
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
152
|
requirements:
|
155
|
-
- -
|
153
|
+
- - '>='
|
156
154
|
- !ruby/object:Gem::Version
|
157
155
|
version: '0'
|
156
|
+
none: false
|
158
157
|
requirements: []
|
159
|
-
rubyforge_project:
|
160
|
-
rubygems_version: 1.8.
|
161
|
-
signing_key:
|
158
|
+
rubyforge_project:
|
159
|
+
rubygems_version: 1.8.24
|
160
|
+
signing_key:
|
162
161
|
specification_version: 3
|
163
|
-
summary: For The Web. Trying to build a solid and sane API for client and server web
|
164
|
-
stuff. Client and Server operations for HTTP, WebSockets, SPDY, etc.
|
162
|
+
summary: For The Web. Trying to build a solid and sane API for client and server web stuff. Client and Server operations for HTTP, WebSockets, SPDY, etc.
|
165
163
|
test_files: []
|
164
|
+
has_rdoc:
|