aboutsummaryrefslogtreecommitdiff
path: root/format/pktline/append.go
blob: 9425e58e4e145a578112c177f915cb03a14284c4 (about) (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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')
}