aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2022-11-11 01:15:51 +0300
committerArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2023-09-16 21:39:41 +0300
commit9e02c214abefbd8c23e4ea84ef2e90fb0dfdc61a (patch)
tree4c5f81bccd9babcfd65d5d9f3d56704c9fd4930a
parentbetter debugging, still broken (diff)
downloadsdp.go-9e02c214abefbd8c23e4ea84ef2e90fb0dfdc61a.tar.gz
sdp.go-9e02c214abefbd8c23e4ea84ef2e90fb0dfdc61a.tar.bz2
sdp.go-9e02c214abefbd8c23e4ea84ef2e90fb0dfdc61a.zip
fixed net/svc messages, not reading data atm but working
-rw-r--r--packets/classes/cmdinfo.go4
-rw-r--r--packets/classes/datatable.go68
-rw-r--r--packets/messages/message.go13
-rw-r--r--packets/messages/types/SvcClassInfo.go2
-rw-r--r--packets/messages/types/SvcCreateStringTable.go3
-rw-r--r--packets/messages/types/SvcGameEventList.go3
-rw-r--r--packets/messages/types/SvcPacketEntities.go6
-rw-r--r--packets/messages/types/SvcSounds.go5
-rw-r--r--packets/messages/types/SvcTempEntities.go3
-rw-r--r--packets/messages/types/SvcUpdateStringTable.go3
-rw-r--r--packets/messages/types/SvcUserMessage.go3
-rw-r--r--packets/packet.go10
-rw-r--r--packets/types.go2
13 files changed, 106 insertions, 19 deletions
diff --git a/packets/classes/cmdinfo.go b/packets/classes/cmdinfo.go
index 52df05c..d11bebc 100644
--- a/packets/classes/cmdinfo.go
+++ b/packets/classes/cmdinfo.go
@@ -15,7 +15,7 @@ type CmdInfo struct {
15func ParseCmdInfo(reader *bitreader.ReaderType, MSSC int) []CmdInfo { 15func ParseCmdInfo(reader *bitreader.ReaderType, MSSC int) []CmdInfo {
16 var out []CmdInfo 16 var out []CmdInfo
17 for i := 0; i < MSSC; i++ { 17 for i := 0; i < MSSC; i++ {
18 flags := reader.TryReadInt32() 18 flags := int32(reader.TryReadInt32())
19 viewOrigin := []float32{ 19 viewOrigin := []float32{
20 reader.TryReadFloat32(), 20 reader.TryReadFloat32(),
21 reader.TryReadFloat32(), 21 reader.TryReadFloat32(),
@@ -47,7 +47,7 @@ func ParseCmdInfo(reader *bitreader.ReaderType, MSSC int) []CmdInfo {
47 reader.TryReadFloat32(), 47 reader.TryReadFloat32(),
48 } 48 }
49 cmdInfo := CmdInfo{ 49 cmdInfo := CmdInfo{
50 Flags: int32(flags), 50 Flags: flags,
51 ViewOrigin: viewOrigin, 51 ViewOrigin: viewOrigin,
52 ViewAngles: viewAngles, 52 ViewAngles: viewAngles,
53 LocalViewAngles: localViewAngles, 53 LocalViewAngles: localViewAngles,
diff --git a/packets/classes/datatable.go b/packets/classes/datatable.go
new file mode 100644
index 0000000..07cbd00
--- /dev/null
+++ b/packets/classes/datatable.go
@@ -0,0 +1,68 @@
1package classes
2
3import (
4 "bytes"
5 "fmt"
6
7 "github.com/pektezol/bitreader"
8)
9
10type DataTable struct {
11 SendTable []SendTable
12 ServerClassInfo []ServerClassInfo
13}
14
15type SendTable struct {
16 NeedsDecoder bool
17 NetTableName string
18 NumOfProps uint16
19 SendPropType int8
20 SendPropName string
21 SendPropFlags int16
22}
23
24type ServerClassInfo struct {
25 ClassId int16
26 ClassName string
27 DataTableName string
28}
29
30func ParseDataTable(data []byte) DataTable {
31 reader := bitreader.Reader(bytes.NewReader(data), true)
32 sendtable := parseSendTable(reader)
33 fmt.Println("AAA")
34 fmt.Println(reader.TryReadBits(8))
35 serverclassinfo := parseServerClassInfo(reader)
36 return DataTable{
37 SendTable: sendtable,
38 ServerClassInfo: serverclassinfo,
39 }
40}
41
42func parseSendTable(reader *bitreader.ReaderType) []SendTable {
43 var sendtables []SendTable
44 for reader.TryReadBool() {
45 sendtables = append(sendtables, SendTable{
46 NeedsDecoder: reader.TryReadBool(),
47 NetTableName: reader.TryReadString(),
48 NumOfProps: uint16(reader.TryReadBits(10)),
49 SendPropType: int8(reader.TryReadBits(5)),
50 SendPropName: reader.TryReadString(),
51 SendPropFlags: int16(reader.TryReadInt16()),
52 })
53 }
54 return sendtables
55}
56func parseServerClassInfo(reader *bitreader.ReaderType) []ServerClassInfo {
57 var serverclassinfo []ServerClassInfo
58 numofclasses := reader.TryReadInt16()
59 fmt.Println(numofclasses)
60 for i := 0; i < int(numofclasses); i++ {
61 serverclassinfo = append(serverclassinfo, ServerClassInfo{
62 ClassId: int16(reader.TryReadInt16()),
63 ClassName: reader.TryReadString(),
64 DataTableName: reader.TryReadString(),
65 })
66 }
67 return serverclassinfo
68}
diff --git a/packets/messages/message.go b/packets/messages/message.go
index f934419..376a3d5 100644
--- a/packets/messages/message.go
+++ b/packets/messages/message.go
@@ -2,12 +2,20 @@ package messages
2 2
3import ( 3import (
4 "bytes" 4 "bytes"
5 "fmt"
6 5
7 "github.com/pektezol/bitreader" 6 "github.com/pektezol/bitreader"
8 "github.com/pektezol/demoparser/packets/messages/types" 7 "github.com/pektezol/demoparser/packets/messages/types"
9) 8)
10 9
10// TODO: Read data properly in:
11// SvcCreateStringTable
12// SvcGameEventList
13// SvcPacketEntities
14// SvcSounds
15// SvcTempEntities
16// SvcUpdateStringTable
17// SvcUserMessage
18
11func ParseMessage(data []byte) []Message { 19func ParseMessage(data []byte) []Message {
12 reader := bitreader.Reader(bytes.NewReader(data), true) 20 reader := bitreader.Reader(bytes.NewReader(data), true)
13 var messages []Message 21 var messages []Message
@@ -16,7 +24,7 @@ func ParseMessage(data []byte) []Message {
16 if err != nil { 24 if err != nil {
17 break 25 break
18 } 26 }
19 fmt.Printf("Reading message type: %d\n", messageType) 27 // fmt.Printf("Reading message type: %d\n", messageType)
20 switch messageType { 28 switch messageType {
21 case 0: 29 case 0:
22 messages = append(messages, Message{Data: types.NetNop{}}) 30 messages = append(messages, Message{Data: types.NetNop{}})
@@ -87,7 +95,6 @@ func ParseMessage(data []byte) []Message {
87 case 33: 95 case 33:
88 messages = append(messages, Message{Data: types.ParseSvcPaintmapData(reader)}) 96 messages = append(messages, Message{Data: types.ParseSvcPaintmapData(reader)})
89 } 97 }
90 //fmt.Println(messages)
91 } 98 }
92 return messages 99 return messages
93} 100}
diff --git a/packets/messages/types/SvcClassInfo.go b/packets/messages/types/SvcClassInfo.go
index d41723d..df17bfc 100644
--- a/packets/messages/types/SvcClassInfo.go
+++ b/packets/messages/types/SvcClassInfo.go
@@ -19,7 +19,7 @@ func ParseSvcClassInfo(reader *bitreader.ReaderType) SvcClassInfo {
19 length := reader.TryReadInt16() 19 length := reader.TryReadInt16()
20 createonclient := reader.TryReadBool() 20 createonclient := reader.TryReadBool()
21 var serverclasses []ServerClass 21 var serverclasses []ServerClass
22 if createonclient { 22 if !createonclient {
23 serverclasses := make([]ServerClass, length) 23 serverclasses := make([]ServerClass, length)
24 for i := 0; i < int(length); i++ { 24 for i := 0; i < int(length); i++ {
25 id, err := reader.ReadBits(HighestBitIndex(uint(length)) + 1) 25 id, err := reader.ReadBits(HighestBitIndex(uint(length)) + 1)
diff --git a/packets/messages/types/SvcCreateStringTable.go b/packets/messages/types/SvcCreateStringTable.go
index 6e97ea7..336b3e0 100644
--- a/packets/messages/types/SvcCreateStringTable.go
+++ b/packets/messages/types/SvcCreateStringTable.go
@@ -26,7 +26,8 @@ func ParseSvcCreateStringTable(reader *bitreader.ReaderType) SvcCreateStringTabl
26 svccreatestringtable.UserDataSizeBits = uint8(reader.TryReadBits(4)) 26 svccreatestringtable.UserDataSizeBits = uint8(reader.TryReadBits(4))
27 } 27 }
28 svccreatestringtable.Flags = uint8(reader.TryReadBits(2)) 28 svccreatestringtable.Flags = uint8(reader.TryReadBits(2))
29 svccreatestringtable.StringData = int(reader.TryReadBits(int(length / 8))) 29 reader.SkipBits(int(length)) // TODO: Read data properly
30 // svccreatestringtable.StringData = int(reader.TryReadBits(int(length / 8)))
30 return svccreatestringtable 31 return svccreatestringtable
31 32
32} 33}
diff --git a/packets/messages/types/SvcGameEventList.go b/packets/messages/types/SvcGameEventList.go
index bdba161..3952517 100644
--- a/packets/messages/types/SvcGameEventList.go
+++ b/packets/messages/types/SvcGameEventList.go
@@ -10,8 +10,9 @@ 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
13 return SvcGameEventList{ 14 return SvcGameEventList{
14 Events: int16(events), 15 Events: int16(events),
15 Data: reader.TryReadBytesToSlice(int(length)), 16 //Data: reader.TryReadBytesToSlice(int(length)),
16 } 17 }
17} 18}
diff --git a/packets/messages/types/SvcPacketEntities.go b/packets/messages/types/SvcPacketEntities.go
index 5fc27db..6621c3a 100644
--- a/packets/messages/types/SvcPacketEntities.go
+++ b/packets/messages/types/SvcPacketEntities.go
@@ -24,13 +24,15 @@ func ParseSvcPacketEntities(reader *bitreader.ReaderType) SvcPacketEntities {
24 baseline := reader.TryReadBool() 24 baseline := reader.TryReadBool()
25 updatedentries := reader.TryReadBits(11) 25 updatedentries := reader.TryReadBits(11)
26 length := reader.TryReadBits(20) 26 length := reader.TryReadBits(20)
27 updatebaseline := reader.TryReadBool()
28 reader.SkipBits(int(length)) // TODO: Read data properly
27 return SvcPacketEntities{ 29 return SvcPacketEntities{
28 MaxEntries: uint16(maxentries), 30 MaxEntries: uint16(maxentries),
29 IsDelta: isdelta, 31 IsDelta: isdelta,
30 DeltaFrom: deltafrom, 32 DeltaFrom: deltafrom,
31 BaseLine: baseline, 33 BaseLine: baseline,
32 UpdatedEntries: uint16(updatedentries), 34 UpdatedEntries: uint16(updatedentries),
33 UpdateBaseline: reader.TryReadBool(), 35 UpdateBaseline: updatebaseline,
34 Data: reader.TryReadBytesToSlice(int(length / 8)), 36 // Data: reader.TryReadBytesToSlice(int(length / 8)),
35 } 37 }
36} 38}
diff --git a/packets/messages/types/SvcSounds.go b/packets/messages/types/SvcSounds.go
index 1f76a03..4d858bf 100644
--- a/packets/messages/types/SvcSounds.go
+++ b/packets/messages/types/SvcSounds.go
@@ -22,10 +22,11 @@ func ParseSvcSounds(reader *bitreader.ReaderType) SvcSounds {
22 } else { 22 } else {
23 length = int16(reader.TryReadInt16()) 23 length = int16(reader.TryReadInt16())
24 } 24 }
25 data := reader.TryReadBytesToSlice(int(length / 8)) 25 reader.SkipBits(int(length)) // TODO: Read data properly
26 //data := reader.TryReadBytesToSlice(int(length / 8))
26 return SvcSounds{ 27 return SvcSounds{
27 ReliableSound: reliablesound, 28 ReliableSound: reliablesound,
28 Size: size, 29 Size: size,
29 Data: data, 30 //Data: data,
30 } 31 }
31} 32}
diff --git a/packets/messages/types/SvcTempEntities.go b/packets/messages/types/SvcTempEntities.go
index ce89dca..105e014 100644
--- a/packets/messages/types/SvcTempEntities.go
+++ b/packets/messages/types/SvcTempEntities.go
@@ -12,8 +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 return SvcTempEntities{ 16 return SvcTempEntities{
16 NumEntries: numentries, 17 NumEntries: numentries,
17 Data: reader.TryReadBytesToSlice(int(length / 8)), 18 //Data: reader.TryReadBytesToSlice(int(length/8) + int(length%8)),
18 } 19 }
19} 20}
diff --git a/packets/messages/types/SvcUpdateStringTable.go b/packets/messages/types/SvcUpdateStringTable.go
index d4a0609..d1ca9bb 100644
--- a/packets/messages/types/SvcUpdateStringTable.go
+++ b/packets/messages/types/SvcUpdateStringTable.go
@@ -16,6 +16,7 @@ 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 svcupdatestringtable.Data = reader.TryReadBytesToSlice(int(length / 8)) 19 reader.SkipBits(int(length)) // TODO: Read data properly
20 //svcupdatestringtable.Data = reader.TryReadBytesToSlice(int(length / 8))
20 return svcupdatestringtable 21 return svcupdatestringtable
21} 22}
diff --git a/packets/messages/types/SvcUserMessage.go b/packets/messages/types/SvcUserMessage.go
index d816f22..6d09fa1 100644
--- a/packets/messages/types/SvcUserMessage.go
+++ b/packets/messages/types/SvcUserMessage.go
@@ -12,8 +12,9 @@ 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
15 return SvcUserMessage{ 16 return SvcUserMessage{
16 MsgType: msgtype, 17 MsgType: msgtype,
17 Data: reader.TryReadBytesToSlice(int(length / 8)), 18 //Data: reader.TryReadBytesToSlice(int(length / 8)),
18 } 19 }
19} 20}
diff --git a/packets/packet.go b/packets/packet.go
index d9885eb..cc94e62 100644
--- a/packets/packet.go
+++ b/packets/packet.go
@@ -22,7 +22,7 @@ func ParsePacket(reader *bitreader.ReaderType) (status int) {
22 OutSequence: int32(reader.TryReadInt32()), 22 OutSequence: int32(reader.TryReadInt32()),
23 Size: int32(reader.TryReadInt32()), 23 Size: int32(reader.TryReadInt32()),
24 } 24 }
25 reader.SkipBytes(int(signOn.Size)) 25 signOn.Data = messages.ParseMessage(reader.TryReadBytesToSlice(int(signOn.Size)))
26 fmt.Printf("[%d] (%d) {%d} SignOn: %v\n", messageTick, messageType, messageSlot, signOn) 26 fmt.Printf("[%d] (%d) {%d} SignOn: %v\n", messageTick, messageType, messageSlot, signOn)
27 return 1 27 return 1
28 case 2: // TODO: Packet - Data 28 case 2: // TODO: Packet - Data
@@ -33,7 +33,7 @@ func ParsePacket(reader *bitreader.ReaderType) (status int) {
33 Size: int32(reader.TryReadInt32()), 33 Size: int32(reader.TryReadInt32()),
34 } 34 }
35 packet.Data = messages.ParseMessage(reader.TryReadBytesToSlice(int(packet.Size))) 35 packet.Data = messages.ParseMessage(reader.TryReadBytesToSlice(int(packet.Size)))
36 fmt.Printf("[%d] (%d) Packet: %v\n", messageTick, messageType, packet) 36 // fmt.Printf("[%d] (%d) Packet: %v\n", messageTick, messageType, packet)
37 return 2 37 return 2
38 case 3: 38 case 3:
39 syncTick := SyncTick{} 39 syncTick := SyncTick{}
@@ -55,9 +55,13 @@ func ParsePacket(reader *bitreader.ReaderType) (status int) {
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{
59 // Size: int32(reader.TryReadInt32()),
60 // }
58 val := reader.TryReadInt32() 61 val := reader.TryReadInt32()
59 reader.SkipBytes(int(val)) 62 reader.SkipBytes(int(val))
60 // fmt.Printf("[%d] (%d) DataTables: \n", messageTick, messageType) 63 // datatables.Data = classes.ParseDataTable(reader.TryReadBytesToSlice(int(datatables.Size)))
64 // fmt.Printf("[%d] (%d) DataTables: %v\n", messageTick, messageType, datatables)
61 return 6 65 return 6
62 case 7: 66 case 7:
63 stop := Stop{ 67 stop := Stop{
diff --git a/packets/types.go b/packets/types.go
index 9a1f667..79cc5c2 100644
--- a/packets/types.go
+++ b/packets/types.go
@@ -50,7 +50,7 @@ type UserCmd struct {
50 50
51type DataTables struct { 51type DataTables struct {
52 Size int32 52 Size int32
53 Data []byte 53 Data classes.DataTable
54} 54}
55 55
56type Stop struct { 56type Stop struct {