Class: Baykit::BayServer::Agent::Transporter::SecureTransporter

Inherits:
Transporter
  • Object
show all
Includes:
Protocol, OpenSSL
Defined in:
lib/baykit/bayserver/agent/transporter/secure_transporter.rb

Instance Attribute Summary collapse

Attributes inherited from Transporter

#capacity, #ch_valid, #data_listener, #finale, #handshaked, #infile, #initialized, #lock, #non_blocking_handler, #read_buf, #server_mode, #socket_io, #trace_ssl, #write_only, #write_queue

Instance Method Summary collapse

Methods inherited from Transporter

#abort, #check_timeout, #flush, #handshake_finished, #on_closed, #on_connectable, #on_error, #on_readable, #on_writable, #open_valve, #post, #post_end, #zombie?

Methods included from Util::Postman

#abort, #flush, #is_zombie, #open_valve, #post, #post_end

Methods included from ChannelListener

#check_timeout, #on_closed, #on_connectable, #on_error, #on_readable, #on_writable

Constructor Details

#initialize(sslctx, server_mode, bufsize, trace_ssl) ⇒ SecureTransporter

Returns a new instance of SecureTransporter.



17
18
19
20
# File 'lib/baykit/bayserver/agent/transporter/secure_transporter.rb', line 17

def initialize(sslctx, server_mode, bufsize, trace_ssl)
  super(server_mode, bufsize, trace_ssl)
  @sslctx = sslctx
end

Instance Attribute Details

#ssl_socketObject (readonly)

Returns the value of attribute ssl_socket.



15
16
17
# File 'lib/baykit/bayserver/agent/transporter/secure_transporter.rb', line 15

def ssl_socket
  @ssl_socket
end

#sslctxObject (readonly)

Returns the value of attribute sslctx.



14
15
16
# File 'lib/baykit/bayserver/agent/transporter/secure_transporter.rb', line 14

def sslctx
  @sslctx
end

Instance Method Details

#handshake_nonblockObject



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/baykit/bayserver/agent/transporter/secure_transporter.rb', line 46

def handshake_nonblock()
  if @server_mode
    @ssl_socket.accept_nonblock()
  else
    @ssl_socket.connect_nonblock()
  end


  BayLog.debug("%s Handshake done", self)
  app_protocols = @ssl_socket.context.alpn_protocols

  # HELP ME
  #   This code does not work!
  #   We cannot get application protocol name
  proto = nil
  if app_protocols != nil && app_protocols.length > 0
    proto = app_protocols[0]
  end
  @data_listener.notify_handshake_done(proto)
end

#init(nb_hnd, sip, lis) ⇒ Object



23
24
25
26
27
# File 'lib/baykit/bayserver/agent/transporter/secure_transporter.rb', line 23

def init(nb_hnd, sip, lis)
  super
  @ssl_socket = SSL::SSLSocket.new(@ch, @sslctx)
  @handshaked = false
end

#read_nonblockObject



67
68
69
70
# File 'lib/baykit/bayserver/agent/transporter/secure_transporter.rb', line 67

def read_nonblock
  @ssl_socket.read_nonblock(@capacity, @read_buf)
  return nil # client address (for UDP)
end

#resetObject



29
30
31
32
# File 'lib/baykit/bayserver/agent/transporter/secure_transporter.rb', line 29

def reset()
  super
  @ssl_socket = nil
end

#secureObject

Implements Transporter



42
43
44
# File 'lib/baykit/bayserver/agent/transporter/secure_transporter.rb', line 42

def secure()
  return true
end

#to_sObject



34
35
36
# File 'lib/baykit/bayserver/agent/transporter/secure_transporter.rb', line 34

def to_s()
  "stp[#{@data_listener}]"
end

#write_nonblock(buf, adr) ⇒ Object



72
73
74
# File 'lib/baykit/bayserver/agent/transporter/secure_transporter.rb', line 72

def write_nonblock(buf, adr)
  @ssl_socket.write(buf)
end