mirror of
https://github.com/mochi-mqtt/server.git
synced 2025-10-28 02:21:28 +08:00
64 lines
1.2 KiB
Go
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
|
|
}
|