XMLWordPrintable

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: core
    • Labels:
      None
    • Proposal:
      Hide

      1. >>NO CHANGE REQUIRED<< Yes a WILL Message is sent, see:
      If the Will Flag is set to 1 this indicates that a Will Message MUST be stored and subsequently published when the Network Connection is closed unless the Will Message has been deleted by the Server on receipt of a DISCONNECT Packet [MQTT-3.1.2-8].

      The spec calls out explicit cases where connection should be closed where we believe their are inconsistencies between implementations in the field, other we rely on the "catch all" statement.

      2. >> CHANGE << Add clause for "UNSUBSCRIBE packet MUST contain at least one Topic Filter. An UNSUBSCRIBE packet with no payload is a protocol violation." to match requirement for SUBSCRIBE

      3. >> CHANGE << Update clause to "ClientId MUST be a UTF-8 encoded string as defined in Section 1.5.3.

      4. >> CHANGE << add definition for Transient Error "A Client or Server implementation might encounter a Transient Error (for example an internal buffer full condition) that prevents successful processing of an MQTT packet"

      5. >> CHANGE << switch LSB to MSB for byte 2 in Section 3.8.3.1

      6. >> CHANGE << switch LSB to MSB for byte 2 in Section 3.10.2.2

      Show
      1. >>NO CHANGE REQUIRED<< Yes a WILL Message is sent, see: If the Will Flag is set to 1 this indicates that a Will Message MUST be stored and subsequently published when the Network Connection is closed unless the Will Message has been deleted by the Server on receipt of a DISCONNECT Packet [MQTT-3.1.2-8] . The spec calls out explicit cases where connection should be closed where we believe their are inconsistencies between implementations in the field, other we rely on the "catch all" statement. 2. >> CHANGE << Add clause for "UNSUBSCRIBE packet MUST contain at least one Topic Filter. An UNSUBSCRIBE packet with no payload is a protocol violation." to match requirement for SUBSCRIBE 3. >> CHANGE << Update clause to "ClientId MUST be a UTF-8 encoded string as defined in Section 1.5.3. 4. >> CHANGE << add definition for Transient Error "A Client or Server implementation might encounter a Transient Error (for example an internal buffer full condition) that prevents successful processing of an MQTT packet" 5. >> CHANGE << switch LSB to MSB for byte 2 in Section 3.8.3.1 6. >> CHANGE << switch LSB to MSB for byte 2 in Section 3.10.2.2
    • Resolution:
      Hide

      Resolved in WD22

      Show
      Resolved in WD22

      Description

      1 - [MQTT-2.0.0-1] "Unless stated otherwise, if either the Server or Client receives a Control Packet which does not meet this specification, it MUST close the Network Connection"

      Should the server publish Will message in this case?

      Also,what confuses me is the fact that for some cases the spec explicitly says that the server should close the connection (invalid flags in packet header, non-zero Reserved bits in payload of SUBSCRIBE Control packet) but not for others (zero packet identifier, invalid Topic Filter in SUBSCRIBE or UNSUBSCRIBE Control Packet, invalid Topic Name in PUBLISH Control Packet, non-zero length payload for DISCONNECT Control Packet, etc.).

      2 - [MQTT-3.8.3-1] The Payload of a SUBSCRIBE packet MUST contain at least one Topic Filter / QoS pair. A SUBSCRIBE packet with no payload is a protocol violation.

      There is no similar requirement for UNSUBSCRIBE Control packet. Is this by design? What is the rationale for this requirement/assymetry?

      3 - [MQTT-3.1.3-4] The ClientId MUST comprise only Unicode [Unicode63] characters, and the length of the UTF-8 encoding MUST be at least zero bytes and no more than 65535 bytes.

      It sound a bit strange to require that the string must be at least zero bytes. Every UTF-8 encoding meets this requirement.

      4 - What is meant by transient error and what is the difference among transient error (4.8) protocol error (section 3.1.2.5) and protocol violation (3.1)?

      5 - In section 3.8.3.1, Description in the table should read LSB for byte 2 and byte 8, rather than MSB.

      6 - In section 3.10.2.2, Description in the table should read LSB for byte 2 and byte 7, rather than MSB.

        Attachments

          Activity

            People

            • Assignee:
              Andrew_Banks Andrew Banks
              Reporter:
              coppen Richard Coppen
            • Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: