shithub: furgit

ref: fb9eb058f1c9b7cb26f33bbe679a85f530566641
dir: /network/protocol/pktline/append.go/

View raw version
package pktline

import "fmt"

// AppendData appends one data frame to dst.
//
// Empty payload is encoded as 0004.
func AppendData(dst, payload []byte) ([]byte, error) {
	if len(payload) > LargePacketDataMax {
		return dst, fmt.Errorf("%w: %d > %d", ErrTooLarge, len(payload), LargePacketDataMax)
	}

	var hdr [4]byte

	err := EncodeLengthHeader(&hdr, len(payload)+4)
	if err != nil {
		return dst, err
	}

	dst = append(dst, hdr[:]...)
	dst = append(dst, payload...)

	return dst, nil
}

// AppendFlushPkt appends control frame 0000 (flush-pkt).
func AppendFlushPkt(dst []byte) []byte {
	return append(dst, '0', '0', '0', '0')
}

// AppendDelimPkt appends control frame 0001 (delim-pkt).
func AppendDelimPkt(dst []byte) []byte {
	return append(dst, '0', '0', '0', '1')
}

// AppendResponseEndPkt appends control frame 0002 (response-end-pkt).
func AppendResponseEndPkt(dst []byte) []byte {
	return append(dst, '0', '0', '0', '2')
}