Last change
on this file since 428 was 331, checked in by coas-nagasima, 6 years ago |
prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl
|
-
Property svn:eol-style
set to
native
-
Property svn:mime-type
set to
text/x-ruby
|
File size:
1.5 KB
|
Line | |
---|
1 | class TLS
|
---|
2 | def self.open(hostname, opts={})
|
---|
3 | tls = self.new(hostname, opts)
|
---|
4 | if block_given?
|
---|
5 | yield tls
|
---|
6 | tls.close
|
---|
7 | end
|
---|
8 | tls
|
---|
9 | end
|
---|
10 |
|
---|
11 | def initialize(host, opts={})
|
---|
12 | if host.is_a? String
|
---|
13 | @sock = TCPSocket.new(host, opts[:port] || 443)
|
---|
14 | else
|
---|
15 | @sock = host
|
---|
16 | host = nil
|
---|
17 | end
|
---|
18 |
|
---|
19 | @ctx = OpenSSL::SSL_CTX.new (opts[:version] || "any")
|
---|
20 | if opts[:certs]
|
---|
21 | @ctx.load_verify_locations opts[:certs]
|
---|
22 | @ctx.set_verify opts[:ignore_certificate_validity]
|
---|
23 | @ctx.set_verify_depth 5
|
---|
24 | end
|
---|
25 | if opts[:alpn]
|
---|
26 | @ctx.set_alpn_protos opts[:alpn]
|
---|
27 | end
|
---|
28 | @ssl = OpenSSL::SSL.new(@ctx)
|
---|
29 | @ssl.set_fd(@sock.fileno)
|
---|
30 | if opts[:sni]
|
---|
31 | if opts[:sni].is_a? String
|
---|
32 | servername = opts[:sni]
|
---|
33 | else
|
---|
34 | servername = opts[:identity] || host
|
---|
35 | end
|
---|
36 | unless servername
|
---|
37 | raise RuntimeError, 'requested SNI but identity is not known'
|
---|
38 | end
|
---|
39 | @ssl.set_tlsext_host_name(servername)
|
---|
40 | end
|
---|
41 |
|
---|
42 | @ssl.connect
|
---|
43 |
|
---|
44 | if opts[:certs]
|
---|
45 | @ssl.get_verify_result
|
---|
46 | if opts[:identity]
|
---|
47 | @ssl.check_identity opts[:identity]
|
---|
48 | end
|
---|
49 | end
|
---|
50 | end
|
---|
51 |
|
---|
52 | def close
|
---|
53 | @ssl.shutdown
|
---|
54 | end
|
---|
55 |
|
---|
56 | def read(length=nil, outbuf=nil)
|
---|
57 | return @ssl.read(length) if length
|
---|
58 |
|
---|
59 | result = ""
|
---|
60 | while true
|
---|
61 | s = @ssl.read
|
---|
62 | break unless s
|
---|
63 | result += s
|
---|
64 | end
|
---|
65 | result
|
---|
66 | end
|
---|
67 |
|
---|
68 | def write(str)
|
---|
69 | n = 0
|
---|
70 | while str.size > 0
|
---|
71 | i = @ssl.write(str)
|
---|
72 | n += i
|
---|
73 | str = str[i..-1]
|
---|
74 | end
|
---|
75 | n
|
---|
76 | end
|
---|
77 | end
|
---|
Note:
See
TracBrowser
for help on using the repository browser.