Class: Baykit::BayServer::Agent::Transporter::SecureTransporter
- Inherits:
-
Transporter
- Object
- Transporter
- Baykit::BayServer::Agent::Transporter::SecureTransporter
- Includes:
- Protocol, OpenSSL
- Defined in:
- lib/baykit/bayserver/agent/transporter/secure_transporter.rb
Instance Attribute Summary collapse
-
#ssl_socket ⇒ Object
readonly
Returns the value of attribute ssl_socket.
-
#sslctx ⇒ Object
readonly
Returns the value of attribute sslctx.
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
- #handshake_nonblock ⇒ Object
- #init(nb_hnd, sip, lis) ⇒ Object
-
#initialize(sslctx, server_mode, bufsize, trace_ssl) ⇒ SecureTransporter
constructor
A new instance of SecureTransporter.
- #read_nonblock ⇒ Object
- #reset ⇒ Object
-
#secure ⇒ Object
Implements Transporter.
- #to_s ⇒ Object
- #write_nonblock(buf, adr) ⇒ Object
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_socket ⇒ Object (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 |
#sslctx ⇒ Object (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_nonblock ⇒ Object
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_nonblock ⇒ Object
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 |
#reset ⇒ Object
29 30 31 32 |
# File 'lib/baykit/bayserver/agent/transporter/secure_transporter.rb', line 29 def reset() super @ssl_socket = nil end |
#secure ⇒ Object
Implements Transporter
42 43 44 |
# File 'lib/baykit/bayserver/agent/transporter/secure_transporter.rb', line 42 def secure() return true end |
#to_s ⇒ Object
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 |