caldecott 0.0.3 → 0.0.4
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/caldecott/client/client.rb +1 -1
- data/lib/caldecott/client/http_tunnel.rb +33 -29
- data/lib/caldecott/version.rb +1 -1
- data/lib/caldecott.rb +0 -1
- metadata +2 -2
@@ -29,7 +29,7 @@ module Caldecott
|
|
29
29
|
puts "Starting local server on port #{local_port} to #{tun_url}"
|
30
30
|
end
|
31
31
|
|
32
|
-
EM.start_server("
|
32
|
+
EM.start_server("0.0.0.0", local_port, TcpConnection) do |conn|
|
33
33
|
# avoid races between tunnel setup and incoming local data
|
34
34
|
conn.pause
|
35
35
|
|
@@ -11,7 +11,6 @@ module Caldecott
|
|
11
11
|
def initialize(logger, url, dst_host, dst_port, auth_token)
|
12
12
|
@log, @auth_token = logger, auth_token
|
13
13
|
@closing = false
|
14
|
-
@retries = 0
|
15
14
|
init_msg = ""
|
16
15
|
|
17
16
|
# FIXME: why is this optional?
|
@@ -64,8 +63,8 @@ module Caldecott
|
|
64
63
|
@onreceive.call(data)
|
65
64
|
end
|
66
65
|
|
67
|
-
def start(base_uri, init_msg)
|
68
|
-
if
|
66
|
+
def start(base_uri, init_msg, attempts = MAX_RETRIES)
|
67
|
+
if attempts <= 0
|
69
68
|
trigger_on_close
|
70
69
|
return
|
71
70
|
end
|
@@ -75,14 +74,13 @@ module Caldecott
|
|
75
74
|
parsed_uri.path = '/tunnels'
|
76
75
|
|
77
76
|
@log.debug "post #{parsed_uri.to_s}"
|
78
|
-
req = EM::HttpRequest.new(parsed_uri.to_s).post :body => init_msg, :head => { "Auth-Token" => @auth_token }
|
77
|
+
req = EM::HttpRequest.new(parsed_uri.to_s).post :body => init_msg, :head => { "Auth-Token" => @auth_token, "Content-Length" => init_msg.bytesize }
|
79
78
|
|
80
79
|
req.callback do
|
81
80
|
@log.debug "post #{parsed_uri.to_s} #{req.response_header.status}"
|
82
81
|
unless [200, 201, 204].include?(req.response_header.status)
|
83
|
-
start(base_uri, init_msg)
|
82
|
+
start(base_uri, init_msg, attempts - 1)
|
84
83
|
else
|
85
|
-
@retries = 0
|
86
84
|
resp = JSON.parse(req.response)
|
87
85
|
|
88
86
|
parsed_uri.path = resp["path"]
|
@@ -99,7 +97,7 @@ module Caldecott
|
|
99
97
|
|
100
98
|
req.errback do
|
101
99
|
@log.debug "post #{parsed_uri.to_s} error"
|
102
|
-
start(base_uri, init_msg)
|
100
|
+
start(base_uri, init_msg, attempts - 1)
|
103
101
|
end
|
104
102
|
|
105
103
|
rescue Exception => e
|
@@ -109,8 +107,8 @@ module Caldecott
|
|
109
107
|
end
|
110
108
|
end
|
111
109
|
|
112
|
-
def stop
|
113
|
-
if
|
110
|
+
def stop(attempts = MAX_RETRIES)
|
111
|
+
if attempts <= 0
|
114
112
|
trigger_on_close
|
115
113
|
return
|
116
114
|
end
|
@@ -122,7 +120,7 @@ module Caldecott
|
|
122
120
|
|
123
121
|
req.errback do
|
124
122
|
@log.debug "delete #{@tun_uri} error"
|
125
|
-
stop
|
123
|
+
stop(attempts - 1)
|
126
124
|
end
|
127
125
|
|
128
126
|
req.callback do
|
@@ -130,7 +128,7 @@ module Caldecott
|
|
130
128
|
if [200, 202, 204, 404].include?(req.response_header.status)
|
131
129
|
trigger_on_close
|
132
130
|
else
|
133
|
-
stop
|
131
|
+
stop(attempts - 1)
|
134
132
|
end
|
135
133
|
end
|
136
134
|
end
|
@@ -138,7 +136,6 @@ module Caldecott
|
|
138
136
|
class Reader
|
139
137
|
def initialize(log, uri, conn, auth_token)
|
140
138
|
@log, @base_uri, @conn, @auth_token = log, uri, conn, auth_token
|
141
|
-
@retries = 0
|
142
139
|
@closing = false
|
143
140
|
start
|
144
141
|
end
|
@@ -147,13 +144,14 @@ module Caldecott
|
|
147
144
|
@closing = true
|
148
145
|
end
|
149
146
|
|
150
|
-
def start(seq = 1)
|
151
|
-
if
|
147
|
+
def start(seq = 1, attempts = MAX_RETRIES)
|
148
|
+
return if @closing
|
149
|
+
|
150
|
+
if attempts <= 0
|
152
151
|
@conn.trigger_on_close
|
153
152
|
return
|
154
153
|
end
|
155
154
|
|
156
|
-
return if @closing
|
157
155
|
uri = "#{@base_uri}/#{seq}"
|
158
156
|
@log.debug "get #{uri}"
|
159
157
|
req = EM::HttpRequest.new(uri).get :timeout => 0, :head => { "Auth-Token" => @auth_token }
|
@@ -168,7 +166,6 @@ module Caldecott
|
|
168
166
|
case req.response_header.status
|
169
167
|
when 200
|
170
168
|
@conn.trigger_on_receive(req.response)
|
171
|
-
@retries = 0
|
172
169
|
start(seq + 1)
|
173
170
|
when 404
|
174
171
|
@conn.trigger_on_close
|
@@ -182,51 +179,58 @@ module Caldecott
|
|
182
179
|
class Writer
|
183
180
|
def initialize(log, uri, conn, auth_token)
|
184
181
|
@log, @uri, @conn, @auth_token = log, uri, conn, auth_token
|
185
|
-
@retries = 0
|
186
182
|
@seq, @write_buffer = 1, ""
|
187
183
|
@closing = @writing = false
|
188
184
|
end
|
189
185
|
|
190
186
|
def send_data(data)
|
191
187
|
@write_buffer << data
|
192
|
-
send_data_buffered
|
188
|
+
send_data_buffered unless @writing
|
193
189
|
end
|
194
190
|
|
195
191
|
def close
|
196
192
|
@closing = true
|
197
193
|
end
|
198
194
|
|
199
|
-
|
200
|
-
|
195
|
+
private
|
196
|
+
|
197
|
+
def send_data_buffered(attempts = MAX_RETRIES)
|
198
|
+
return if @closing
|
199
|
+
|
200
|
+
@writing = true
|
201
|
+
|
202
|
+
@log.debug "attempts left: #{attempts}"
|
203
|
+
if attempts <= 0
|
201
204
|
@conn.trigger_on_close
|
202
205
|
return
|
203
206
|
end
|
204
207
|
|
205
|
-
|
206
|
-
data, @write_buffer = @write_buffer, "" unless @writing
|
208
|
+
data, @write_buffer = @write_buffer, ""
|
207
209
|
|
208
|
-
@writing = true
|
209
210
|
uri = "#{@uri}/#{@seq}"
|
210
211
|
@log.debug "put #{uri}"
|
211
|
-
req = EM::HttpRequest.new(uri).put :body => data, :head => { "Auth-Token" => @auth_token }
|
212
|
+
req = EM::HttpRequest.new(uri).put :body => data, :head => { "Auth-Token" => @auth_token, "Content-Length" => data.bytesize }
|
212
213
|
|
213
214
|
req.errback do
|
214
215
|
@log.debug "put #{uri} error"
|
215
|
-
send_data_buffered
|
216
|
+
send_data_buffered(attempts - 1)
|
216
217
|
end
|
217
218
|
|
218
219
|
req.callback do
|
219
220
|
@log.debug "put #{uri} #{req.response_header.status}"
|
220
221
|
case req.response_header.status
|
221
222
|
when 200, 202, 204
|
222
|
-
@writing = false
|
223
223
|
@seq += 1
|
224
|
-
|
225
|
-
|
224
|
+
|
225
|
+
if @write_buffer.empty?
|
226
|
+
@writing = false
|
227
|
+
else
|
228
|
+
send_data_buffered
|
229
|
+
end
|
226
230
|
when 404
|
227
231
|
@conn.trigger_on_close
|
228
232
|
else
|
229
|
-
send_data_buffered
|
233
|
+
send_data_buffered(attempts - 1)
|
230
234
|
end
|
231
235
|
end
|
232
236
|
end
|
data/lib/caldecott/version.rb
CHANGED
data/lib/caldecott.rb
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: caldecott
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.4
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- VMware
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date:
|
13
|
+
date: 2012-01-10 00:00:00 -08:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|