Files
mochi-mqtt/packets/connack.go
2019-09-22 15:11:02 +01:00

64 lines
1.2 KiB
Go

package packets
import (
"bytes"
"errors"
"io"
)
// ConnackPacket contains the values of an MQTT CONNACK packet.
type ConnackPacket struct {
FixedHeader
SessionPresent bool
ReturnCode byte
}
// Encode encodes and writes the packet data values to the buffer.
func (pk *ConnackPacket) Encode(w io.Writer) error {
var body bytes.Buffer
// Write flags to packet body.
body.WriteByte(encodeBool(pk.SessionPresent))
body.WriteByte(pk.ReturnCode)
// Increase remaining length.
pk.FixedHeader.Remaining = 2
// Write header and packet to output.
out := pk.FixedHeader.encode()
out.Write(body.Bytes())
_, err := out.WriteTo(w)
return err
}
// Decode extracts the data values from the packet.
func (pk *ConnackPacket) Decode(buf []byte) error {
var offset int
var err error
// Unpack session present flag.
pk.SessionPresent, offset, err = decodeByteBool(buf, 0)
if err != nil {
return errors.New(ErrMalformedSessionPresent)
}
// Unpack return code.
pk.ReturnCode, offset, err = decodeByte(buf, offset)
if err != nil {
return errors.New(ErrMalformedReturnCode)
}
return nil
}
// Validate ensures the packet is compliant.
func (pk *ConnackPacket) Validate() (byte, error) {
return Accepted, nil
}