aboutsummaryrefslogtreecommitdiff
path: root/pkg/packets/packets.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/packets/packets.go')
-rw-r--r--pkg/packets/packets.go57
1 files changed, 32 insertions, 25 deletions
diff --git a/pkg/packets/packets.go b/pkg/packets/packets.go
index a84da21..fd5a14b 100644
--- a/pkg/packets/packets.go
+++ b/pkg/packets/packets.go
@@ -1,8 +1,6 @@
1package packets 1package packets
2 2
3import ( 3import (
4 "bytes"
5
6 "github.com/pektezol/bitreader" 4 "github.com/pektezol/bitreader"
7 "github.com/pektezol/demoparser/pkg/classes" 5 "github.com/pektezol/demoparser/pkg/classes"
8 "github.com/pektezol/demoparser/pkg/messages" 6 "github.com/pektezol/demoparser/pkg/messages"
@@ -15,9 +13,9 @@ type PacketMessageInfo struct {
15 Data any 13 Data any
16} 14}
17 15
18const MSSC = 2 16const MSSC int = 2
19 17
20func ParsePackets(reader *bitreader.ReaderType) PacketMessageInfo { 18func ParsePackets(reader *bitreader.Reader) PacketMessageInfo {
21 packetType := reader.TryReadBits(8) 19 packetType := reader.TryReadBits(8)
22 tickNumber := reader.TryReadBits(32) 20 tickNumber := reader.TryReadBits(32)
23 slotNumber := reader.TryReadBits(8) 21 slotNumber := reader.TryReadBits(8)
@@ -30,9 +28,9 @@ func ParsePackets(reader *bitreader.ReaderType) PacketMessageInfo {
30 } 28 }
31 signOn.InSequence = int32(reader.TryReadBits(32)) 29 signOn.InSequence = int32(reader.TryReadBits(32))
32 signOn.OutSequence = int32(reader.TryReadBits(32)) 30 signOn.OutSequence = int32(reader.TryReadBits(32))
33 signOn.Size = int32(reader.TryReadInt32()) 31 signOn.Size = int32(reader.TryReadSInt32())
34 data := reader.TryReadBytesToSlice(int(signOn.Size)) 32 data := reader.TryReadBytesToSlice(uint64(signOn.Size))
35 packetReader := bitreader.Reader(bytes.NewReader(data), true) 33 packetReader := bitreader.NewReaderFromBytes(data, true)
36 for { 34 for {
37 messageType, err := packetReader.ReadBits(6) 35 messageType, err := packetReader.ReadBits(6)
38 if err != nil { 36 if err != nil {
@@ -48,9 +46,9 @@ func ParsePackets(reader *bitreader.ReaderType) PacketMessageInfo {
48 } 46 }
49 packet.InSequence = int32(reader.TryReadBits(32)) 47 packet.InSequence = int32(reader.TryReadBits(32))
50 packet.OutSequence = int32(reader.TryReadBits(32)) 48 packet.OutSequence = int32(reader.TryReadBits(32))
51 packet.Size = int32(reader.TryReadInt32()) 49 packet.Size = int32(reader.TryReadSInt32())
52 data := reader.TryReadBytesToSlice(int(packet.Size)) 50 data := reader.TryReadBytesToSlice(uint64(packet.Size))
53 packetReader := bitreader.Reader(bytes.NewReader(data), true) 51 packetReader := bitreader.NewReaderFromBytes(data, true)
54 for { 52 for {
55 messageType, err := packetReader.ReadBits(6) 53 messageType, err := packetReader.ReadBits(6)
56 if err != nil { 54 if err != nil {
@@ -63,24 +61,24 @@ func ParsePackets(reader *bitreader.ReaderType) PacketMessageInfo {
63 syncTick := SyncTick{} 61 syncTick := SyncTick{}
64 packetData = syncTick 62 packetData = syncTick
65 case 4: // ConsoleCmd 63 case 4: // ConsoleCmd
66 size := reader.TryReadInt32() 64 size := reader.TryReadSInt32()
67 consoleCmd := ConsoleCmd{ 65 consoleCmd := ConsoleCmd{
68 Size: int32(size), 66 Size: int32(size),
69 Data: reader.TryReadStringLen(int(size)), 67 Data: reader.TryReadStringLength(uint64(size)),
70 } 68 }
71 packetData = consoleCmd 69 packetData = consoleCmd
72 case 5: // UserCmd 70 case 5: // UserCmd
73 userCmd := UserCmd{} 71 userCmd := UserCmd{}
74 userCmd.Cmd = int32(reader.TryReadInt32()) 72 userCmd.Cmd = int32(reader.TryReadSInt32())
75 userCmd.Size = int32(reader.TryReadInt32()) 73 userCmd.Size = int32(reader.TryReadSInt32())
76 data := reader.TryReadBytesToSlice(int(userCmd.Size)) 74 data := reader.TryReadBytesToSlice(uint64(userCmd.Size))
77 userCmd.Data = classes.ParseUserCmdInfo(data) 75 userCmd.Data = classes.ParseUserCmdInfo(data)
78 packetData = userCmd 76 packetData = userCmd
79 case 6: // DataTables 77 case 6: // DataTables
80 dataTables := DataTables{} 78 dataTables := DataTables{}
81 dataTables.Size = int32(reader.TryReadInt32()) 79 dataTables.Size = int32(reader.TryReadSInt32())
82 data := reader.TryReadBytesToSlice(int(dataTables.Size)) 80 data := reader.TryReadBytesToSlice(uint64(dataTables.Size))
83 dataTableReader := bitreader.Reader(bytes.NewReader(data), true) 81 dataTableReader := bitreader.NewReaderFromBytes(data, true)
84 count := 0 82 count := 0
85 for dataTableReader.TryReadBool() { 83 for dataTableReader.TryReadBool() {
86 count++ 84 count++
@@ -94,8 +92,7 @@ func ParsePackets(reader *bitreader.ReaderType) PacketMessageInfo {
94 case 7: // Stop 92 case 7: // Stop
95 stop := Stop{} 93 stop := Stop{}
96 if reader.TryReadBool() { 94 if reader.TryReadBool() {
97 // read remaining data 95 stop.RemainingData = reader.TryReadBitsToSlice(uint64(reader.TryReadRemainingBits()))
98 stop.RemainingData = []byte{}
99 } 96 }
100 packetData = stop 97 packetData = stop
101 case 8: // CustomData 98 case 8: // CustomData
@@ -103,14 +100,24 @@ func ParsePackets(reader *bitreader.ReaderType) PacketMessageInfo {
103 Unknown: int32(reader.TryReadBits(32)), 100 Unknown: int32(reader.TryReadBits(32)),
104 Size: int32(reader.TryReadBits(32)), 101 Size: int32(reader.TryReadBits(32)),
105 } 102 }
106 customData.Data = string(reader.TryReadBytesToSlice(int(customData.Size))) 103 if customData.Unknown != 0 || customData.Size == 8 {
107 packetData = customData 104 // Not SAR data
105 customData.Data = string(reader.TryReadBytesToSlice(uint64(customData.Size)))
106 packetData = customData
107 break
108 }
109 // SAR data
110 sarData := classes.SarData{}
111 data := reader.TryReadBytesToSlice(uint64(customData.Size))
112 sarReader := bitreader.NewReaderFromBytes(data, true)
113 sarData.ParseSarData(sarReader)
114 packetData = sarData
108 case 9: // StringTables 115 case 9: // StringTables
109 stringTables := StringTables{ 116 stringTables := StringTables{
110 Size: int32(reader.TryReadInt32()), 117 Size: int32(reader.TryReadSInt32()),
111 } 118 }
112 data := reader.TryReadBytesToSlice(int(stringTables.Size)) 119 data := reader.TryReadBytesToSlice(uint64(stringTables.Size))
113 stringTableReader := bitreader.Reader(bytes.NewReader(data), true) 120 stringTableReader := bitreader.NewReaderFromBytes(data, true)
114 stringTables.Data = classes.ParseStringTables(stringTableReader) 121 stringTables.Data = classes.ParseStringTables(stringTableReader)
115 packetData = stringTables 122 packetData = stringTables
116 default: // invalid 123 default: // invalid