aboutsummaryrefslogtreecommitdiff
path: root/network/protocol/sideband64k/append.go
blob: db6527f8789df5d53475053c98cf6e936c7cc249 (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
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)
}