Class: SumologicCloudSyslog::SSLTransport
- Inherits:
-
Object
- Object
- SumologicCloudSyslog::SSLTransport
- Defined in:
- lib/sumologic_cloud_syslog/ssl_transport.rb
Overview
Supports SSL connection to remote host
Instance Attribute Summary collapse
-
#cert ⇒ Object
readonly
Returns the value of attribute cert.
-
#host ⇒ Object
readonly
Returns the value of attribute host.
-
#key ⇒ Object
readonly
Returns the value of attribute key.
-
#port ⇒ Object
readonly
Returns the value of attribute port.
-
#retries ⇒ Object
writeonly
Sets the attribute retries.
-
#socket ⇒ Object
Returns the value of attribute socket.
-
#ssl_version ⇒ Object
readonly
Returns the value of attribute ssl_version.
Instance Method Summary collapse
- #connect ⇒ Object
- #get_ssl_connection ⇒ Object
-
#initialize(host, port, cert: nil, key: nil, ssl_version: :TLSv1_2, max_retries: 1) ⇒ SSLTransport
constructor
A new instance of SSLTransport.
-
#method_missing(method_sym, *arguments, &block) ⇒ Object
Forward any methods directly to SSLSocket.
-
#write(s) ⇒ Object
Allow to retry on failed writes.
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
#cert ⇒ Object (readonly)
Returns the value of attribute cert.
23 24 25 |
# File 'lib/sumologic_cloud_syslog/ssl_transport.rb', line 23 def cert @cert end |
#host ⇒ Object (readonly)
Returns the value of attribute host.
23 24 25 |
# File 'lib/sumologic_cloud_syslog/ssl_transport.rb', line 23 def host @host end |
#key ⇒ Object (readonly)
Returns the value of attribute key.
23 24 25 |
# File 'lib/sumologic_cloud_syslog/ssl_transport.rb', line 23 def key @key end |
#port ⇒ Object (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
25 26 27 |
# File 'lib/sumologic_cloud_syslog/ssl_transport.rb', line 25 def retries=(value) @retries = value end |
#socket ⇒ Object
Returns the value of attribute socket.
21 22 23 |
# File 'lib/sumologic_cloud_syslog/ssl_transport.rb', line 21 def socket @socket end |
#ssl_version ⇒ Object (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
#connect ⇒ Object
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_connection ⇒ Object
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 |