class Weso::Base::SocketCreator

::nodoc

Constants

DEFAULT_SSL_VERSION

Attributes

options[R]
uri[R]

Public Class Methods

new(url, options) click to toggle source
# File lib/weso/socket_creator.rb, line 11
def initialize(url, options)
  @uri = URI.parse(url)
  @options = options
end

Public Instance Methods

call() click to toggle source
# File lib/weso/socket_creator.rb, line 16
def call
  socket = TCPSocket.new(uri.host, port)
  socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
  socket = process_secure(socket) if secure?
  socket
end
secure?() click to toggle source
# File lib/weso/socket_creator.rb, line 23
def secure?
  %w[https wss].include? uri.scheme
end

Private Instance Methods

context() click to toggle source
# File lib/weso/socket_creator.rb, line 42
def context
  context = OpenSSL::SSL::SSLContext.new
  context.ssl_version = options[:ssl_version] || DEFAULT_SSL_VERSION
  context.verify_mode = options[:verify_mode] || OpenSSL::SSL::VERIFY_PEER
  context.cert_store  = options[:cert_store] || default_cert_store
  context
end
default_cert_store() click to toggle source
# File lib/weso/socket_creator.rb, line 50
def default_cert_store
  cert_store = OpenSSL::X509::Store.new
  cert_store.set_default_paths
  cert_store
end
port() click to toggle source
# File lib/weso/socket_creator.rb, line 29
def port
  uri.port || (uri.scheme == 'wss' ? 443 : 80)
end
process_secure(socket) click to toggle source
# File lib/weso/socket_creator.rb, line 33
def process_secure(socket)
  ssl_context = options[:ssl_context] || context

  socket = ::OpenSSL::SSL::SSLSocket.new(socket, ssl_context)
  socket.hostname = uri.host
  socket.connect
  socket
end