From 9e02c214abefbd8c23e4ea84ef2e90fb0dfdc61a Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Fri, 11 Nov 2022 01:15:51 +0300 Subject: fixed net/svc messages, not reading data atm but working --- packets/classes/cmdinfo.go | 4 +- packets/classes/datatable.go | 68 ++++++++++++++++++++++++++ packets/messages/message.go | 13 +++-- packets/messages/types/SvcClassInfo.go | 2 +- packets/messages/types/SvcCreateStringTable.go | 3 +- packets/messages/types/SvcGameEventList.go | 3 +- packets/messages/types/SvcPacketEntities.go | 6 ++- packets/messages/types/SvcSounds.go | 5 +- packets/messages/types/SvcTempEntities.go | 3 +- packets/messages/types/SvcUpdateStringTable.go | 3 +- packets/messages/types/SvcUserMessage.go | 3 +- packets/packet.go | 10 ++-- packets/types.go | 2 +- 13 files changed, 106 insertions(+), 19 deletions(-) create mode 100644 packets/classes/datatable.go 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 { func ParseCmdInfo(reader *bitreader.ReaderType, MSSC int) []CmdInfo { var out []CmdInfo for i := 0; i < MSSC; i++ { - flags := reader.TryReadInt32() + flags := int32(reader.TryReadInt32()) viewOrigin := []float32{ reader.TryReadFloat32(), reader.TryReadFloat32(), @@ -47,7 +47,7 @@ func ParseCmdInfo(reader *bitreader.ReaderType, MSSC int) []CmdInfo { reader.TryReadFloat32(), } cmdInfo := CmdInfo{ - Flags: int32(flags), + Flags: flags, ViewOrigin: viewOrigin, ViewAngles: viewAngles, 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 @@ +package classes + +import ( + "bytes" + "fmt" + + "github.com/pektezol/bitreader" +) + +type DataTable struct { + SendTable []SendTable + ServerClassInfo []ServerClassInfo +} + +type SendTable struct { + NeedsDecoder bool + NetTableName string + NumOfProps uint16 + SendPropType int8 + SendPropName string + SendPropFlags int16 +} + +type ServerClassInfo struct { + ClassId int16 + ClassName string + DataTableName string +} + +func ParseDataTable(data []byte) DataTable { + reader := bitreader.Reader(bytes.NewReader(data), true) + sendtable := parseSendTable(reader) + fmt.Println("AAA") + fmt.Println(reader.TryReadBits(8)) + serverclassinfo := parseServerClassInfo(reader) + return DataTable{ + SendTable: sendtable, + ServerClassInfo: serverclassinfo, + } +} + +func parseSendTable(reader *bitreader.ReaderType) []SendTable { + var sendtables []SendTable + for reader.TryReadBool() { + sendtables = append(sendtables, SendTable{ + NeedsDecoder: reader.TryReadBool(), + NetTableName: reader.TryReadString(), + NumOfProps: uint16(reader.TryReadBits(10)), + SendPropType: int8(reader.TryReadBits(5)), + SendPropName: reader.TryReadString(), + SendPropFlags: int16(reader.TryReadInt16()), + }) + } + return sendtables +} +func parseServerClassInfo(reader *bitreader.ReaderType) []ServerClassInfo { + var serverclassinfo []ServerClassInfo + numofclasses := reader.TryReadInt16() + fmt.Println(numofclasses) + for i := 0; i < int(numofclasses); i++ { + serverclassinfo = append(serverclassinfo, ServerClassInfo{ + ClassId: int16(reader.TryReadInt16()), + ClassName: reader.TryReadString(), + DataTableName: reader.TryReadString(), + }) + } + return serverclassinfo +} 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 import ( "bytes" - "fmt" "github.com/pektezol/bitreader" "github.com/pektezol/demoparser/packets/messages/types" ) +// TODO: Read data properly in: +// SvcCreateStringTable +// SvcGameEventList +// SvcPacketEntities +// SvcSounds +// SvcTempEntities +// SvcUpdateStringTable +// SvcUserMessage + func ParseMessage(data []byte) []Message { reader := bitreader.Reader(bytes.NewReader(data), true) var messages []Message @@ -16,7 +24,7 @@ func ParseMessage(data []byte) []Message { if err != nil { break } - fmt.Printf("Reading message type: %d\n", messageType) + // fmt.Printf("Reading message type: %d\n", messageType) switch messageType { case 0: messages = append(messages, Message{Data: types.NetNop{}}) @@ -87,7 +95,6 @@ func ParseMessage(data []byte) []Message { case 33: messages = append(messages, Message{Data: types.ParseSvcPaintmapData(reader)}) } - //fmt.Println(messages) } return messages } 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 { length := reader.TryReadInt16() createonclient := reader.TryReadBool() var serverclasses []ServerClass - if createonclient { + if !createonclient { serverclasses := make([]ServerClass, length) for i := 0; i < int(length); i++ { 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 svccreatestringtable.UserDataSizeBits = uint8(reader.TryReadBits(4)) } svccreatestringtable.Flags = uint8(reader.TryReadBits(2)) - svccreatestringtable.StringData = int(reader.TryReadBits(int(length / 8))) + reader.SkipBits(int(length)) // TODO: Read data properly + // svccreatestringtable.StringData = int(reader.TryReadBits(int(length / 8))) return svccreatestringtable } 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 { func ParseSvcGameEventList(reader *bitreader.ReaderType) SvcGameEventList { events := reader.TryReadBits(9) length := reader.TryReadBits(20) + reader.SkipBits(int(length)) // TODO: Read data properly return SvcGameEventList{ Events: int16(events), - Data: reader.TryReadBytesToSlice(int(length)), + //Data: reader.TryReadBytesToSlice(int(length)), } } 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 { baseline := reader.TryReadBool() updatedentries := reader.TryReadBits(11) length := reader.TryReadBits(20) + updatebaseline := reader.TryReadBool() + reader.SkipBits(int(length)) // TODO: Read data properly return SvcPacketEntities{ MaxEntries: uint16(maxentries), IsDelta: isdelta, DeltaFrom: deltafrom, BaseLine: baseline, UpdatedEntries: uint16(updatedentries), - UpdateBaseline: reader.TryReadBool(), - Data: reader.TryReadBytesToSlice(int(length / 8)), + UpdateBaseline: updatebaseline, + // Data: reader.TryReadBytesToSlice(int(length / 8)), } } 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 { } else { length = int16(reader.TryReadInt16()) } - data := reader.TryReadBytesToSlice(int(length / 8)) + reader.SkipBits(int(length)) // TODO: Read data properly + //data := reader.TryReadBytesToSlice(int(length / 8)) return SvcSounds{ ReliableSound: reliablesound, Size: size, - Data: data, + //Data: data, } } 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 { func ParseSvcTempEntities(reader *bitreader.ReaderType) SvcTempEntities { numentries := reader.TryReadInt8() length := reader.TryReadBits(17) + reader.SkipBits(int(length)) // TODO: Read data properly return SvcTempEntities{ NumEntries: numentries, - Data: reader.TryReadBytesToSlice(int(length / 8)), + //Data: reader.TryReadBytesToSlice(int(length/8) + int(length%8)), } } 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 svcupdatestringtable.NumChangedEntries = int16(reader.TryReadInt16()) } length := reader.TryReadBits(20) - svcupdatestringtable.Data = reader.TryReadBytesToSlice(int(length / 8)) + reader.SkipBits(int(length)) // TODO: Read data properly + //svcupdatestringtable.Data = reader.TryReadBytesToSlice(int(length / 8)) return svcupdatestringtable } 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 { func ParseSvcUserMessage(reader *bitreader.ReaderType) SvcUserMessage { msgtype := reader.TryReadInt8() length := reader.TryReadBits(12) + reader.SkipBits(int(length)) // TODO: Read data properly return SvcUserMessage{ MsgType: msgtype, - Data: reader.TryReadBytesToSlice(int(length / 8)), + //Data: reader.TryReadBytesToSlice(int(length / 8)), } } 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) { OutSequence: int32(reader.TryReadInt32()), Size: int32(reader.TryReadInt32()), } - reader.SkipBytes(int(signOn.Size)) + signOn.Data = messages.ParseMessage(reader.TryReadBytesToSlice(int(signOn.Size))) fmt.Printf("[%d] (%d) {%d} SignOn: %v\n", messageTick, messageType, messageSlot, signOn) return 1 case 2: // TODO: Packet - Data @@ -33,7 +33,7 @@ func ParsePacket(reader *bitreader.ReaderType) (status int) { Size: int32(reader.TryReadInt32()), } packet.Data = messages.ParseMessage(reader.TryReadBytesToSlice(int(packet.Size))) - fmt.Printf("[%d] (%d) Packet: %v\n", messageTick, messageType, packet) + // fmt.Printf("[%d] (%d) Packet: %v\n", messageTick, messageType, packet) return 2 case 3: syncTick := SyncTick{} @@ -55,9 +55,13 @@ func ParsePacket(reader *bitreader.ReaderType) (status int) { // fmt.Printf("[%d] (%d) UserCmd: %v\n", messageTick, messageType, userCmd) return 5 case 6: // TODO: DataTables + // datatables := DataTables{ + // Size: int32(reader.TryReadInt32()), + // } val := reader.TryReadInt32() reader.SkipBytes(int(val)) - // fmt.Printf("[%d] (%d) DataTables: \n", messageTick, messageType) + // datatables.Data = classes.ParseDataTable(reader.TryReadBytesToSlice(int(datatables.Size))) + // fmt.Printf("[%d] (%d) DataTables: %v\n", messageTick, messageType, datatables) return 6 case 7: 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 { type DataTables struct { Size int32 - Data []byte + Data classes.DataTable } type Stop struct { -- cgit v1.2.3