libuv 0.11.1 → 0.11.2
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/README.md +1 -1
- data/lib/libuv/ext/tasks.rb +3 -1
- data/lib/libuv/mixins/stream.rb +8 -4
- data/lib/libuv/tcp.rb +97 -0
- data/lib/libuv/version.rb +1 -1
- data/libuv.gemspec +1 -0
- data/spec/tcp_spec.rb +64 -0
- metadata +32 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6b1083a5f79f1e3c76247f6871cb52a299362315
|
4
|
+
data.tar.gz: 86311c897d2e2da79fd28d8a756236cfbd5a3f12
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 78c74f51d1a890826f005654693b0b9c92a97ea0d9aecee10b91f877ec6ca98880400f0fbf2770286198397006d2d4bb52ef97667a299d526cc88de40e448fe1
|
7
|
+
data.tar.gz: 30440c1b0b077e34b8a7519ab2a34e4a4dcbd04004158716f8fe8151ae9d5150002eb0e28887a128308d2a31f9a0e7dfc5430d4a4348b507dd658a6bf8e8d2b7
|
data/README.md
CHANGED
data/lib/libuv/ext/tasks.rb
CHANGED
@@ -13,7 +13,9 @@ file 'ext/libuv/build' do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
file 'ext/libuv/build/gyp' => 'ext/libuv/build' do
|
16
|
-
|
16
|
+
if not File.directory?('ext/libuv/build/gyp')
|
17
|
+
system "svn", "export", "-r1214", "http://gyp.googlecode.com/svn/trunk", "ext/libuv/build/gyp"
|
18
|
+
end
|
17
19
|
end
|
18
20
|
|
19
21
|
CLEAN.include('ext/libuv/build/gyp')
|
data/lib/libuv/mixins/stream.rb
CHANGED
@@ -134,10 +134,14 @@ module Libuv
|
|
134
134
|
data = base.read_string(nread)
|
135
135
|
::Libuv::Ext.free(base)
|
136
136
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
137
|
+
if @tls.nil?
|
138
|
+
begin
|
139
|
+
@progress.call data, self
|
140
|
+
rescue Exception => e
|
141
|
+
@loop.log :error, :stream_progress_cb, e
|
142
|
+
end
|
143
|
+
else
|
144
|
+
@tls.decrypt(data)
|
141
145
|
end
|
142
146
|
end
|
143
147
|
end
|
data/lib/libuv/tcp.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'ipaddr'
|
2
|
+
require 'ruby-tls'
|
2
3
|
|
3
4
|
|
4
5
|
module Libuv
|
@@ -7,6 +8,7 @@ module Libuv
|
|
7
8
|
|
8
9
|
|
9
10
|
KEEPALIVE_ARGUMENT_ERROR = "delay must be an Integer".freeze
|
11
|
+
TLS_ERROR = "TLS write failed".freeze
|
10
12
|
|
11
13
|
|
12
14
|
def initialize(loop, acceptor = nil)
|
@@ -19,6 +21,101 @@ module Libuv
|
|
19
21
|
super(tcp_ptr, error)
|
20
22
|
end
|
21
23
|
|
24
|
+
|
25
|
+
#
|
26
|
+
# TLS Abstraction ----------------------
|
27
|
+
# --------------------------------------
|
28
|
+
#
|
29
|
+
def start_tls(args = {})
|
30
|
+
@handshake = false
|
31
|
+
@pending_writes = []
|
32
|
+
@tls = ::RubyTls::Connection.new(self)
|
33
|
+
@tls.start(args)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Push through any pending writes when handshake has completed
|
37
|
+
def handshake_cb
|
38
|
+
@handshake = true
|
39
|
+
writes = @pending_writes
|
40
|
+
@pending_writes = nil
|
41
|
+
writes.each do |deferred, data|
|
42
|
+
@pending_write = deferred
|
43
|
+
@tls.encrypt(data)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# This is clear text data that has been decrypted
|
48
|
+
# Same as stream.rb on_read for clear text
|
49
|
+
def dispatch_cb(data)
|
50
|
+
begin
|
51
|
+
@progress.call data, self
|
52
|
+
rescue Exception => e
|
53
|
+
@loop.log :error, :stream_progress_cb, e
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# We resolve the existing tls write promise with a the
|
58
|
+
# real writes promise (a close may have occurred)
|
59
|
+
def transmit_cb(data)
|
60
|
+
if not @pending_write.nil?
|
61
|
+
@pending_write.resolve(direct_write(data))
|
62
|
+
@pending_write = nil
|
63
|
+
else
|
64
|
+
direct_write(data)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# Close can be called multiple times
|
69
|
+
def close_cb
|
70
|
+
if not @pending_write.nil?
|
71
|
+
@pending_write.reject(TLS_ERROR)
|
72
|
+
@pending_write = nil
|
73
|
+
end
|
74
|
+
|
75
|
+
# Shutdown the stream
|
76
|
+
close
|
77
|
+
end
|
78
|
+
|
79
|
+
# overwrite the default close to ensure
|
80
|
+
# pending writes are rejected
|
81
|
+
def close
|
82
|
+
if not @pending_writes.nil?
|
83
|
+
@pending_writes.each do |deferred, data|
|
84
|
+
deferred.reject(TLS_ERROR)
|
85
|
+
end
|
86
|
+
@pending_writes = nil
|
87
|
+
end
|
88
|
+
|
89
|
+
super
|
90
|
+
end
|
91
|
+
|
92
|
+
# Verify peers will be called for each cert in the chain
|
93
|
+
def verify_peer(&block)
|
94
|
+
@tls.verify_cb &block
|
95
|
+
end
|
96
|
+
|
97
|
+
alias_method :direct_write, :write
|
98
|
+
def write(data)
|
99
|
+
if @tls.nil?
|
100
|
+
direct_write(data)
|
101
|
+
else
|
102
|
+
deferred = @loop.defer
|
103
|
+
|
104
|
+
if @handshake == true
|
105
|
+
@pending_write = deferred
|
106
|
+
@tls.encrypt(data)
|
107
|
+
else
|
108
|
+
@pending_writes << [deferred, data]
|
109
|
+
end
|
110
|
+
|
111
|
+
deferred.promise
|
112
|
+
end
|
113
|
+
end
|
114
|
+
#
|
115
|
+
# END TLS Abstraction ------------------
|
116
|
+
# --------------------------------------
|
117
|
+
#
|
118
|
+
|
22
119
|
def bind(ip, port, callback = nil, &blk)
|
23
120
|
return if @closed
|
24
121
|
@on_listen = callback || blk
|
data/lib/libuv/version.rb
CHANGED
data/libuv.gemspec
CHANGED
@@ -17,6 +17,7 @@ Gem::Specification.new do |gem|
|
|
17
17
|
|
18
18
|
gem.add_runtime_dependency 'ffi', '>= 1.9'
|
19
19
|
gem.add_runtime_dependency 'thread_safe'
|
20
|
+
gem.add_runtime_dependency 'ruby-tls'
|
20
21
|
gem.add_development_dependency 'rspec', '>= 2.14'
|
21
22
|
gem.add_development_dependency 'rake', '>= 10.1'
|
22
23
|
gem.add_development_dependency 'yard'
|
data/spec/tcp_spec.rb
CHANGED
@@ -200,4 +200,68 @@ describe Libuv::TCP do
|
|
200
200
|
@log.should == ['ping', 'pong']
|
201
201
|
end
|
202
202
|
|
203
|
+
describe 'basic TLS client and server' do
|
204
|
+
it "should send a ping and return a pong", :network => true do
|
205
|
+
@loop.run { |logger|
|
206
|
+
logger.progress do |level, errorid, error|
|
207
|
+
begin
|
208
|
+
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
209
|
+
rescue Exception
|
210
|
+
@general_failure << 'error in logger'
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
|
215
|
+
@server.bind('127.0.0.1', 34567) do |server|
|
216
|
+
server.accept do |client|
|
217
|
+
client.start_tls(server: true)
|
218
|
+
client.progress do |data|
|
219
|
+
@log << data
|
220
|
+
|
221
|
+
client.write('pong')
|
222
|
+
end
|
223
|
+
client.start_read
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
# catch errors
|
228
|
+
@server.catch do |reason|
|
229
|
+
@general_failure << reason.inspect
|
230
|
+
end
|
231
|
+
|
232
|
+
# start listening
|
233
|
+
@server.listen(1024)
|
234
|
+
|
235
|
+
|
236
|
+
|
237
|
+
# connect client to server
|
238
|
+
@client.connect('127.0.0.1', 34567) do |client|
|
239
|
+
client.start_tls
|
240
|
+
client.progress do |data|
|
241
|
+
@log << data
|
242
|
+
|
243
|
+
@client.shutdown
|
244
|
+
end
|
245
|
+
|
246
|
+
@client.start_read
|
247
|
+
@client.write('ping')
|
248
|
+
end
|
249
|
+
|
250
|
+
# catch errors
|
251
|
+
@client.catch do |reason|
|
252
|
+
@general_failure << reason.inspect
|
253
|
+
end
|
254
|
+
|
255
|
+
# close the handle
|
256
|
+
@client.finally do
|
257
|
+
@server.close
|
258
|
+
@loop.stop
|
259
|
+
end
|
260
|
+
}
|
261
|
+
|
262
|
+
@general_failure.should == []
|
263
|
+
@log.should == ['ping', 'pong']
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
203
267
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: libuv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.
|
4
|
+
version: 0.11.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bulat Shakirzyanov
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-11-
|
12
|
+
date: 2013-11-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ffi
|
@@ -39,6 +39,20 @@ dependencies:
|
|
39
39
|
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: ruby-tls
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
42
56
|
- !ruby/object:Gem::Dependency
|
43
57
|
name: rspec
|
44
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -173,6 +187,19 @@ files:
|
|
173
187
|
- ext/libuv/include/uv.h
|
174
188
|
- ext/libuv/m4/.gitignore
|
175
189
|
- ext/libuv/m4/dtrace.m4
|
190
|
+
- ext/libuv/samples/.gitignore
|
191
|
+
- ext/libuv/samples/socks5-proxy/.gitignore
|
192
|
+
- ext/libuv/samples/socks5-proxy/LICENSE
|
193
|
+
- ext/libuv/samples/socks5-proxy/Makefile
|
194
|
+
- ext/libuv/samples/socks5-proxy/build.gyp
|
195
|
+
- ext/libuv/samples/socks5-proxy/client.c
|
196
|
+
- ext/libuv/samples/socks5-proxy/defs.h
|
197
|
+
- ext/libuv/samples/socks5-proxy/getopt.c
|
198
|
+
- ext/libuv/samples/socks5-proxy/main.c
|
199
|
+
- ext/libuv/samples/socks5-proxy/s5.c
|
200
|
+
- ext/libuv/samples/socks5-proxy/s5.h
|
201
|
+
- ext/libuv/samples/socks5-proxy/server.c
|
202
|
+
- ext/libuv/samples/socks5-proxy/util.c
|
176
203
|
- ext/libuv/src/fs-poll.c
|
177
204
|
- ext/libuv/src/inet.c
|
178
205
|
- ext/libuv/src/queue.h
|
@@ -285,6 +312,7 @@ files:
|
|
285
312
|
- ext/libuv/test/test-barrier.c
|
286
313
|
- ext/libuv/test/test-callback-order.c
|
287
314
|
- ext/libuv/test/test-callback-stack.c
|
315
|
+
- ext/libuv/test/test-close-fd.c
|
288
316
|
- ext/libuv/test/test-close-order.c
|
289
317
|
- ext/libuv/test/test-condvar.c
|
290
318
|
- ext/libuv/test/test-connection-fail.c
|
@@ -333,6 +361,7 @@ files:
|
|
333
361
|
- ext/libuv/test/test-stdio-over-pipes.c
|
334
362
|
- ext/libuv/test/test-tcp-bind-error.c
|
335
363
|
- ext/libuv/test/test-tcp-bind6-error.c
|
364
|
+
- ext/libuv/test/test-tcp-close-accept.c
|
336
365
|
- ext/libuv/test/test-tcp-close-while-connecting.c
|
337
366
|
- ext/libuv/test/test-tcp-close.c
|
338
367
|
- ext/libuv/test/test-tcp-connect-error-after-write.c
|
@@ -361,6 +390,7 @@ files:
|
|
361
390
|
- ext/libuv/test/test-udp-options.c
|
362
391
|
- ext/libuv/test/test-udp-send-and-recv.c
|
363
392
|
- ext/libuv/test/test-walk-handles.c
|
393
|
+
- ext/libuv/test/test-watcher-cross-stop.c
|
364
394
|
- ext/libuv/uv.gyp
|
365
395
|
- ext/libuv/vcbuild.bat
|
366
396
|
homepage: https://github.com/cotag/libuv
|