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