| Class | DRb::DRbSSLSocket |
| In: |
lib/drb/ssl.rb
|
| Parent: | DRbTCPSocket |
# File lib/drb/ssl.rb, line 158
158: def initialize(uri, soc, config, is_established)
159: @ssl = is_established ? soc : nil
160: super(uri, soc.to_io, config)
161: end
# File lib/drb/ssl.rb, line 124
124: def self.open(uri, config)
125: host, port, option = parse_uri(uri)
126: host.untaint
127: port.untaint
128: soc = TCPSocket.open(host, port)
129: ssl_conf = SSLConfig::new(config)
130: ssl_conf.setup_ssl_context
131: ssl = ssl_conf.connect(soc)
132: self.new(uri, ssl, ssl_conf, true)
133: end
# File lib/drb/ssl.rb, line 135
135: def self.open_server(uri, config)
136: uri = 'drbssl://:0' unless uri
137: host, port, opt = parse_uri(uri)
138: if host.size == 0
139: host = getservername
140: soc = open_server_inaddr_any(host, port)
141: else
142: soc = TCPServer.open(host, port)
143: end
144: port = soc.addr[1] if port == 0
145: @uri = "drbssl://#{host}:#{port}"
146:
147: ssl_conf = SSLConfig.new(config)
148: ssl_conf.setup_certificate
149: ssl_conf.setup_ssl_context
150: self.new(@uri, soc, ssl_conf, false)
151: end
# File lib/drb/ssl.rb, line 112
112: def self.parse_uri(uri)
113: if uri =~ /^drbssl:\/\/(.*?):(\d+)(\?(.*))?$/
114: host = $1
115: port = $2.to_i
116: option = $4
117: [host, port, option]
118: else
119: raise(DRbBadScheme, uri) unless uri =~ /^drbssl:/
120: raise(DRbBadURI, 'can\'t parse uri:' + uri)
121: end
122: end
# File lib/drb/ssl.rb, line 153
153: def self.uri_option(uri, config)
154: host, port, option = parse_uri(uri)
155: return "drbssl://#{host}:#{port}", option
156: end
# File lib/drb/ssl.rb, line 173
173: def accept
174: begin
175: while true
176: soc = @socket.accept
177: break if (@acl ? @acl.allow_socket?(soc) : true)
178: soc.close
179: end
180: ssl = @config.accept(soc)
181: self.class.new(uri, ssl, @config, true)
182: rescue OpenSSL::SSL::SSLError
183: warn("#{__FILE__}:#{__LINE__}: warning: #{$!.message} (#{$!.class})") if @config[:verbose]
184: retry
185: end
186: end