PassID [4]byte // Random number generated by the server
Name string // Server Name
Description string // Description of the server
+
+ readOffset int // Internal offset to track read progress
}
// Read implements io.Reader to write tracker registration payload bytes to slice
userCount := make([]byte, 2)
binary.BigEndian.PutUint16(userCount, uint16(tr.UserCount))
- return copy(p, slices.Concat(
+ buf := slices.Concat(
[]byte{0x00, 0x01}, // Magic number, always 1
tr.Port[:],
userCount,
[]byte(tr.Name),
[]byte{uint8(len(tr.Description))},
[]byte(tr.Description),
- )[:]), io.EOF
+ )
+
+ if tr.readOffset >= len(buf) {
+ return 0, io.EOF // All bytes have been read
+ }
+
+ n := copy(p, buf[tr.readOffset:])
+ tr.readOffset += n
+
+ return n, nil
}
func register(tracker string, tr *TrackerRegistration) error {
var servers []ServerRecord
for {
scanner.Scan()
+
var srv ServerRecord
_, err = srv.Write(scanner.Bytes())
if err != nil {