class

XMPP::WebSocketTransport

Inherits XMPP::Transport / IO / Reference / Object

RFC 7395: XMPP over WebSocket. Presents a classic XMPP byte stream to Session while translating stream headers to <open/>/<close/> framing elements and sending whitespace keepalives as WebSocket PING frames.

Constructors

new(ws : HTTP::WebSocket, domain : String, encrypted : Bool)
Source
open(config : Config, url : URI | Nil = nil) : WebSocketTransport
Source

Class methods

open_socket(url : URI, config : Config) : HTTP::WebSocket
Source
resolve_url(config : Config, url : URI | Nil = nil) : URI
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
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