class SumologicCloudSyslog::SSLTransport

Supports SSL connection to remote host

Attributes

cert[R]
host[R]
key[R]
port[R]
retries[W]
socket[RW]
ssl_version[R]

Public Class Methods

new(host, port, cert: nil, key: nil, ssl_version: :TLSv1_2, max_retries: 1) click to toggle source
# File lib/sumologic_cloud_syslog/ssl_transport.rb, line 27
def initialize(host, port, cert: nil, key: nil, ssl_version: :TLSv1_2, max_retries: 1)
  @host = host
  @port = port
  @cert = cert
  @key = key
  @ssl_version = ssl_version
  @retries = max_retries
  connect
end

Public Instance Methods

connect() click to toggle source
# File lib/sumologic_cloud_syslog/ssl_transport.rb, line 37
def connect
  @socket = get_ssl_connection
  @socket.connect
end
get_ssl_connection() click to toggle source
# File lib/sumologic_cloud_syslog/ssl_transport.rb, line 42
def get_ssl_connection
  tcp = TCPSocket.new(host, port)

  ctx = OpenSSL::SSL::SSLContext.new
  ctx.set_params(verify_mode: OpenSSL::SSL::VERIFY_PEER)
  ctx.ssl_version = ssl_version

  ctx.cert = OpenSSL::X509::Certificate.new(File.open(cert)) if cert
  ctx.key = OpenSSL::PKey::RSA.new(File.open(key)) if key
  OpenSSL::SSL::SSLSocket.new(tcp, ctx)
end
method_missing(method_sym, *arguments, &block) click to toggle source

Forward any methods directly to SSLSocket

# File lib/sumologic_cloud_syslog/ssl_transport.rb, line 70
def method_missing(method_sym, *arguments, &block)
  @socket.send(method_sym, *arguments, &block)
end
write(s) click to toggle source

Allow to retry on failed writes

# File lib/sumologic_cloud_syslog/ssl_transport.rb, line 55
def write(s)
  begin
    retry_id ||= 0
    @socket.send(:write, s)
  rescue => e
    if (retry_id += 1) < @retries
      connect
      retry
    else
      raise e
    end
  end
end