package packet // Length of the fixed header of the PINGRESP Packet const lenPINGRESPFixedHeader = 2 // PINGRESP represents a PINGRESP Packet. type PINGRESP struct { base } // NewPINGRESPFromBytes creates a PINGRESP Packet from // the byte data and returns it. func NewPINGRESPFromBytes(fixedHeader FixedHeader, remaining []byte) (Packet, error) { // Validate the byte data. if err := validatePINGRESPBytes(fixedHeader, remaining); err != nil { return nil, err } // Create a PINGRESP Packet. p := &PINGRESP{} // Set the fixed header to the Packet. p.fixedHeader = fixedHeader // Return the Packet. return p, nil } // validatePINGRESPBytes validates the fixed header and the remaining. func validatePINGRESPBytes(fixedHeader FixedHeader, remaining []byte) error { // Extract the MQTT Control Packet type. ptype, err := fixedHeader.ptype() if err != nil { return err } // Check the length of the fixed header. if len(fixedHeader) != lenPINGRESPFixedHeader { return ErrInvalidFixedHeaderLen } // Check the MQTT Control Packet type. if ptype != TypePINGRESP { return ErrInvalidPacketType } // Check the reserved bits of the fixed header. if fixedHeader[0]<<4 != 0x00 { return ErrInvalidFixedHeader } // Check the Remaining Length of the fixed header. if fixedHeader[1] != 0x00 { return ErrInvalidRemainingLength } // Check the length of the remaining. if len(remaining) != 0 { return ErrInvalidRemainingLen } return nil }