123456789_123456789_123456789_123456789_123456789_

Class: DRb::DRbSSLSocket

Relationships & Source Files
Namespace Children
Classes:
Inherits: DRb::DRbTCPSocket
  • Object
Defined in: lib/drb/ssl.rb

Overview

The protocol for ::DRb over an SSL socket

The URI for a ::DRb socket over SSL is: drbssl://<host>:<port>?<option>. The option is optional

Class Method Summary

Constructor Details

.new(uri, soc, config, is_established) ⇒ DRbSSLSocket

Create a DRbSSLSocket instance.

DRb.uri is the URI we are connected to. soc is the tcp socket we are bound to. DRb.config is our configuration. Either a Hash or DRbSSLSocket::SSLConfig is_established is a boolean of whether soc is currently established

This is called automatically based on the ::DRb protocol.

[ GitHub ]

  
# File 'lib/drb/ssl.rb', line 306

def initialize(uri, soc, config, is_established)
  @ssl = is_established ? soc : nil
  super(uri, soc.to_io, config)
end

Class Method Details

.open(uri, config)

Return an DRbSSLSocket instance as a client-side connection, with the SSL connected. This is called from DRb.start_service or while connecting to a remote object:

DRb.start_service 'drbssl://localhost:0', front, config

DRb.uri is the URI we are connected to, 'drbssl://localhost:0' above, DRb.config is our configuration. Either a Hash or DRbSSLSocket::SSLConfig

[ GitHub ]

  
# File 'lib/drb/ssl.rb', line 249

def self.open(uri, config)
  host, port, = parse_uri(uri)
  host.untaint
  port.untaint
  soc = TCPSocket.open(host, port)
  ssl_conf = SSLConfig::new(config)
  ssl_conf.setup_ssl_context
  ssl = ssl_conf.connect(soc)
  self.new(uri, ssl, ssl_conf, true)
end

.open_server(uri, config)

Returns a DRbSSLSocket instance as a server-side connection, with the SSL connected. This is called from DRb.start_service or while connecting to a remote object:

DRb.start_service 'drbssl://localhost:0', front, config

DRb.uri is the URI we are connected to, 'drbssl://localhost:0' above, DRb.config is our configuration. Either a Hash or DRbSSLSocket::SSLConfig

[ GitHub ]

  
# File 'lib/drb/ssl.rb', line 269

def self.open_server(uri, config)
  uri = 'drbssl://:0' unless uri
  host, port, = parse_uri(uri)
  if host.size == 0
    host = getservername
    soc = open_server_inaddr_any(host, port)
  else
    soc = TCPServer.open(host, port)
  end
  port = soc.addr[1] if port == 0
  @uri = "drbssl://#{host}:#{port}"

  ssl_conf = SSLConfig.new(config)
  ssl_conf.setup_certificate
  ssl_conf.setup_ssl_context
  self.new(@uri, soc, ssl_conf, false)
end