X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/9004987d8ec11b788f972e6764f875f2d873cfd6..69c2fb504953cf8de3730b2f64cfa8d7b6b13859:/hotline/tracker.go diff --git a/hotline/tracker.go b/hotline/tracker.go index e0cbe56..63fb279 100644 --- a/hotline/tracker.go +++ b/hotline/tracker.go @@ -12,11 +12,11 @@ import ( ) type TrackerRegistration struct { - Port []byte // Server listening port number - UserCount int // Number of users connected to this particular server - PassID []byte // Random number generated by the server - Name string // Server name - Description string // Description of the server + Port [2]byte // Server listening port number + UserCount int // Number of users connected to this particular server + PassID []byte // Random number generated by the server + Name string // Server name + Description string // Description of the server } func (tr *TrackerRegistration) Payload() []byte { @@ -25,7 +25,7 @@ func (tr *TrackerRegistration) Payload() []byte { return concat.Slices( []byte{0x00, 0x01}, - tr.Port, + tr.Port[:], userCount, []byte{0x00, 0x00}, tr.PassID, @@ -36,7 +36,7 @@ func (tr *TrackerRegistration) Payload() []byte { ) } -func register(tracker string, tr TrackerRegistration) error { +func register(tracker string, tr *TrackerRegistration) error { conn, err := net.Dial("udp", tracker) if err != nil { return err @@ -49,9 +49,6 @@ func register(tracker string, tr TrackerRegistration) error { return nil } -type ServerListing struct { -} - const trackerTimeout = 5 * time.Second // All string values use 8-bit ASCII character set encoding. @@ -67,10 +64,10 @@ type TrackerHeader struct { Version [2]byte // Old protocol (1) or new (2) } -//Message type 2 1 Sending list of servers -//Message data size 2 Remaining size of this request -//Number of servers 2 Number of servers in the server list -//Number of servers 2 Same as previous field +// Message type 2 1 Sending list of servers +// Message data size 2 Remaining size of this request +// Number of servers 2 Number of servers in the server list +// Number of servers 2 Same as previous field type ServerInfoHeader struct { MsgType [2]byte // always has value of 1 MsgDataSize [2]byte // Remaining size of request @@ -79,12 +76,12 @@ type ServerInfoHeader struct { } type ServerRecord struct { - IPAddr []byte - Port []byte - NumUsers []byte // Number of users connected to this particular server - Unused []byte + IPAddr [4]byte + Port [2]byte + NumUsers [2]byte // Number of users connected to this particular server + Unused [2]byte NameSize byte // Length of name string - Name []byte // Server’s name + Name []byte // Server name DescriptionSize byte Description []byte } @@ -165,11 +162,11 @@ func GetListing(addr string) ([]ServerRecord, error) { } func (s *ServerRecord) Read(b []byte) (n int, err error) { - s.IPAddr = b[0:4] - s.Port = b[4:6] - s.NumUsers = b[6:8] - s.NameSize = b[10] + copy(s.IPAddr[:], b[0:4]) + copy(s.Port[:], b[4:6]) + copy(s.NumUsers[:], b[6:8]) nameLen := int(b[10]) + s.Name = b[11 : 11+nameLen] s.DescriptionSize = b[11+nameLen] s.Description = b[12+nameLen : 12+nameLen+int(s.DescriptionSize)] @@ -178,13 +175,13 @@ func (s *ServerRecord) Read(b []byte) (n int, err error) { } func (s *ServerRecord) PortInt() int { - data := binary.BigEndian.Uint16(s.Port) + data := binary.BigEndian.Uint16(s.Port[:]) return int(data) } func (s *ServerRecord) Addr() string { return fmt.Sprintf("%s:%s", - net.IP(s.IPAddr), - strconv.Itoa(int(binary.BigEndian.Uint16(s.Port))), + net.IP(s.IPAddr[:]), + strconv.Itoa(int(binary.BigEndian.Uint16(s.Port[:]))), ) }