shithub: furgit

ref: 1556cfb51d980ae8c5bf664ad69f3abd46f02386
dir: /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')
}