51 lines
1.2 KiB
Go
51 lines
1.2 KiB
Go
package packets
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
|
|
"github.com/winc-link/hummingbird/internal/pkg/codes"
|
|
)
|
|
|
|
// Pingreq represents the MQTT Pingreq packet
|
|
type Pingreq struct {
|
|
FixHeader *FixHeader
|
|
}
|
|
|
|
func (p *Pingreq) String() string {
|
|
return fmt.Sprintf("Pingreq")
|
|
}
|
|
|
|
// NewPingreqPacket returns a Pingreq instance by the given FixHeader and io.Reader
|
|
func NewPingreqPacket(fh *FixHeader, r io.Reader) (*Pingreq, error) {
|
|
if fh.Flags != FlagReserved {
|
|
return nil, codes.ErrMalformed
|
|
}
|
|
p := &Pingreq{FixHeader: fh}
|
|
err := p.Unpack(r)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return p, nil
|
|
}
|
|
|
|
// NewPingresp returns a Pingresp struct
|
|
func (p *Pingreq) NewPingresp() *Pingresp {
|
|
fh := &FixHeader{PacketType: PINGRESP, Flags: 0, RemainLength: 0}
|
|
return &Pingresp{FixHeader: fh}
|
|
}
|
|
|
|
// Pack encodes the packet struct into bytes and writes it into io.Writer.
|
|
func (p *Pingreq) Pack(w io.Writer) error {
|
|
p.FixHeader = &FixHeader{PacketType: PINGREQ, Flags: 0, RemainLength: 0}
|
|
return p.FixHeader.Pack(w)
|
|
}
|
|
|
|
// Unpack read the packet bytes from io.Reader and decodes it into the packet struct.
|
|
func (p *Pingreq) Unpack(r io.Reader) error {
|
|
if p.FixHeader.RemainLength != 0 {
|
|
return codes.ErrMalformed
|
|
}
|
|
return nil
|
|
}
|