Class: SumologicCloudSyslog::SSLTransport

Inherits:
Object
  • Object
show all
Defined in:
lib/sumologic_cloud_syslog/ssl_transport.rb

Overview

Supports SSL connection to remote host

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(host, port, cert: nil, key: nil, ssl_version: :TLSv1_2, max_retries: 1) ⇒ SSLTransport

Returns a new instance of SSLTransport.



27
28
29
30
31
32
33
34
35
# 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

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_sym, *arguments, &block) ⇒ Object

Forward any methods directly to SSLSocket



70
71
72
# File 'lib/sumologic_cloud_syslog/ssl_transport.rb', line 70

def method_missing(method_sym, *arguments, &block)
  @socket.send(method_sym, *arguments, &block)
end

Instance Attribute Details

#certObject (readonly)

Returns the value of attribute cert.



23
24
25
# File 'lib/sumologic_cloud_syslog/ssl_transport.rb', line 23

def cert
  @cert
end

#hostObject (readonly)

Returns the value of attribute host.



23
24
25
# File 'lib/sumologic_cloud_syslog/ssl_transport.rb', line 23

def host
  @host
end

#keyObject (readonly)

Returns the value of attribute key.



23
24
25
# File 'lib/sumologic_cloud_syslog/ssl_transport.rb', line 23

def key
  @key
end

#portObject (readonly)

Returns the value of attribute port.



23
24
25
# File 'lib/sumologic_cloud_syslog/ssl_transport.rb', line 23

def port
  @port
end

#retries=(value) ⇒ Object (writeonly)

Sets the attribute retries

Parameters:

  • value

    the value to set the attribute retries to.



25
26
27
# File 'lib/sumologic_cloud_syslog/ssl_transport.rb', line 25

def retries=(value)
  @retries = value
end

#socketObject

Returns the value of attribute socket.



21
22
23
# File 'lib/sumologic_cloud_syslog/ssl_transport.rb', line 21

def socket
  @socket
end

#ssl_versionObject (readonly)

Returns the value of attribute ssl_version.



23
24
25
# File 'lib/sumologic_cloud_syslog/ssl_transport.rb', line 23

def ssl_version
  @ssl_version
end

Instance Method Details

#connectObject



37
38
39
40
# File 'lib/sumologic_cloud_syslog/ssl_transport.rb', line 37

def connect
  @socket = get_ssl_connection
  @socket.connect
end

#get_ssl_connectionObject



42
43
44
45
46
47
48
49
50
51
52
# 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

#write(s) ⇒ Object

Allow to retry on failed writes



55
56
57
58
59
60
61
62
63
64
65
66
67
# 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