aboutsummaryrefslogtreecommitdiff
path: root/packets
diff options
context:
space:
mode:
authorArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2022-11-11 23:19:01 +0300
committerArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2023-09-16 21:39:42 +0300
commit892fb8f547ce4a31901fb029a762331b1188efb7 (patch)
tree51d38af2364d7139fc93f8637e40c77930407532 /packets
parentupgrade bitreader to v1.2.5 (diff)
downloadsdp.go-892fb8f547ce4a31901fb029a762331b1188efb7.tar.gz
sdp.go-892fb8f547ce4a31901fb029a762331b1188efb7.tar.bz2
sdp.go-892fb8f547ce4a31901fb029a762331b1188efb7.zip
net/svc messages finally getting parsed correctly
Diffstat (limited to 'packets')
-rw-r--r--packets/classes/datatable.go2
-rw-r--r--packets/messages/message.go12
-rw-r--r--packets/messages/types/SvcCreateStringTable.go9
-rw-r--r--packets/messages/types/SvcGameEvent.go15
-rw-r--r--packets/messages/types/SvcGameEventList.go3
-rw-r--r--packets/messages/types/SvcPacketEntities.go5
-rw-r--r--packets/messages/types/SvcSounds.go4
-rw-r--r--packets/messages/types/SvcTempEntities.go4
-rw-r--r--packets/messages/types/SvcUpdateStringTable.go3
-rw-r--r--packets/messages/types/SvcUserMessage.go3
-rw-r--r--packets/packet.go43
-rw-r--r--packets/types.go7
12 files changed, 51 insertions, 59 deletions
diff --git a/packets/classes/datatable.go b/packets/classes/datatable.go
index 07cbd00..405dae6 100644
--- a/packets/classes/datatable.go
+++ b/packets/classes/datatable.go
@@ -30,8 +30,6 @@ type ServerClassInfo struct {
30func ParseDataTable(data []byte) DataTable { 30func ParseDataTable(data []byte) DataTable {
31 reader := bitreader.Reader(bytes.NewReader(data), true) 31 reader := bitreader.Reader(bytes.NewReader(data), true)
32 sendtable := parseSendTable(reader) 32 sendtable := parseSendTable(reader)
33 fmt.Println("AAA")
34 fmt.Println(reader.TryReadBits(8))
35 serverclassinfo := parseServerClassInfo(reader) 33 serverclassinfo := parseServerClassInfo(reader)
36 return DataTable{ 34 return DataTable{
37 SendTable: sendtable, 35 SendTable: sendtable,
diff --git a/packets/messages/message.go b/packets/messages/message.go
index 376a3d5..4a00212 100644
--- a/packets/messages/message.go
+++ b/packets/messages/message.go
@@ -7,15 +7,6 @@ import (
7 "github.com/pektezol/demoparser/packets/messages/types" 7 "github.com/pektezol/demoparser/packets/messages/types"
8) 8)
9 9
10// TODO: Read data properly in:
11// SvcCreateStringTable
12// SvcGameEventList
13// SvcPacketEntities
14// SvcSounds
15// SvcTempEntities
16// SvcUpdateStringTable
17// SvcUserMessage
18
19func ParseMessage(data []byte) []Message { 10func ParseMessage(data []byte) []Message {
20 reader := bitreader.Reader(bytes.NewReader(data), true) 11 reader := bitreader.Reader(bytes.NewReader(data), true)
21 var messages []Message 12 var messages []Message
@@ -24,7 +15,6 @@ func ParseMessage(data []byte) []Message {
24 if err != nil { 15 if err != nil {
25 break 16 break
26 } 17 }
27 // fmt.Printf("Reading message type: %d\n", messageType)
28 switch messageType { 18 switch messageType {
29 case 0: 19 case 0:
30 messages = append(messages, Message{Data: types.NetNop{}}) 20 messages = append(messages, Message{Data: types.NetNop{}})
@@ -77,7 +67,7 @@ func ParseMessage(data []byte) []Message {
77 case 24: 67 case 24:
78 messages = append(messages, Message{Data: types.ParseSvcEntityMessage(reader)}) 68 messages = append(messages, Message{Data: types.ParseSvcEntityMessage(reader)})
79 case 25: 69 case 25:
80 // TODO: SvcGameEvent 70 messages = append(messages, Message{Data: types.ParseSvcGameEvent(reader)})
81 case 26: 71 case 26:
82 messages = append(messages, Message{Data: types.ParseSvcPacketEntities(reader)}) 72 messages = append(messages, Message{Data: types.ParseSvcPacketEntities(reader)})
83 case 27: 73 case 27:
diff --git a/packets/messages/types/SvcCreateStringTable.go b/packets/messages/types/SvcCreateStringTable.go
index 336b3e0..72ab1a7 100644
--- a/packets/messages/types/SvcCreateStringTable.go
+++ b/packets/messages/types/SvcCreateStringTable.go
@@ -1,6 +1,8 @@
1package types 1package types
2 2
3import "github.com/pektezol/bitreader" 3import (
4 "github.com/pektezol/bitreader"
5)
4 6
5type SvcCreateStringTable struct { 7type SvcCreateStringTable struct {
6 Name string 8 Name string
@@ -10,7 +12,7 @@ type SvcCreateStringTable struct {
10 UserDataSize uint16 12 UserDataSize uint16
11 UserDataSizeBits uint8 13 UserDataSizeBits uint8
12 Flags uint8 14 Flags uint8
13 StringData int 15 StringData []byte
14} 16}
15 17
16func ParseSvcCreateStringTable(reader *bitreader.ReaderType) SvcCreateStringTable { 18func ParseSvcCreateStringTable(reader *bitreader.ReaderType) SvcCreateStringTable {
@@ -26,8 +28,7 @@ func ParseSvcCreateStringTable(reader *bitreader.ReaderType) SvcCreateStringTabl
26 svccreatestringtable.UserDataSizeBits = uint8(reader.TryReadBits(4)) 28 svccreatestringtable.UserDataSizeBits = uint8(reader.TryReadBits(4))
27 } 29 }
28 svccreatestringtable.Flags = uint8(reader.TryReadBits(2)) 30 svccreatestringtable.Flags = uint8(reader.TryReadBits(2))
29 reader.SkipBits(int(length)) // TODO: Read data properly 31 svccreatestringtable.StringData = reader.TryReadBitsToSlice(int(length))
30 // svccreatestringtable.StringData = int(reader.TryReadBits(int(length / 8)))
31 return svccreatestringtable 32 return svccreatestringtable
32 33
33} 34}
diff --git a/packets/messages/types/SvcGameEvent.go b/packets/messages/types/SvcGameEvent.go
new file mode 100644
index 0000000..1d6b0ea
--- /dev/null
+++ b/packets/messages/types/SvcGameEvent.go
@@ -0,0 +1,15 @@
1package types
2
3import (
4 "github.com/pektezol/bitreader"
5)
6
7type SvcGameEvent struct {
8 Data []byte
9}
10
11func ParseSvcGameEvent(reader *bitreader.ReaderType) SvcGameEvent {
12 length := reader.TryReadBits(11)
13 reader.SkipBits(int(length))
14 return SvcGameEvent{} // TODO: Parse SvcGameEvent
15}
diff --git a/packets/messages/types/SvcGameEventList.go b/packets/messages/types/SvcGameEventList.go
index 3952517..fea0be4 100644
--- a/packets/messages/types/SvcGameEventList.go
+++ b/packets/messages/types/SvcGameEventList.go
@@ -10,9 +10,8 @@ type SvcGameEventList struct {
10func ParseSvcGameEventList(reader *bitreader.ReaderType) SvcGameEventList { 10func ParseSvcGameEventList(reader *bitreader.ReaderType) SvcGameEventList {
11 events := reader.TryReadBits(9) 11 events := reader.TryReadBits(9)
12 length := reader.TryReadBits(20) 12 length := reader.TryReadBits(20)
13 reader.SkipBits(int(length)) // TODO: Read data properly
14 return SvcGameEventList{ 13 return SvcGameEventList{
15 Events: int16(events), 14 Events: int16(events),
16 //Data: reader.TryReadBytesToSlice(int(length)), 15 Data: reader.TryReadBitsToSlice(int(length)),
17 } 16 }
18} 17}
diff --git a/packets/messages/types/SvcPacketEntities.go b/packets/messages/types/SvcPacketEntities.go
index 6621c3a..9d8a8b0 100644
--- a/packets/messages/types/SvcPacketEntities.go
+++ b/packets/messages/types/SvcPacketEntities.go
@@ -20,12 +20,13 @@ func ParseSvcPacketEntities(reader *bitreader.ReaderType) SvcPacketEntities {
20 var deltafrom int32 20 var deltafrom int32
21 if isdelta { 21 if isdelta {
22 deltafrom = int32(reader.TryReadInt32()) 22 deltafrom = int32(reader.TryReadInt32())
23 } else {
24 deltafrom = -1
23 } 25 }
24 baseline := reader.TryReadBool() 26 baseline := reader.TryReadBool()
25 updatedentries := reader.TryReadBits(11) 27 updatedentries := reader.TryReadBits(11)
26 length := reader.TryReadBits(20) 28 length := reader.TryReadBits(20)
27 updatebaseline := reader.TryReadBool() 29 updatebaseline := reader.TryReadBool()
28 reader.SkipBits(int(length)) // TODO: Read data properly
29 return SvcPacketEntities{ 30 return SvcPacketEntities{
30 MaxEntries: uint16(maxentries), 31 MaxEntries: uint16(maxentries),
31 IsDelta: isdelta, 32 IsDelta: isdelta,
@@ -33,6 +34,6 @@ func ParseSvcPacketEntities(reader *bitreader.ReaderType) SvcPacketEntities {
33 BaseLine: baseline, 34 BaseLine: baseline,
34 UpdatedEntries: uint16(updatedentries), 35 UpdatedEntries: uint16(updatedentries),
35 UpdateBaseline: updatebaseline, 36 UpdateBaseline: updatebaseline,
36 // Data: reader.TryReadBytesToSlice(int(length / 8)), 37 Data: reader.TryReadBitsToSlice(int(length)),
37 } 38 }
38} 39}
diff --git a/packets/messages/types/SvcSounds.go b/packets/messages/types/SvcSounds.go
index 4d858bf..2dc7974 100644
--- a/packets/messages/types/SvcSounds.go
+++ b/packets/messages/types/SvcSounds.go
@@ -22,11 +22,9 @@ func ParseSvcSounds(reader *bitreader.ReaderType) SvcSounds {
22 } else { 22 } else {
23 length = int16(reader.TryReadInt16()) 23 length = int16(reader.TryReadInt16())
24 } 24 }
25 reader.SkipBits(int(length)) // TODO: Read data properly
26 //data := reader.TryReadBytesToSlice(int(length / 8))
27 return SvcSounds{ 25 return SvcSounds{
28 ReliableSound: reliablesound, 26 ReliableSound: reliablesound,
29 Size: size, 27 Size: size,
30 //Data: data, 28 Data: reader.TryReadBitsToSlice(int(length)),
31 } 29 }
32} 30}
diff --git a/packets/messages/types/SvcTempEntities.go b/packets/messages/types/SvcTempEntities.go
index 105e014..3bfae0c 100644
--- a/packets/messages/types/SvcTempEntities.go
+++ b/packets/messages/types/SvcTempEntities.go
@@ -12,9 +12,9 @@ type SvcTempEntities struct {
12func ParseSvcTempEntities(reader *bitreader.ReaderType) SvcTempEntities { 12func ParseSvcTempEntities(reader *bitreader.ReaderType) SvcTempEntities {
13 numentries := reader.TryReadInt8() 13 numentries := reader.TryReadInt8()
14 length := reader.TryReadBits(17) 14 length := reader.TryReadBits(17)
15 reader.SkipBits(int(length)) // TODO: Read data properly 15 //reader.SkipBits(int(length)) // TODO: Read data properly
16 return SvcTempEntities{ 16 return SvcTempEntities{
17 NumEntries: numentries, 17 NumEntries: numentries,
18 //Data: reader.TryReadBytesToSlice(int(length/8) + int(length%8)), 18 Data: reader.TryReadBitsToSlice(int(length)),
19 } 19 }
20} 20}
diff --git a/packets/messages/types/SvcUpdateStringTable.go b/packets/messages/types/SvcUpdateStringTable.go
index d1ca9bb..9f178a5 100644
--- a/packets/messages/types/SvcUpdateStringTable.go
+++ b/packets/messages/types/SvcUpdateStringTable.go
@@ -16,7 +16,6 @@ func ParseSvcUpdateStringTable(reader *bitreader.ReaderType) SvcUpdateStringTabl
16 svcupdatestringtable.NumChangedEntries = int16(reader.TryReadInt16()) 16 svcupdatestringtable.NumChangedEntries = int16(reader.TryReadInt16())
17 } 17 }
18 length := reader.TryReadBits(20) 18 length := reader.TryReadBits(20)
19 reader.SkipBits(int(length)) // TODO: Read data properly 19 svcupdatestringtable.Data = reader.TryReadBitsToSlice(int(length))
20 //svcupdatestringtable.Data = reader.TryReadBytesToSlice(int(length / 8))
21 return svcupdatestringtable 20 return svcupdatestringtable
22} 21}
diff --git a/packets/messages/types/SvcUserMessage.go b/packets/messages/types/SvcUserMessage.go
index 6d09fa1..c7b0566 100644
--- a/packets/messages/types/SvcUserMessage.go
+++ b/packets/messages/types/SvcUserMessage.go
@@ -12,9 +12,8 @@ type SvcUserMessage struct {
12func ParseSvcUserMessage(reader *bitreader.ReaderType) SvcUserMessage { 12func ParseSvcUserMessage(reader *bitreader.ReaderType) SvcUserMessage {
13 msgtype := reader.TryReadInt8() 13 msgtype := reader.TryReadInt8()
14 length := reader.TryReadBits(12) 14 length := reader.TryReadBits(12)
15 reader.SkipBits(int(length)) // TODO: Read data properly
16 return SvcUserMessage{ 15 return SvcUserMessage{
17 MsgType: msgtype, 16 MsgType: msgtype,
18 //Data: reader.TryReadBytesToSlice(int(length / 8)), 17 Data: reader.TryReadBitsToSlice(int(length)),
19 } 18 }
20} 19}
diff --git a/packets/packet.go b/packets/packet.go
index cc94e62..8f4a262 100644
--- a/packets/packet.go
+++ b/packets/packet.go
@@ -14,25 +14,26 @@ func ParsePacket(reader *bitreader.ReaderType) (status int) {
14 messageType := reader.TryReadInt8() 14 messageType := reader.TryReadInt8()
15 messageTick := reader.TryReadInt32() 15 messageTick := reader.TryReadInt32()
16 messageSlot := reader.TryReadInt8() 16 messageSlot := reader.TryReadInt8()
17 _ = messageSlot
17 switch messageType { 18 switch messageType {
18 case 1: // TODO: SignOn - Data 19 case 1:
19 signOn := SignOn{ 20 signOn := SignOn{
20 PacketInfo: classes.ParseCmdInfo(reader, MSSC), 21 PacketInfo: classes.ParseCmdInfo(reader, MSSC),
21 InSequence: int32(reader.TryReadInt32()), 22 InSequence: int32(reader.TryReadInt32()),
22 OutSequence: int32(reader.TryReadInt32()), 23 OutSequence: int32(reader.TryReadInt32()),
23 Size: int32(reader.TryReadInt32()),
24 } 24 }
25 signOn.Data = messages.ParseMessage(reader.TryReadBytesToSlice(int(signOn.Size))) 25 size := int(reader.TryReadInt32())
26 fmt.Printf("[%d] (%d) {%d} SignOn: %v\n", messageTick, messageType, messageSlot, signOn) 26 signOn.Data = messages.ParseMessage(reader.TryReadBytesToSlice(size))
27 // fmt.Printf("[%d] (%d) {%d} SignOn: %v\n", messageTick, messageType, messageSlot, signOn)
27 return 1 28 return 1
28 case 2: // TODO: Packet - Data 29 case 2:
29 packet := Packet{ 30 packet := Packet{
30 PacketInfo: classes.ParseCmdInfo(reader, MSSC), 31 PacketInfo: classes.ParseCmdInfo(reader, MSSC),
31 InSequence: int32(reader.TryReadInt32()), 32 InSequence: int32(reader.TryReadInt32()),
32 OutSequence: int32(reader.TryReadInt32()), 33 OutSequence: int32(reader.TryReadInt32()),
33 Size: int32(reader.TryReadInt32()),
34 } 34 }
35 packet.Data = messages.ParseMessage(reader.TryReadBytesToSlice(int(packet.Size))) 35 size := int(reader.TryReadInt32())
36 packet.Data = messages.ParseMessage(reader.TryReadBytesToSlice(size))
36 // fmt.Printf("[%d] (%d) Packet: %v\n", messageTick, messageType, packet) 37 // fmt.Printf("[%d] (%d) Packet: %v\n", messageTick, messageType, packet)
37 return 2 38 return 2
38 case 3: 39 case 3:
@@ -40,26 +41,25 @@ func ParsePacket(reader *bitreader.ReaderType) (status int) {
40 fmt.Printf("[%d] (%d) SyncTick: %v\n", messageTick, messageType, syncTick) 41 fmt.Printf("[%d] (%d) SyncTick: %v\n", messageTick, messageType, syncTick)
41 return 3 42 return 3
42 case 4: 43 case 4:
43 consoleCmd := ConsoleCmd{ 44 size := int(reader.TryReadInt32())
44 Size: int32(reader.TryReadInt32()), 45 var consoleCmd ConsoleCmd
45 } 46 consoleCmd.Data = reader.TryReadStringLen(size)
46 consoleCmd.Data = reader.TryReadStringLen(int(consoleCmd.Size))
47 // fmt.Printf("[%d] (%d) ConsoleCmd: %s\n", messageTick, messageType, consoleCmd.Data) 47 // fmt.Printf("[%d] (%d) ConsoleCmd: %s\n", messageTick, messageType, consoleCmd.Data)
48 return 4 48 return 4
49 case 5: // TODO: UserCmd - Buttons 49 case 5: // TODO: UserCmd - Buttons
50 userCmd := UserCmd{ 50 userCmd := UserCmd{
51 Cmd: int32(reader.TryReadInt32()), 51 Cmd: int32(reader.TryReadInt32()),
52 Size: int32(reader.TryReadInt32()),
53 } 52 }
54 userCmd.Data = classes.ParseUserCmdInfo(reader.TryReadBytesToSlice(int(userCmd.Size))) 53 size := int(reader.TryReadInt32())
54 userCmd.Data = classes.ParseUserCmdInfo(reader.TryReadBytesToSlice(size))
55 // fmt.Printf("[%d] (%d) UserCmd: %v\n", messageTick, messageType, userCmd) 55 // fmt.Printf("[%d] (%d) UserCmd: %v\n", messageTick, messageType, userCmd)
56 return 5 56 return 5
57 case 6: // TODO: DataTables 57 case 6: // TODO: DataTables
58 // datatables := DataTables{ 58 // datatables := DataTables{
59 // Size: int32(reader.TryReadInt32()), 59 // Size: int32(reader.TryReadInt32()),
60 // } 60 // }
61 val := reader.TryReadInt32() 61 size := int(reader.TryReadInt32())
62 reader.SkipBytes(int(val)) 62 reader.SkipBytes(size)
63 // datatables.Data = classes.ParseDataTable(reader.TryReadBytesToSlice(int(datatables.Size))) 63 // datatables.Data = classes.ParseDataTable(reader.TryReadBytesToSlice(int(datatables.Size)))
64 // fmt.Printf("[%d] (%d) DataTables: %v\n", messageTick, messageType, datatables) 64 // fmt.Printf("[%d] (%d) DataTables: %v\n", messageTick, messageType, datatables)
65 return 6 65 return 6
@@ -71,15 +71,14 @@ func ParsePacket(reader *bitreader.ReaderType) (status int) {
71 return 7 71 return 7
72 case 8: // TODO: CustomData 72 case 8: // TODO: CustomData
73 reader.SkipBytes(4) 73 reader.SkipBytes(4)
74 val := reader.TryReadInt32() 74 size := int(reader.TryReadInt32())
75 reader.SkipBytes(int(val)) 75 reader.SkipBytes(size)
76 // fmt.Printf("[%d] (%d) CustomData: \n", messageTick, messageType) 76 // fmt.Printf("[%d] (%d) CustomData: \n", messageTick, messageType)
77 return 8 77 return 8
78 case 9: // TODO: StringTables - Data 78 case 9: // TODO: StringTables - Data
79 stringTables := StringTables{ 79 var stringTables StringTables
80 Size: int32(reader.TryReadInt32()), 80 size := int(reader.TryReadInt32())
81 } 81 stringTables.Data = classes.ParseStringTable(reader.TryReadBytesToSlice(size))
82 stringTables.Data = classes.ParseStringTable(reader.TryReadBytesToSlice(int(stringTables.Size)))
83 // fmt.Printf("[%d] (%d) StringTables: %v\n", messageTick, messageType, stringTables) 82 // fmt.Printf("[%d] (%d) StringTables: %v\n", messageTick, messageType, stringTables)
84 return 9 83 return 9
85 default: 84 default:
diff --git a/packets/types.go b/packets/types.go
index 79cc5c2..41d633a 100644
--- a/packets/types.go
+++ b/packets/types.go
@@ -23,7 +23,6 @@ type SignOn struct {
23 PacketInfo []classes.CmdInfo 23 PacketInfo []classes.CmdInfo
24 InSequence int32 24 InSequence int32
25 OutSequence int32 25 OutSequence int32
26 Size int32
27 Data []messages.Message 26 Data []messages.Message
28} 27}
29 28
@@ -31,25 +30,21 @@ type Packet struct {
31 PacketInfo []classes.CmdInfo 30 PacketInfo []classes.CmdInfo
32 InSequence int32 31 InSequence int32
33 OutSequence int32 32 OutSequence int32
34 Size int32
35 Data []messages.Message 33 Data []messages.Message
36} 34}
37 35
38type SyncTick struct{} 36type SyncTick struct{}
39 37
40type ConsoleCmd struct { 38type ConsoleCmd struct {
41 Size int32
42 Data string 39 Data string
43} 40}
44 41
45type UserCmd struct { 42type UserCmd struct {
46 Cmd int32 43 Cmd int32
47 Size int32
48 Data classes.UserCmdInfo 44 Data classes.UserCmdInfo
49} 45}
50 46
51type DataTables struct { 47type DataTables struct {
52 Size int32
53 Data classes.DataTable 48 Data classes.DataTable
54} 49}
55 50
@@ -59,11 +54,9 @@ type Stop struct {
59 54
60type CustomData struct { 55type CustomData struct {
61 Unknown int32 56 Unknown int32
62 Size int32
63 Data []byte 57 Data []byte
64} 58}
65 59
66type StringTables struct { 60type StringTables struct {
67 Size int32
68 Data []classes.StringTable 61 Data []classes.StringTable
69} 62}