emqtt_frame (emqtt v1.15.1)

View Source

Summary

Types

cont_fun/0

-type cont_fun() :: fun((binary()) -> parse_result()).

options/0

-type options() :: #{strict_mode => boolean(), max_size => 1..268435455, version => version()}.

packet/0

-type packet() ::
          #mqtt_packet_connect{proto_name :: term(),
                               proto_ver :: term(),
                               is_bridge :: term(),
                               clean_start :: term(),
                               will_flag :: term(),
                               will_qos :: term(),
                               will_retain :: term(),
                               keepalive :: term(),
                               properties :: term(),
                               clientid :: term(),
                               will_props :: term(),
                               will_topic :: term(),
                               will_payload :: term(),
                               username :: term(),
                               password :: term()} |
          #mqtt_packet_connack{ack_flags :: term(), reason_code :: term(), properties :: term()} |
          #mqtt_packet_publish{topic_name :: term(), packet_id :: term(), properties :: term()} |
          #mqtt_packet_puback{packet_id :: term(), reason_code :: term(), properties :: term()} |
          #mqtt_packet_subscribe{packet_id :: term(), properties :: term(), topic_filters :: term()} |
          #mqtt_packet_suback{packet_id :: term(), properties :: term(), reason_codes :: term()} |
          #mqtt_packet_unsubscribe{packet_id :: term(), properties :: term(), topic_filters :: term()} |
          #mqtt_packet_unsuback{packet_id :: term(), properties :: term(), reason_codes :: term()} |
          #mqtt_packet_disconnect{reason_code :: term(), properties :: term()} |
          #mqtt_packet_auth{reason_code :: term(), properties :: term()}.

parse_result/0

-type parse_result() ::
          {more, cont_fun()} |
          {ok,
           #mqtt_packet{header ::
                            #mqtt_packet_header{type :: term(),
                                                dup :: term(),
                                                qos :: term(),
                                                retain :: term()},
                        variable ::
                            #mqtt_packet_connect{proto_name :: term(),
                                                 proto_ver :: term(),
                                                 is_bridge :: term(),
                                                 clean_start :: term(),
                                                 will_flag :: term(),
                                                 will_qos :: term(),
                                                 will_retain :: term(),
                                                 keepalive :: term(),
                                                 properties :: term(),
                                                 clientid :: term(),
                                                 will_props :: term(),
                                                 will_topic :: term(),
                                                 will_payload :: term(),
                                                 username :: term(),
                                                 password :: term()} |
                            #mqtt_packet_connack{ack_flags :: term(),
                                                 reason_code :: term(),
                                                 properties :: term()} |
                            #mqtt_packet_publish{topic_name :: term(),
                                                 packet_id :: term(),
                                                 properties :: term()} |
                            #mqtt_packet_puback{packet_id :: term(),
                                                reason_code :: term(),
                                                properties :: term()} |
                            #mqtt_packet_subscribe{packet_id :: term(),
                                                   properties :: term(),
                                                   topic_filters :: term()} |
                            #mqtt_packet_suback{packet_id :: term(),
                                                properties :: term(),
                                                reason_codes :: term()} |
                            #mqtt_packet_unsubscribe{packet_id :: term(),
                                                     properties :: term(),
                                                     topic_filters :: term()} |
                            #mqtt_packet_unsuback{packet_id :: term(),
                                                  properties :: term(),
                                                  reason_codes :: term()} |
                            #mqtt_packet_disconnect{reason_code :: term(), properties :: term()} |
                            #mqtt_packet_auth{reason_code :: term(), properties :: term()} |
                            pos_integer() |
                            undefined,
                        payload :: binary() | undefined},
           binary(),
           parse_state()}.

parse_state/0

-type parse_state() :: {none, options()} | cont_fun().

serialize_fun/0

-type serialize_fun() :: fun((packet()) -> iodata()).

version/0

-type version() :: 3 | 4 | 5.

Functions

initial_parse_state()

-spec initial_parse_state() -> parse_state().

initial_parse_state(Options)

-spec initial_parse_state(options()) -> parse_state().

parse(Bin)

-spec parse(binary()) -> parse_result().

parse(Bin, Cont)

-spec parse(binary(), parse_state()) -> parse_result().

serialize(Mqtt_packet)

-spec serialize(#mqtt_packet{header ::
                                 #mqtt_packet_header{type :: term(),
                                                     dup :: term(),
                                                     qos :: term(),
                                                     retain :: term()},
                             variable ::
                                 #mqtt_packet_connect{proto_name :: term(),
                                                      proto_ver :: term(),
                                                      is_bridge :: term(),
                                                      clean_start :: term(),
                                                      will_flag :: term(),
                                                      will_qos :: term(),
                                                      will_retain :: term(),
                                                      keepalive :: term(),
                                                      properties :: term(),
                                                      clientid :: term(),
                                                      will_props :: term(),
                                                      will_topic :: term(),
                                                      will_payload :: term(),
                                                      username :: term(),
                                                      password :: term()} |
                                 #mqtt_packet_connack{ack_flags :: term(),
                                                      reason_code :: term(),
                                                      properties :: term()} |
                                 #mqtt_packet_publish{topic_name :: term(),
                                                      packet_id :: term(),
                                                      properties :: term()} |
                                 #mqtt_packet_puback{packet_id :: term(),
                                                     reason_code :: term(),
                                                     properties :: term()} |
                                 #mqtt_packet_subscribe{packet_id :: term(),
                                                        properties :: term(),
                                                        topic_filters :: term()} |
                                 #mqtt_packet_suback{packet_id :: term(),
                                                     properties :: term(),
                                                     reason_codes :: term()} |
                                 #mqtt_packet_unsubscribe{packet_id :: term(),
                                                          properties :: term(),
                                                          topic_filters :: term()} |
                                 #mqtt_packet_unsuback{packet_id :: term(),
                                                       properties :: term(),
                                                       reason_codes :: term()} |
                                 #mqtt_packet_disconnect{reason_code :: term(), properties :: term()} |
                                 #mqtt_packet_auth{reason_code :: term(), properties :: term()} |
                                 pos_integer() |
                                 undefined,
                             payload :: binary() | undefined}) ->
                   iodata().

serialize(Mqtt_packet, Ver)

-spec serialize(#mqtt_packet{header ::
                                 #mqtt_packet_header{type :: term(),
                                                     dup :: term(),
                                                     qos :: term(),
                                                     retain :: term()},
                             variable ::
                                 #mqtt_packet_connect{proto_name :: term(),
                                                      proto_ver :: term(),
                                                      is_bridge :: term(),
                                                      clean_start :: term(),
                                                      will_flag :: term(),
                                                      will_qos :: term(),
                                                      will_retain :: term(),
                                                      keepalive :: term(),
                                                      properties :: term(),
                                                      clientid :: term(),
                                                      will_props :: term(),
                                                      will_topic :: term(),
                                                      will_payload :: term(),
                                                      username :: term(),
                                                      password :: term()} |
                                 #mqtt_packet_connack{ack_flags :: term(),
                                                      reason_code :: term(),
                                                      properties :: term()} |
                                 #mqtt_packet_publish{topic_name :: term(),
                                                      packet_id :: term(),
                                                      properties :: term()} |
                                 #mqtt_packet_puback{packet_id :: term(),
                                                     reason_code :: term(),
                                                     properties :: term()} |
                                 #mqtt_packet_subscribe{packet_id :: term(),
                                                        properties :: term(),
                                                        topic_filters :: term()} |
                                 #mqtt_packet_suback{packet_id :: term(),
                                                     properties :: term(),
                                                     reason_codes :: term()} |
                                 #mqtt_packet_unsubscribe{packet_id :: term(),
                                                          properties :: term(),
                                                          topic_filters :: term()} |
                                 #mqtt_packet_unsuback{packet_id :: term(),
                                                       properties :: term(),
                                                       reason_codes :: term()} |
                                 #mqtt_packet_disconnect{reason_code :: term(), properties :: term()} |
                                 #mqtt_packet_auth{reason_code :: term(), properties :: term()} |
                                 pos_integer() |
                                 undefined,
                             payload :: binary() | undefined},
                version()) ->
                   iodata().

serialize_fun()

serialize_fun(Mqtt_packet_connect)