class
XMPP::TcpTransport
- XMPP::TcpTransport
- XMPP::Transport
- IO
- Reference
- Object
Overview
Classic RFC 6120 client transport over TCP. STARTTLS is negotiated by
Session on top of this transport; XEP-0368 direct TLS is pre-wrapped
here (mirroring the previous Client#open_socket behavior).
Defined in:
xmpp/transport/tcp.crConstructors
- .new(socket : TCPSocket, tls_socket : OpenSSL::SSL::Socket::Client | Nil = nil)
- .open(config : Config) : TcpTransport
Instance Method Summary
-
#close
Closes this
IO. -
#closed? : Bool
Returns
trueif thisIOis closed. -
#encrypted? : Bool
True when TLS is already handled at or below this transport, so the session must not attempt a STARTTLS upgrade.
-
#read(slice : Bytes) : Int32
Reads at most slice.size bytes from this
IOinto slice. - #socket : TCPSocket
-
#supports_starttls? : Bool
Whether the session must negotiate a STARTTLS upgrade on this transport before authentication.
-
#tls_socket : OpenSSL::SSL::Socket::Client | Nil
The underlying TLS socket when the transport opened one directly (XEP-0368 direct TLS).
-
#write(slice : Bytes) : Nil
Writes the contents of slice into this
IO.
Instance methods inherited from class XMPP::Transport
encrypted? : Bool
encrypted?,
supports_starttls? : Bool
supports_starttls?,
tls_socket : OpenSSL::SSL::Socket::Client | Nil
tls_socket
Constructor methods inherited from class XMPP::Transport
connect(config : Config) : Transport
connect
Class methods inherited from class XMPP::Transport
classify_outbound(data : String) : Symbol
classify_outbound,
extract_attribute(xml : String, name : String) : String | Nil
extract_attribute
Constructor Detail
Instance Method Detail
Closes this IO.
IO defines this is a no-op method, but including types may override.
Returns true if this IO is closed.
IO defines returns false, but including types may override.
True when TLS is already handled at or below this transport, so the session must not attempt a STARTTLS upgrade.
Reads at most slice.size bytes from this IO into slice.
Returns the number of bytes read, which is 0 if and only if there is no
more data to read (so checking for 0 is the way to detect end of file).
io = IO::Memory.new "hello"
slice = Bytes.new(4)
io.read(slice) # => 4
slice # => Bytes[104, 101, 108, 108]
io.read(slice) # => 1
slice # => Bytes[111, 101, 108, 108]
io.read(slice) # => 0
Whether the session must negotiate a STARTTLS upgrade on this transport before authentication. Only a plaintext TCP stream does; WebSocket and BOSH transports have no STARTTLS (their security is fixed at connection time by ws/wss or http/https), so the RFC 7590 anti-stripping attempt must not run against them.
The underlying TLS socket when the transport opened one directly (XEP-0368 direct TLS). Nil for plaintext, STARTTLS-managed, WebSocket, and BOSH transports.
Writes the contents of slice into this IO.
io = IO::Memory.new
slice = Bytes.new(4) { |i| ('a'.ord + i).to_u8 }
io.write(slice)
io.to_s # => "abcd"