}
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
}
func GetListing(addr string) ([]ServerRecord, error) {
conn, err := net.DialTimeout("tcp", addr, trackerTimeout)
+ if err != nil {
+ return []ServerRecord{}, err
+ }
defer func() { _ = conn.Close() }()
_, err = conn.Write(
totalSrv := int(binary.BigEndian.Uint16(info.SrvCount[:]))
srvBuf := buf[14:totalRead]
- totalRead += readLen
var servers []ServerRecord
}
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)]
return 12 + nameLen + int(s.DescriptionSize), nil
}
+//
+//func (s *ServerRecord) UnmarshalBinary(b []byte) (err error) {
+// r := bytes.NewReader(b[:10])
+// if err := binary.Read(r, binary.BigEndian, s); err != nil {
+// return err
+// }
+//
+// copy(s.IPAddr[:], b[0:4])
+// s.Port = b[4:6]
+// s.NumUsers = b[6:8]
+// s.NameSize = b[10]
+// 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)]
+//
+// return nil
+//}
+
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[:]))),
)
}