X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/d9bc63a10d0978d9a5222cf7be74044e55f409b7..ba201a220aa723f98c6a81d74dc4229bf89b282a:/hotline/tracker.go diff --git a/hotline/tracker.go b/hotline/tracker.go index 2d655d9..52963bf 100644 --- a/hotline/tracker.go +++ b/hotline/tracker.go @@ -18,6 +18,7 @@ type TrackerRegistration struct { PassID [4]byte // Random number generated by the server Name string // Server Name Description string // Description of the server + Password string // Tracker password, if required by tracker readOffset int // Internal offset to track read progress } @@ -37,6 +38,8 @@ func (tr *TrackerRegistration) Read(p []byte) (int, error) { []byte(tr.Name), []byte{uint8(len(tr.Description))}, []byte(tr.Description), + []byte{uint8(len(tr.Password))}, + []byte(tr.Password), ) if tr.readOffset >= len(buf) { @@ -139,8 +142,13 @@ func GetListing(conn io.ReadWriteCloser) ([]ServerRecord, error) { for { scanner.Scan() + // Make a new []byte slice and copy the scanner bytes to it. This is critical as the + // scanner re-uses the buffer for subsequent scans. + buf := make([]byte, len(scanner.Bytes())) + copy(buf, scanner.Bytes()) + var srv ServerRecord - _, err = srv.Write(scanner.Bytes()) + _, err = srv.Write(buf) if err != nil { return nil, err }