.. index:: single: mqtt .. _mqtt/0: .. rst-class:: right **object** ``mqtt`` ======== Portable MQTT 5 client predicates using ``http_transport_protocol`` implementations. | **Availability:** | ``logtalk_load(mqtt(loader))`` | **Author:** Paulo Moura | **Version:** 1:0:0 | **Date:** 2026-08-08 | **Compilation flags:** | ``static, context_switching_calls`` | **Imports:** | ``public`` :ref:`options ` | ``public`` :ref:`http_origin_site_helpers ` | **Uses:** | :ref:`byte_order ` | :ref:`list ` | :ref:`type ` | :ref:`url(Representation) ` | :ref:`user ` | **Remarks:** | (none) | **Inherited public predicates:** |  :ref:`options_protocol/0::check_option/1`  :ref:`options_protocol/0::check_options/1`  :ref:`options_protocol/0::default_option/1`  :ref:`options_protocol/0::default_options/1`  :ref:`options_protocol/0::option/2`  :ref:`options_protocol/0::option/3`  :ref:`options_protocol/0::valid_option/1`  :ref:`options_protocol/0::valid_options/1`   .. contents:: :local: :backlinks: top Public predicates ----------------- .. index:: connect/3 .. _mqtt/0::connect/3: ``connect/3`` ^^^^^^^^^^^^^ Opens a transport connection for an MQTT or MQTT-over-TLS address and completes the MQTT CONNECT/CONNACK exchange. | **Compilation flags:** | ``static`` | **Template:** | ``connect(Address,Connection,Options)`` | **Mode and number of proofs:** | ``connect(+atom,--compound,+list)`` - ``one_or_error`` | **Exceptions:** | ``Address`` is a variable: | ``instantiation_error`` | ``Address`` is neither a variable nor an atom: | ``type_error(atom,Address)`` | ``Address`` is an atom but not a valid MQTT address: | ``domain_error(mqtt_address,Address)`` | The server rejects the MQTT connection: | ``domain_error(mqtt_connack_reason_code,ReasonCode)`` | The server response is not a CONNACK packet: | ``domain_error(mqtt_packet,expected(connack,Packet))`` ------------ .. index:: connect/4 .. _mqtt/0::connect/4: ``connect/4`` ^^^^^^^^^^^^^ Opens a transport connection to the given host and port and completes the MQTT CONNECT/CONNACK exchange. The ``scheme/1`` option selects MQTT over TCP or TLS. | **Compilation flags:** | ``static`` | **Template:** | ``connect(Host,Port,Connection,Options)`` | **Mode and number of proofs:** | ``connect(+atom,+integer,--compound,+list)`` - ``one_or_error`` | **Exceptions:** | ``Host`` or ``Port`` is a variable: | ``instantiation_error`` | ``Host`` is neither a variable nor an atom: | ``type_error(atom,Host)`` | ``Port`` is neither a variable nor an integer: | ``type_error(integer,Port)`` | ``Port`` is a negative integer: | ``domain_error(non_negative_integer,Port)`` | The server rejects the MQTT connection: | ``domain_error(mqtt_connack_reason_code,ReasonCode)`` | The server response is not a CONNACK packet: | ``domain_error(mqtt_packet,expected(connack,Packet))`` ------------ .. index:: disconnect/2 .. _mqtt/0::disconnect/2: ``disconnect/2`` ^^^^^^^^^^^^^^^^ Closes an MQTT transport connection. MQTT DISCONNECT packet exchange will be layered on this transport operation. | **Compilation flags:** | ``static`` | **Template:** | ``disconnect(Connection,Options)`` | **Mode and number of proofs:** | ``disconnect(+compound,+list)`` - ``one_or_error`` | **Exceptions:** | ``Options`` is a variable or a partial list: | ``instantiation_error`` | ``Options`` is neither a variable nor a list: | ``type_error(list,Options)`` | An element ``Option`` of the list ``Options`` is not a valid option: | ``domain_error(option,Option)`` ------------ .. index:: connection_alive/1 .. _mqtt/0::connection_alive/1: ``connection_alive/1`` ^^^^^^^^^^^^^^^^^^^^^^ True if the term is an MQTT connection handle created by this object. | **Compilation flags:** | ``static`` | **Template:** | ``connection_alive(Connection)`` | **Mode and number of proofs:** | ``connection_alive(+compound)`` - ``zero_or_one`` ------------ .. index:: packet_type/2 .. _mqtt/0::packet_type/2: ``packet_type/2`` ^^^^^^^^^^^^^^^^^ Table of MQTT control packet type names and numeric codes. | **Compilation flags:** | ``static`` | **Template:** | ``packet_type(Type,Code)`` | **Mode and number of proofs:** | ``packet_type(?atom,?integer)`` - ``zero_or_more`` ------------ .. index:: reason_code/3 .. _mqtt/0::reason_code/3: ``reason_code/3`` ^^^^^^^^^^^^^^^^^ Table of MQTT reason code names and numeric codes by packet type. | **Compilation flags:** | ``static`` | **Template:** | ``reason_code(PacketType,Name,Code)`` | **Mode and number of proofs:** | ``reason_code(?atom,?atom,?integer)`` - ``zero_or_more`` ------------ .. index:: publish/4 .. _mqtt/0::publish/4: ``publish/4`` ^^^^^^^^^^^^^ Publishes a message and waits synchronously for the required MQTT acknowledgement. | **Compilation flags:** | ``static`` | **Template:** | ``publish(Connection,Topic,Payload,Options)`` | **Mode and number of proofs:** | ``publish(+compound,+atom,+term,+list)`` - ``one_or_error`` | **Exceptions:** | ``Topic`` is not a valid MQTT topic name: | ``domain_error(mqtt_topic_name,Topic)`` | ``Options`` contains an invalid packet identifier: | ``domain_error(mqtt_packet_identifier,PacketIdentifier)`` | ``Options`` contains an invalid QoS value: | ``domain_error(mqtt_qos,QoS)`` | The server response is not the expected acknowledgement packet: | ``domain_error(mqtt_packet,expected(Type-PacketIdentifier,Packet))`` ------------ .. index:: subscribe/4 .. _mqtt/0::subscribe/4: ``subscribe/4`` ^^^^^^^^^^^^^^^ Subscribes to topic filters and waits synchronously for the matching SUBACK. | **Compilation flags:** | ``static`` | **Template:** | ``subscribe(Connection,TopicFilters,Result,Options)`` | **Mode and number of proofs:** | ``subscribe(+compound,+list,--list,+list)`` - ``one_or_error`` | **Exceptions:** | ``TopicFilters`` is empty: | ``domain_error(mqtt_subscriptions,[])`` | An element ``TopicFilter`` is not a valid MQTT topic filter: | ``domain_error(mqtt_topic_filter,TopicFilter)`` | ``Options`` contains invalid subscription options: | ``domain_error(mqtt_subscription_options,Byte)`` | The server response is not the expected SUBACK packet: | ``domain_error(mqtt_packet,expected(suback-PacketIdentifier,Packet))`` ------------ .. index:: unsubscribe/4 .. _mqtt/0::unsubscribe/4: ``unsubscribe/4`` ^^^^^^^^^^^^^^^^^ Unsubscribes from topic filters and waits synchronously for the matching UNSUBACK. | **Compilation flags:** | ``static`` | **Template:** | ``unsubscribe(Connection,TopicFilters,Result,Options)`` | **Mode and number of proofs:** | ``unsubscribe(+compound,+list,--list,+list)`` - ``one_or_error`` | **Exceptions:** | ``TopicFilters`` is empty: | ``domain_error(mqtt_topic_filters,[])`` | An element ``TopicFilter`` is not a valid MQTT topic filter: | ``domain_error(mqtt_topic_filter,TopicFilter)`` | The server response is not the expected UNSUBACK packet: | ``domain_error(mqtt_packet,expected(unsuback-PacketIdentifier,Packet))`` ------------ .. index:: receive/3 .. _mqtt/0::receive/3: ``receive/3`` ^^^^^^^^^^^^^ Receives the next MQTT packet. | **Compilation flags:** | ``static`` | **Template:** | ``receive(Connection,Message,Options)`` | **Mode and number of proofs:** | ``receive(+compound,--compound,+list)`` - ``one_or_error`` | **Exceptions:** | The connection input ends before a complete packet is read: | ``domain_error(mqtt_packet_stream,unexpected_end_of_file)`` | The received bytes do not encode a valid MQTT packet: | ``domain_error(mqtt_packet,Packet)`` ------------ .. index:: send_pingreq/1 .. _mqtt/0::send_pingreq/1: ``send_pingreq/1`` ^^^^^^^^^^^^^^^^^^ Sends a PINGREQ packet. | **Compilation flags:** | ``static`` | **Template:** | ``send_pingreq(Connection)`` | **Mode and number of proofs:** | ``send_pingreq(+compound)`` - ``one_or_error`` | **Exceptions:** | The PINGREQ packet cannot be written to the connection output stream: | ``resource_error(mqtt_packet_stream)`` ------------ .. index:: ping/2 .. _mqtt/0::ping/2: ``ping/2`` ^^^^^^^^^^ Sends PINGREQ and waits synchronously for PINGRESP. | **Compilation flags:** | ``static`` | **Template:** | ``ping(Connection,Options)`` | **Mode and number of proofs:** | ``ping(+compound,+list)`` - ``one_or_error`` | **Exceptions:** | The connection input ends before a complete packet is read: | ``domain_error(mqtt_packet_stream,unexpected_end_of_file)`` | The server response is not a PINGRESP packet: | ``domain_error(mqtt_packet,expected(pingresp,Packet))`` ------------ .. index:: encode_packet/2 .. _mqtt/0::encode_packet/2: ``encode_packet/2`` ^^^^^^^^^^^^^^^^^^^ Encodes a normalized MQTT packet term. | **Compilation flags:** | ``static`` | **Template:** | ``encode_packet(Packet,Bytes)`` | **Mode and number of proofs:** | ``encode_packet(+compound,--list(integer))`` - ``one_or_error`` | **Exceptions:** | ``Packet`` contains an invalid MQTT field value: | ``domain_error(mqtt_packet,Packet)`` | ``Packet`` has a packet type that is not yet supported: | ``resource_error(mqtt_packet_support)`` ------------ .. index:: decode_packet/2 .. _mqtt/0::decode_packet/2: ``decode_packet/2`` ^^^^^^^^^^^^^^^^^^^ Decodes bytes into a normalized MQTT packet term. | **Compilation flags:** | ``static`` | **Template:** | ``decode_packet(Bytes,Packet)`` | **Mode and number of proofs:** | ``decode_packet(+list(integer),--compound)`` - ``one_or_error`` | **Exceptions:** | ``Bytes`` contains an invalid MQTT packet encoding: | ``domain_error(mqtt_packet,Bytes)`` | ``Bytes`` contains bytes after the encoded packet: | ``domain_error(mqtt_packet_trailing_bytes,Rest)`` | ``Bytes`` encodes a packet type that is not yet supported: | ``resource_error(mqtt_packet_support)`` ------------ Protected predicates -------------------- (no local declarations; see entity ancestors if any) Private predicates ------------------ .. index:: resolve_address/4 .. _mqtt/0::resolve_address/4: ``resolve_address/4`` ^^^^^^^^^^^^^^^^^^^^^ Resolves an MQTT address into scheme, host, and port. | **Compilation flags:** | ``static`` | **Template:** | ``resolve_address(Address,Scheme,Host,Port)`` | **Mode and number of proofs:** | ``resolve_address(+atom,-atom,-atom,-integer)`` - ``one_or_error`` | **Exceptions:** | ``Address`` is a variable: | ``instantiation_error`` | ``Address`` is neither a variable nor an atom: | ``type_error(atom,Address)`` | ``Address`` is an atom but not a valid MQTT address: | ``domain_error(mqtt_address,Address)`` | ``Address`` contains an invalid authority: | ``domain_error(mqtt_address_authority,Authority)`` ------------ .. index:: resolve_transport/3 .. _mqtt/0::resolve_transport/3: ``resolve_transport/3`` ^^^^^^^^^^^^^^^^^^^^^^^ Resolves an explicit or default transport object for the given MQTT scheme. | **Compilation flags:** | ``static`` | **Template:** | ``resolve_transport(Scheme,Transport0,Transport)`` | **Mode and number of proofs:** | ``resolve_transport(+atom,+object_identifier,-object_identifier)`` - ``one_or_error`` | **Exceptions:** | ``Transport0`` is a variable: | ``instantiation_error`` | ``Transport0`` is neither a variable nor an existing object: | ``existence_error(object,Transport0)`` | ``Transport0`` does not implement ``http_transport_protocol``: | ``domain_error(http_transport_protocol_object,Transport0)`` | ``Transport0`` does not support ``Scheme``: | ``consistency_error(mqtt_options,scheme(Scheme),transport(Transport0))`` ------------ .. index:: append_tls_transport/3 .. _mqtt/0::append_tls_transport/3: ``append_tls_transport/3`` ^^^^^^^^^^^^^^^^^^^^^^^^^^ Adds ``connection_transport(tls)`` to connection options for MQTT-over-TLS unless already specified. | **Compilation flags:** | ``static`` | **Template:** | ``append_tls_transport(Scheme,Options,OptionsWithTransport)`` | **Mode and number of proofs:** | ``append_tls_transport(+atom,+list,-list)`` - ``one_or_error`` ------------ .. index:: write_packet/2 .. _mqtt/0::write_packet/2: ``write_packet/2`` ^^^^^^^^^^^^^^^^^^ Encodes and writes an MQTT packet to a binary output stream. | **Compilation flags:** | ``static`` | **Template:** | ``write_packet(Output,Packet)`` | **Mode and number of proofs:** | ``write_packet(+stream,+compound)`` - ``one_or_error`` | **Exceptions:** | ``Packet`` is not a supported normalized MQTT packet: | ``resource_error(mqtt_packet_support)`` | ``Output`` cannot be written or flushed: | ``resource_error(mqtt_packet_stream)`` ------------ .. index:: read_packet/2 .. _mqtt/0::read_packet/2: ``read_packet/2`` ^^^^^^^^^^^^^^^^^ Reads and decodes one MQTT packet from a binary input stream. | **Compilation flags:** | ``static`` | **Template:** | ``read_packet(Input,Packet)`` | **Mode and number of proofs:** | ``read_packet(+stream,--compound)`` - ``one_or_error`` | **Exceptions:** | ``Input`` ends before a complete packet is read: | ``domain_error(mqtt_packet_stream,unexpected_end_of_file)`` | ``Input`` contains an invalid MQTT packet encoding: | ``domain_error(mqtt_packet,Packet)`` ------------ .. index:: encode_uint8/2 .. _mqtt/0::encode_uint8/2: ``encode_uint8/2`` ^^^^^^^^^^^^^^^^^^ Encodes an unsigned 8-bit integer. | **Compilation flags:** | ``static`` | **Template:** | ``encode_uint8(Value,Bytes)`` | **Mode and number of proofs:** | ``encode_uint8(+integer,-list(integer))`` - ``one_or_error`` | **Exceptions:** | ``Value`` is a variable: | ``instantiation_error`` | ``Value`` is neither a variable nor an integer: | ``type_error(integer,Value)`` | ``Value`` is outside the unsigned 8-bit integer range: | ``domain_error(between(0,255),Value)`` ------------ .. index:: decode_uint8/3 .. _mqtt/0::decode_uint8/3: ``decode_uint8/3`` ^^^^^^^^^^^^^^^^^^ Decodes an unsigned 8-bit integer. | **Compilation flags:** | ``static`` | **Template:** | ``decode_uint8(Bytes,Value,Rest)`` | **Mode and number of proofs:** | ``decode_uint8(+list(integer),-integer,-list(integer))`` - ``one_or_error`` | **Exceptions:** | The first element of ``Bytes`` is not a byte: | ``type_error(byte,Byte)`` ------------ .. index:: encode_uint16/2 .. _mqtt/0::encode_uint16/2: ``encode_uint16/2`` ^^^^^^^^^^^^^^^^^^^ Encodes an unsigned 16-bit integer in network byte order. | **Compilation flags:** | ``static`` | **Template:** | ``encode_uint16(Value,Bytes)`` | **Mode and number of proofs:** | ``encode_uint16(+integer,-list(integer))`` - ``one_or_error`` | **Exceptions:** | ``Value`` is a variable: | ``instantiation_error`` | ``Value`` is neither a variable nor an integer: | ``type_error(integer,Value)`` | ``Value`` is outside the unsigned 16-bit integer range: | ``domain_error(between(0,65535),Value)`` ------------ .. index:: decode_uint16/3 .. _mqtt/0::decode_uint16/3: ``decode_uint16/3`` ^^^^^^^^^^^^^^^^^^^ Decodes an unsigned 16-bit integer in network byte order. | **Compilation flags:** | ``static`` | **Template:** | ``decode_uint16(Bytes,Value,Rest)`` | **Mode and number of proofs:** | ``decode_uint16(+list(integer),-integer,-list(integer))`` - ``one_or_error`` | **Exceptions:** | One of the first two elements of ``Bytes`` is not a byte: | ``type_error(byte,Byte)`` ------------ .. index:: encode_uint32/2 .. _mqtt/0::encode_uint32/2: ``encode_uint32/2`` ^^^^^^^^^^^^^^^^^^^ Encodes an unsigned 32-bit integer in network byte order. | **Compilation flags:** | ``static`` | **Template:** | ``encode_uint32(Value,Bytes)`` | **Mode and number of proofs:** | ``encode_uint32(+integer,-list(integer))`` - ``one_or_error`` | **Exceptions:** | ``Value`` is a variable: | ``instantiation_error`` | ``Value`` is neither a variable nor an integer: | ``type_error(integer,Value)`` | ``Value`` is outside the unsigned 32-bit integer range: | ``domain_error(between(0,4294967295),Value)`` ------------ .. index:: decode_uint32/3 .. _mqtt/0::decode_uint32/3: ``decode_uint32/3`` ^^^^^^^^^^^^^^^^^^^ Decodes an unsigned 32-bit integer in network byte order. | **Compilation flags:** | ``static`` | **Template:** | ``decode_uint32(Bytes,Value,Rest)`` | **Mode and number of proofs:** | ``decode_uint32(+list(integer),-integer,-list(integer))`` - ``one_or_error`` | **Exceptions:** | One of the first four elements of ``Bytes`` is not a byte: | ``type_error(byte,Byte)`` ------------ .. index:: encode_varint/2 .. _mqtt/0::encode_varint/2: ``encode_varint/2`` ^^^^^^^^^^^^^^^^^^^ Encodes an MQTT variable byte integer. | **Compilation flags:** | ``static`` | **Template:** | ``encode_varint(Value,Bytes)`` | **Mode and number of proofs:** | ``encode_varint(+integer,-list(integer))`` - ``one_or_error`` | **Exceptions:** | ``Value`` is a variable: | ``instantiation_error`` | ``Value`` is neither a variable nor an integer: | ``type_error(integer,Value)`` | ``Value`` is outside the MQTT variable byte integer range: | ``domain_error(between(0,268435455),Value)`` ------------ .. index:: decode_varint/3 .. _mqtt/0::decode_varint/3: ``decode_varint/3`` ^^^^^^^^^^^^^^^^^^^ Decodes an MQTT variable byte integer, rejecting non-minimal encodings and overflows. | **Compilation flags:** | ``static`` | **Template:** | ``decode_varint(Bytes,Value,Rest)`` | **Mode and number of proofs:** | ``decode_varint(+list(integer),-integer,-list(integer))`` - ``one_or_error`` | **Exceptions:** | ``Bytes`` does not start with a valid, minimally encoded MQTT variable byte integer: | ``domain_error(mqtt_variable_byte_integer,Consumed)`` ------------ .. index:: encode_utf8_string/2 .. _mqtt/0::encode_utf8_string/2: ``encode_utf8_string/2`` ^^^^^^^^^^^^^^^^^^^^^^^^ Encodes an MQTT UTF-8 encoded string with a two-byte length prefix. | **Compilation flags:** | ``static`` | **Template:** | ``encode_utf8_string(String,Bytes)`` | **Mode and number of proofs:** | ``encode_utf8_string(+atom,-list(integer))`` - ``one_or_error`` | **Exceptions:** | ``String`` is a variable: | ``instantiation_error`` | ``String`` is neither a variable nor atom: | ``type_error(atom,String)`` | ``String`` is not a valid MQTT UTF-8 string: | ``domain_error(mqtt_utf8_string,Codes)`` ------------ .. index:: decode_utf8_string/3 .. _mqtt/0::decode_utf8_string/3: ``decode_utf8_string/3`` ^^^^^^^^^^^^^^^^^^^^^^^^ Decodes an MQTT UTF-8 encoded string with a two-byte length prefix. | **Compilation flags:** | ``static`` | **Template:** | ``decode_utf8_string(Bytes,String,Rest)`` | **Mode and number of proofs:** | ``decode_utf8_string(+list(integer),-atom,-list(integer))`` - ``one_or_error`` | **Exceptions:** | ``Bytes`` does not start with a valid MQTT UTF-8 string: | ``domain_error(mqtt_utf8_string,Codes)`` ------------ .. index:: encode_binary_data/2 .. _mqtt/0::encode_binary_data/2: ``encode_binary_data/2`` ^^^^^^^^^^^^^^^^^^^^^^^^ Encodes MQTT binary data with a two-byte length prefix. | **Compilation flags:** | ``static`` | **Template:** | ``encode_binary_data(Data,Bytes)`` | **Mode and number of proofs:** | ``encode_binary_data(+list(integer),-list(integer))`` - ``one_or_error`` | **Exceptions:** | ``Data`` is not a list of bytes: | ``type_error(list(byte),Data)`` | ``Data`` is longer than 65535 bytes: | ``domain_error(between(0,65535),Length)`` ------------ .. index:: decode_binary_data/3 .. _mqtt/0::decode_binary_data/3: ``decode_binary_data/3`` ^^^^^^^^^^^^^^^^^^^^^^^^ Decodes MQTT binary data with a two-byte length prefix. | **Compilation flags:** | ``static`` | **Template:** | ``decode_binary_data(Bytes,Data,Rest)`` | **Mode and number of proofs:** | ``decode_binary_data(+list(integer),-list(integer),-list(integer))`` - ``one_or_error`` | **Exceptions:** | The first two elements of ``Bytes`` do not encode a valid length: | ``type_error(byte,Byte)`` ------------ .. index:: encode_utf8_string_pair/2 .. _mqtt/0::encode_utf8_string_pair/2: ``encode_utf8_string_pair/2`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Encodes an MQTT UTF-8 string pair as two MQTT UTF-8 encoded strings. | **Compilation flags:** | ``static`` | **Template:** | ``encode_utf8_string_pair(Pair,Bytes)`` | **Mode and number of proofs:** | ``encode_utf8_string_pair(+compound,-list(integer))`` - ``one_or_error`` | **Exceptions:** | An element of ``Pair`` is not an atom: | ``type_error(atom,String)`` | An element of ``Pair`` is not a valid MQTT UTF-8 string: | ``domain_error(mqtt_utf8_string,Codes)`` ------------ .. index:: decode_utf8_string_pair/3 .. _mqtt/0::decode_utf8_string_pair/3: ``decode_utf8_string_pair/3`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Decodes an MQTT UTF-8 string pair from two MQTT UTF-8 encoded strings. | **Compilation flags:** | ``static`` | **Template:** | ``decode_utf8_string_pair(Bytes,Pair,Rest)`` | **Mode and number of proofs:** | ``decode_utf8_string_pair(+list(integer),-compound,-list(integer))`` - ``one_or_error`` | **Exceptions:** | ``Bytes`` does not start with two valid MQTT UTF-8 strings: | ``domain_error(mqtt_utf8_string,Codes)`` ------------ .. index:: encode_properties/2 .. _mqtt/0::encode_properties/2: ``encode_properties/2`` ^^^^^^^^^^^^^^^^^^^^^^^ Encodes an MQTT property list with its variable byte integer length prefix. | **Compilation flags:** | ``static`` | **Template:** | ``encode_properties(Properties,Bytes)`` | **Mode and number of proofs:** | ``encode_properties(+list,-list(integer))`` - ``one_or_error`` | **Exceptions:** | ``Properties`` is a variable or a partial list: | ``instantiation_error`` | ``Properties`` is neither a variable nor a list: | ``type_error(list,Properties)`` | An element ``Property`` is not a supported MQTT property: | ``domain_error(mqtt_property,Property)`` ------------ .. index:: decode_properties/3 .. _mqtt/0::decode_properties/3: ``decode_properties/3`` ^^^^^^^^^^^^^^^^^^^^^^^ Decodes an MQTT property list and returns the remaining packet bytes. | **Compilation flags:** | ``static`` | **Template:** | ``decode_properties(Bytes,Properties,Rest)`` | **Mode and number of proofs:** | ``decode_properties(+list(integer),-list,-list(integer))`` - ``one_or_error`` | **Exceptions:** | ``Bytes`` does not contain the declared property bytes: | ``domain_error(mqtt_properties,Bytes)`` | ``Bytes`` contains an unknown property identifier: | ``domain_error(mqtt_property_identifier,Identifier)`` ------------ .. index:: encode_property_list/2 .. _mqtt/0::encode_property_list/2: ``encode_property_list/2`` ^^^^^^^^^^^^^^^^^^^^^^^^^^ Encodes MQTT properties without the property length prefix. | **Compilation flags:** | ``static`` | **Template:** | ``encode_property_list(Properties,Bytes)`` | **Mode and number of proofs:** | ``encode_property_list(+list,-list(integer))`` - ``one_or_error`` | **Exceptions:** | An element ``Property`` is not a supported MQTT property: | ``domain_error(mqtt_property,Property)`` ------------ .. index:: decode_property_list/2 .. _mqtt/0::decode_property_list/2: ``decode_property_list/2`` ^^^^^^^^^^^^^^^^^^^^^^^^^^ Decodes MQTT properties from a property body byte list. | **Compilation flags:** | ``static`` | **Template:** | ``decode_property_list(Bytes,Properties)`` | **Mode and number of proofs:** | ``decode_property_list(+list(integer),-list)`` - ``one_or_error`` | **Exceptions:** | ``Bytes`` contains an unknown property identifier: | ``domain_error(mqtt_property_identifier,Identifier)`` ------------ .. index:: encode_property/2 .. _mqtt/0::encode_property/2: ``encode_property/2`` ^^^^^^^^^^^^^^^^^^^^^ Encodes a single MQTT property. | **Compilation flags:** | ``static`` | **Template:** | ``encode_property(Property,Bytes)`` | **Mode and number of proofs:** | ``encode_property(+compound,-list(integer))`` - ``one_or_error`` | **Exceptions:** | ``Property`` is not a supported MQTT property: | ``domain_error(mqtt_property,Property)`` | ``Property`` contains an invalid value: | ``domain_error(mqtt_property_value,Name-Value)`` ------------ .. index:: decode_property/3 .. _mqtt/0::decode_property/3: ``decode_property/3`` ^^^^^^^^^^^^^^^^^^^^^ Decodes a single MQTT property. | **Compilation flags:** | ``static`` | **Template:** | ``decode_property(Bytes,Property,Rest)`` | **Mode and number of proofs:** | ``decode_property(+list(integer),-compound,-list(integer))`` - ``one_or_error`` | **Exceptions:** | ``Bytes`` starts with an unknown property identifier: | ``domain_error(mqtt_property_identifier,Identifier)`` | ``Bytes`` contains an invalid property value: | ``domain_error(mqtt_property_value,Name-Value)`` ------------ .. index:: mqtt_property/3 .. _mqtt/0::mqtt_property/3: ``mqtt_property/3`` ^^^^^^^^^^^^^^^^^^^ Table of MQTT property names, identifiers, and value types. | **Compilation flags:** | ``static`` | **Template:** | ``mqtt_property(Name,Identifier,Type)`` | **Mode and number of proofs:** | ``mqtt_property(?atom,?integer,?atom)`` - ``zero_or_more`` ------------ .. index:: encode_fixed_header/4 .. _mqtt/0::encode_fixed_header/4: ``encode_fixed_header/4`` ^^^^^^^^^^^^^^^^^^^^^^^^^ Encodes an MQTT fixed header from packet type, flags, and remaining length. | **Compilation flags:** | ``static`` | **Template:** | ``encode_fixed_header(Type,Flags,RemainingLength,Bytes)`` | **Mode and number of proofs:** | ``encode_fixed_header(+atom,+integer,+integer,-list(integer))`` - ``one_or_error`` | **Exceptions:** | ``Type`` is not a supported MQTT packet type: | ``domain_error(mqtt_packet_type,Type)`` | ``Flags`` is invalid for ``Type``: | ``domain_error(mqtt_fixed_header_flags,Type-Flags)`` | ``RemainingLength`` is outside the MQTT variable byte integer range: | ``domain_error(between(0,268435455),RemainingLength)`` ------------ .. index:: decode_fixed_header/5 .. _mqtt/0::decode_fixed_header/5: ``decode_fixed_header/5`` ^^^^^^^^^^^^^^^^^^^^^^^^^ Decodes an MQTT fixed header into packet type, flags, remaining length, and remaining bytes. | **Compilation flags:** | ``static`` | **Template:** | ``decode_fixed_header(Bytes,Type,Flags,RemainingLength,Rest)`` | **Mode and number of proofs:** | ``decode_fixed_header(+list(integer),-atom,-integer,-integer,-list(integer))`` - ``one_or_error`` | **Exceptions:** | ``Bytes`` starts with an unsupported MQTT packet type: | ``domain_error(mqtt_packet_type,Code)`` | ``Bytes`` contains invalid fixed header flags: | ``domain_error(mqtt_fixed_header_flags,Type-Flags)`` | ``Bytes`` contains an invalid MQTT variable byte integer: | ``domain_error(mqtt_variable_byte_integer,Consumed)`` ------------ Operators --------- (none)