class

XMPP::TcpTransport

Inherits XMPP::Transport / IO / Reference / Object

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).

Constructors

new(socket : TCPSocket, tls_socket : OpenSSL::SSL::Socket::Client | Nil = nil)
Source
open(config : Config) : TcpTransport
Source

Instance methods

close

Closes this IO.

IO defines this is a no-op method, but including types may override.

Source
closed?

Returns true if this IO is closed.

IO defines returns false, but including types may override.

Source
encrypted?

True when TLS is already handled at or below this transport, so the session must not attempt a STARTTLS upgrade.

Source
read(slice : Bytes) : Int32

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
Source
socket
Source
supports_starttls?

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.

Source
tls_socket

The underlying TLS socket when the transport opened one directly (XEP-0368 direct TLS). Nil for plaintext, STARTTLS-managed, WebSocket, and BOSH transports.

Source
write(slice : Bytes) : Nil

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"
Source