source: EcnlProtoTool/trunk/mrbgems/mruby-tls-openssl/mrblib/tls.rb@ 331

Last change on this file since 331 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 
1class 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
77end
Note: See TracBrowser for help on using the repository browser.