aboutsummaryrefslogtreecommitdiff
path: root/format/pktline/append.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-06 13:01:12 +0800
committerGravatar Runxi Yu2026-03-06 13:57:57 +0800
commit3307715a8d8bdeac1b2d7df66ec2abb6e503ba9a (patch)
tree4505d11668a6160aa0b04f38811f7a0a721b5db0 /format/pktline/append.go
parent*: go fix ./... (diff)
signatureNo signature
format/pktline: Add pktline v0.1.62
Diffstat (limited to 'format/pktline/append.go')
-rw-r--r--format/pktline/append.go39
1 files changed, 39 insertions, 0 deletions
diff --git a/format/pktline/append.go b/format/pktline/append.go
new file mode 100644
index 00000000..9425e58e
--- /dev/null
+++ b/format/pktline/append.go
@@ -0,0 +1,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')
+}