mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Use dynamic dispatch instead of is_a?.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56860 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
4081b34d4c
commit
4c839a2cec
1 changed files with 16 additions and 14 deletions
|
@ -362,7 +362,7 @@ module Net
|
|||
begin
|
||||
voidcmd("AUTH TLS")
|
||||
ssl_sock = start_tls_session(@bare_sock)
|
||||
@sock = BufferedSocket.new(ssl_sock, read_timeout: @read_timeout)
|
||||
@sock = BufferedSSLSocket.new(ssl_sock, read_timeout: @read_timeout)
|
||||
if @private_data_connection
|
||||
voidcmd("PBSZ 0")
|
||||
voidcmd("PROT P")
|
||||
|
@ -565,10 +565,12 @@ module Net
|
|||
end
|
||||
end
|
||||
if @private_data_connection
|
||||
conn = start_tls_session(conn)
|
||||
end
|
||||
return BufferedSSLSocket.new(start_tls_session(conn),
|
||||
read_timeout: @read_timeout)
|
||||
else
|
||||
return BufferedSocket.new(conn, read_timeout: @read_timeout)
|
||||
end
|
||||
end
|
||||
private :transfercmd
|
||||
|
||||
#
|
||||
|
@ -1399,22 +1401,12 @@ module Net
|
|||
end
|
||||
|
||||
class BufferedSocket < BufferedIO
|
||||
[:local_address, :remote_address, :addr, :peeraddr, :send].each do |method|
|
||||
[:local_address, :remote_address, :addr, :peeraddr, :send, :shutdown].each do |method|
|
||||
define_method(method) { |*args|
|
||||
@io.__send__(method, *args)
|
||||
}
|
||||
end
|
||||
|
||||
def shutdown(*args)
|
||||
if defined?(OpenSSL::SSL::SSLSocket) &&
|
||||
@io.is_a?(OpenSSL::SSL::SSLSocket)
|
||||
# If @io is an SSLSocket, SSL_shutdown() will be called from
|
||||
# SSLSocket#close, so shutdown(2) should not be called.
|
||||
else
|
||||
@io.shutdown(*args)
|
||||
end
|
||||
end
|
||||
|
||||
def read(len = nil)
|
||||
if len
|
||||
s = super(len, String.new, true)
|
||||
|
@ -1442,6 +1434,16 @@ module Net
|
|||
return line
|
||||
end
|
||||
end
|
||||
|
||||
if defined?(OpenSSL::SSL::SSLSocket)
|
||||
class BufferedSSLSocket < BufferedSocket
|
||||
def shutdown(*args)
|
||||
# SSL_shutdown() will be called from SSLSocket#close, and
|
||||
# SSL_shutdonw() will send the "close notify" alert to the peer,
|
||||
# so shutdown(2) should not be called.
|
||||
end
|
||||
end
|
||||
end
|
||||
# :startdoc:
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue