main pico / pkg / rsync-receiver / rsyncsender / token.go
Eric Bower  ·  2026-05-31
 1package rsyncsender
 2
 3// rsync/token.c:simple_send_token.
 4func (st *Transfer) simpleSendToken(ms *mapStruct, token int32, offset int64, n int64) error {
 5	if n > 0 {
 6		st.Logger.Debug("sending unmatched chunks", "offset", offset, "n", n)
 7		l := int64(0)
 8		for l < n {
 9			n1 := min(int64(chunkSize), n-l)
10
11			chunk := ms.ptr(offset+l, int32(n1))
12
13			if err := st.Conn.WriteInt32(int32(n1)); err != nil {
14				return err
15			}
16
17			if _, err := st.Conn.Writer.Write(chunk); err != nil {
18				return err
19			}
20
21			l += n1
22		}
23	}
24	if token != -2 {
25		return st.Conn.WriteInt32(-(token + 1))
26	}
27	return nil
28}
29
30// rsync/token.c:send_token.
31func (st *Transfer) sendToken(ms *mapStruct, i int32, offset int64, n int64) error {
32	// TODO(compression): send deflated token
33	return st.simpleSendToken(ms, i, offset, n)
34}