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')
}
|