A basic wrapper over Ruby's SSLSocket that initiates a TCP connection over SSL and then provides an basic interface mirroring Ruby's TCPSocket, vis., TCPSocket#send and TCPSocket#read.
# File lib/mongo/util/ssl_socket.rb, line 27 def initialize(host, port, op_timeout=nil, connect_timeout=nil, opts={}) @pid = Process.pid @op_timeout = op_timeout @connect_timeout = connect_timeout @tcp_socket = ::TCPSocket.new(host, port) @tcp_socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1) @context = OpenSSL::SSL::SSLContext.new if opts[:cert] @context.cert = OpenSSL::X509::Certificate.new(File.open(opts[:cert])) end if opts[:key] @context.key = OpenSSL::PKey::RSA.new(File.open(opts[:key])) end if opts[:verify] @context.ca_file = opts[:ca_cert] @context.verify_mode = OpenSSL::SSL::VERIFY_PEER end begin @socket = OpenSSL::SSL::SSLSocket.new(@tcp_socket, @context) @socket.sync_close = true connect rescue OpenSSL::SSL::SSLError raise ConnectionFailure, "SSL handshake failed. MongoDB may " + "not be configured with SSL support." end if opts[:verify] unless OpenSSL::SSL.verify_certificate_identity(@socket.peer_cert, host) raise ConnectionFailure, "SSL handshake failed. Hostname mismatch." end end self end
# File lib/mongo/util/ssl_socket.rb, line 68 def connect if @connect_timeout Timeout::timeout(@connect_timeout, ConnectionTimeoutError) do @socket.connect end else @socket.connect end end
Generated with the Darkfish Rdoc Generator 2.