]> git.r.bdr.sh - rbdr/mobius/blobdiff - hotline/tracker.go
Add more file extension -> type/creator code mappings
[rbdr/mobius] / hotline / tracker.go
index e0cbe569eaa3d31eaff9e9e796d00c3b936aa175..4ee192a4ae398f4b1479cc81f88907bde4f8e48a 100644 (file)
@@ -79,12 +79,12 @@ type ServerInfoHeader struct {
 }
 
 type ServerRecord 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
        NameSize        byte   // Length of name string
-       Name            []byte // Server’s name
+       Name            []byte // Server name
        DescriptionSize byte
        Description     []byte
 }
        DescriptionSize byte
        Description     []byte
 }
@@ -165,11 +165,11 @@ func GetListing(addr string) ([]ServerRecord, error) {
 }
 
 func (s *ServerRecord) Read(b []byte) (n int, err 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])
        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)]
        s.Name = b[11 : 11+nameLen]
        s.DescriptionSize = b[11+nameLen]
        s.Description = b[12+nameLen : 12+nameLen+int(s.DescriptionSize)]
@@ -177,14 +177,33 @@ func (s *ServerRecord) Read(b []byte) (n int, err error) {
        return 12 + nameLen + int(s.DescriptionSize), nil
 }
 
        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 {
 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",
        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[:]))),
        )
 }
        )
 }