diff options
| author | Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> | 2022-11-11 01:15:51 +0300 |
|---|---|---|
| committer | Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> | 2023-09-16 21:39:41 +0300 |
| commit | 9e02c214abefbd8c23e4ea84ef2e90fb0dfdc61a (patch) | |
| tree | 4c5f81bccd9babcfd65d5d9f3d56704c9fd4930a | |
| parent | better debugging, still broken (diff) | |
| download | sdp.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.go | 4 | ||||
| -rw-r--r-- | packets/classes/datatable.go | 68 | ||||
| -rw-r--r-- | packets/messages/message.go | 13 | ||||
| -rw-r--r-- | packets/messages/types/SvcClassInfo.go | 2 | ||||
| -rw-r--r-- | packets/messages/types/SvcCreateStringTable.go | 3 | ||||
| -rw-r--r-- | packets/messages/types/SvcGameEventList.go | 3 | ||||
| -rw-r--r-- | packets/messages/types/SvcPacketEntities.go | 6 | ||||
| -rw-r--r-- | packets/messages/types/SvcSounds.go | 5 | ||||
| -rw-r--r-- | packets/messages/types/SvcTempEntities.go | 3 | ||||
| -rw-r--r-- | packets/messages/types/SvcUpdateStringTable.go | 3 | ||||
| -rw-r--r-- | packets/messages/types/SvcUserMessage.go | 3 | ||||
| -rw-r--r-- | packets/packet.go | 10 | ||||
| -rw-r--r-- | packets/types.go | 2 |
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 { | |||
| 15 | func ParseCmdInfo(reader *bitreader.ReaderType, MSSC int) []CmdInfo { | 15 | func 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 @@ | |||
| 1 | package classes | ||
| 2 | |||
| 3 | import ( | ||
| 4 | "bytes" | ||
| 5 | "fmt" | ||
| 6 | |||
| 7 | "github.com/pektezol/bitreader" | ||
| 8 | ) | ||
| 9 | |||
| 10 | type DataTable struct { | ||
| 11 | SendTable []SendTable | ||
| 12 | ServerClassInfo []ServerClassInfo | ||
| 13 | } | ||
| 14 | |||
| 15 | type SendTable struct { | ||
| 16 | NeedsDecoder bool | ||
| 17 | NetTableName string | ||
| 18 | NumOfProps uint16 | ||
| 19 | SendPropType int8 | ||
| 20 | SendPropName string | ||
| 21 | SendPropFlags int16 | ||
| 22 | } | ||
| 23 | |||
| 24 | type ServerClassInfo struct { | ||
| 25 | ClassId int16 | ||
| 26 | ClassName string | ||
| 27 | DataTableName string | ||
| 28 | } | ||
| 29 | |||
| 30 | func 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 | |||
| 42 | func 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 | } | ||
| 56 | func 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 | ||
| 3 | import ( | 3 | import ( |
| 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 | |||
| 11 | func ParseMessage(data []byte) []Message { | 19 | func 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 { | |||
| 10 | func ParseSvcGameEventList(reader *bitreader.ReaderType) SvcGameEventList { | 10 | func 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 { | |||
| 12 | func ParseSvcTempEntities(reader *bitreader.ReaderType) SvcTempEntities { | 12 | func 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 { | |||
| 12 | func ParseSvcUserMessage(reader *bitreader.ReaderType) SvcUserMessage { | 12 | func 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 | ||
| 51 | type DataTables struct { | 51 | type DataTables struct { |
| 52 | Size int32 | 52 | Size int32 |
| 53 | Data []byte | 53 | Data classes.DataTable |
| 54 | } | 54 | } |
| 55 | 55 | ||
| 56 | type Stop struct { | 56 | type Stop struct { |