aboutsummaryrefslogtreecommitdiff
path: root/network/protocol/sideband64k/append.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-25 16:22:03 +0000
committerGravatar Runxi Yu2026-03-25 16:22:03 +0000
commit311edcd50f3a84f4b860bde3cb887451d74eaa11 (patch)
treebe7aa5e9a51e636358f33b1c90637b5024b70dc3 /network/protocol/sideband64k/append.go
parentREADME: Split off contrib, benchmarks, remove history for now I guess, etc. (diff)
signatureNo signature
network/protocol: Rename from protocol v0.1.110
Diffstat (limited to 'network/protocol/sideband64k/append.go')
-rw-r--r--network/protocol/sideband64k/append.go40
1 files changed, 40 insertions, 0 deletions
diff --git a/network/protocol/sideband64k/append.go b/network/protocol/sideband64k/append.go
new file mode 100644
index 00000000..db6527f8
--- /dev/null
+++ b/network/protocol/sideband64k/append.go
@@ -0,0 +1,40 @@
+package sideband64k
+
+import (
+ "fmt"
+
+ "codeberg.org/lindenii/furgit/network/protocol/pktline"
+)
+
+// AppendBand appends one side-band-64k data frame to dst.
+func AppendBand(dst []byte, band Band, payload []byte) ([]byte, error) {
+ if !validBand(band) {
+ return dst, fmt.Errorf("%w: %d", ErrInvalidBand, band)
+ }
+
+ maxData := effectiveMaxData(DataMax)
+ if len(payload) > maxData {
+ return dst, fmt.Errorf("%w: %d > %d", ErrTooLarge, len(payload), maxData)
+ }
+
+ framed := make([]byte, len(payload)+1)
+ framed[0] = byte(band)
+ copy(framed[1:], payload)
+
+ return pktline.AppendData(dst, framed)
+}
+
+// AppendData appends one band-1 data frame to dst.
+func AppendData(dst, payload []byte) ([]byte, error) {
+ return AppendBand(dst, BandData, payload)
+}
+
+// AppendProgress appends one band-2 progress frame to dst.
+func AppendProgress(dst, payload []byte) ([]byte, error) {
+ return AppendBand(dst, BandProgress, payload)
+}
+
+// AppendError appends one band-3 error frame to dst.
+func AppendError(dst, payload []byte) ([]byte, error) {
+ return AppendBand(dst, BandError, payload)
+}