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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5aadb10cd3940b1506f9a898a5cb36fe41ee4929
4
- data.tar.gz: 44e8623b2b204756fd7bfdb915fe6012e7e30892
3
+ metadata.gz: 6b1083a5f79f1e3c76247f6871cb52a299362315
4
+ data.tar.gz: 86311c897d2e2da79fd28d8a756236cfbd5a3f12
5
5
  SHA512:
6
- metadata.gz: f0945989ee594cc8bc78969f8b20d728c32875d302476cd49dac9059e69e3cd46ff171fdfd1040d80854354b0a09d1d2328a0b694aec4f91cf3f8327e9776960
7
- data.tar.gz: 08f642c3abdbf20df9bbcd4dfd5a19172fda8314b4a6a82bebe20a04bb3ace010404dc0f4ccd346b1507e06277d55f34678d8af53940796d12df0f8dfc096665
6
+ metadata.gz: 78c74f51d1a890826f005654693b0b9c92a97ea0d9aecee10b91f877ec6ca98880400f0fbf2770286198397006d2d4bb52ef97667a299d526cc88de40e448fe1
7
+ data.tar.gz: 30440c1b0b077e34b8a7519ab2a34e4a4dcbd04004158716f8fe8151ae9d5150002eb0e28887a128308d2a31f9a0e7dfc5430d4a4348b507dd658a6bf8e8d2b7
data/README.md CHANGED
@@ -64,7 +64,7 @@ or
64
64
 
65
65
  ## Libuv features supported
66
66
 
67
- * TCP
67
+ * TCP (with TLS support)
68
68
  * UDP
69
69
  * TTY
70
70
  * Pipe
@@ -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
- system "svn", "export", "-r1214", "http://gyp.googlecode.com/svn/trunk", "ext/libuv/build/gyp"
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')
@@ -134,10 +134,14 @@ module Libuv
134
134
  data = base.read_string(nread)
135
135
  ::Libuv::Ext.free(base)
136
136
 
137
- begin
138
- @progress.call data, self
139
- rescue Exception => e
140
- @loop.log :error, :stream_progress_cb, e
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
@@ -1,3 +1,3 @@
1
1
  module Libuv
2
- VERSION = '0.11.1'
2
+ VERSION = '0.11.2'
3
3
  end
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.1
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-11 00:00:00.000000000 Z
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