class

XMPP::BoshTransport

Inherits XMPP::Transport / IO / Reference / Object

XEP-0206 / XEP-0124: XMPP over BOSH (HTTP long-polling). Presents a classic XMPP byte stream; Session's writes are queued and flushed inside the HTTP bodies that the read side issues, so a read may carry writes.

Constructors

new(client : HTTP::Client, endpoint : URI, domain : String)
Source
open(config : Config, url : URI | Nil = nil) : BoshTransport
Source

Class methods

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