diff options
Diffstat (limited to 'pkg/packets')
| -rw-r--r-- | pkg/packets/headers.go | 5 | ||||
| -rw-r--r-- | pkg/packets/packets.go | 43 | ||||
| -rw-r--r-- | pkg/packets/types.go | 6 |
3 files changed, 34 insertions, 20 deletions
diff --git a/pkg/packets/headers.go b/pkg/packets/headers.go index dbeab87..d92b22d 100644 --- a/pkg/packets/headers.go +++ b/pkg/packets/headers.go | |||
| @@ -1,9 +1,8 @@ | |||
| 1 | package packets | 1 | package packets |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "fmt" | ||
| 5 | |||
| 6 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 7 | ) | 6 | ) |
| 8 | 7 | ||
| 9 | type Headers struct { | 8 | type Headers struct { |
| @@ -43,6 +42,6 @@ func ParseHeaders(reader *bitreader.Reader) Headers { | |||
| 43 | if headers.NetworkProtocol != 2001 { | 42 | if headers.NetworkProtocol != 2001 { |
| 44 | panic("this parser only supports demos from portal 2") | 43 | panic("this parser only supports demos from portal 2") |
| 45 | } | 44 | } |
| 46 | fmt.Printf("Headers: %+v\n", headers) | 45 | writer.AppendLine("Headers: %+v", headers) |
| 47 | return headers | 46 | return headers |
| 48 | } | 47 | } |
diff --git a/pkg/packets/packets.go b/pkg/packets/packets.go index 3a01370..33350d5 100644 --- a/pkg/packets/packets.go +++ b/pkg/packets/packets.go | |||
| @@ -4,6 +4,7 @@ import ( | |||
| 4 | "github.com/pektezol/bitreader" | 4 | "github.com/pektezol/bitreader" |
| 5 | "github.com/pektezol/demoparser/pkg/classes" | 5 | "github.com/pektezol/demoparser/pkg/classes" |
| 6 | "github.com/pektezol/demoparser/pkg/messages" | 6 | "github.com/pektezol/demoparser/pkg/messages" |
| 7 | "github.com/pektezol/demoparser/pkg/writer" | ||
| 7 | ) | 8 | ) |
| 8 | 9 | ||
| 9 | type PacketMessageInfo struct { | 10 | type PacketMessageInfo struct { |
| @@ -23,6 +24,7 @@ func ParsePackets(reader *bitreader.Reader) PacketMessageInfo { | |||
| 23 | switch packetType { | 24 | switch packetType { |
| 24 | case 1: // SignOn | 25 | case 1: // SignOn |
| 25 | signOn := SignOn{} | 26 | signOn := SignOn{} |
| 27 | writer.AppendLine("[%d] %s (%d):", tickNumber, "SIGNON", packetType) | ||
| 26 | for count := 0; count < MSSC; count++ { | 28 | for count := 0; count < MSSC; count++ { |
| 27 | signOn.PacketInfo = append(signOn.PacketInfo, classes.ParseCmdInfo(reader)) | 29 | signOn.PacketInfo = append(signOn.PacketInfo, classes.ParseCmdInfo(reader)) |
| 28 | } | 30 | } |
| @@ -41,6 +43,7 @@ func ParsePackets(reader *bitreader.Reader) PacketMessageInfo { | |||
| 41 | packetData = signOn | 43 | packetData = signOn |
| 42 | case 2: // Packet | 44 | case 2: // Packet |
| 43 | packet := Packet{} | 45 | packet := Packet{} |
| 46 | writer.AppendLine("[%d] %s (%d):", tickNumber, "PACKET", packetType) | ||
| 44 | for count := 0; count < MSSC; count++ { | 47 | for count := 0; count < MSSC; count++ { |
| 45 | packet.PacketInfo = append(packet.PacketInfo, classes.ParseCmdInfo(reader)) | 48 | packet.PacketInfo = append(packet.PacketInfo, classes.ParseCmdInfo(reader)) |
| 46 | } | 49 | } |
| @@ -59,16 +62,18 @@ func ParsePackets(reader *bitreader.Reader) PacketMessageInfo { | |||
| 59 | packetData = packet | 62 | packetData = packet |
| 60 | case 3: // SyncTick | 63 | case 3: // SyncTick |
| 61 | syncTick := SyncTick{} | 64 | syncTick := SyncTick{} |
| 65 | writer.AppendLine("[%d] %s (%d):", tickNumber, "SYNCTICK", packetType) | ||
| 62 | packetData = syncTick | 66 | packetData = syncTick |
| 63 | case 4: // ConsoleCmd | 67 | case 4: // ConsoleCmd |
| 64 | size := reader.TryReadSInt32() | 68 | consoleCmd := ConsoleCmd{} |
| 65 | consoleCmd := ConsoleCmd{ | 69 | writer.AppendLine("[%d] %s (%d):", tickNumber, "CONSOLECMD", packetType) |
| 66 | Size: int32(size), | 70 | consoleCmd.Size = reader.TryReadSInt32() |
| 67 | Data: reader.TryReadStringLength(uint64(size)), | 71 | consoleCmd.Data = reader.TryReadStringLength(uint64(consoleCmd.Size)) |
| 68 | } | 72 | writer.AppendLine("\t%s", consoleCmd.Data) |
| 69 | packetData = consoleCmd | 73 | packetData = consoleCmd |
| 70 | case 5: // UserCmd TODO: usercmdinfo refactor | 74 | case 5: // UserCmd TODO: usercmdinfo refactor |
| 71 | userCmd := UserCmd{} | 75 | userCmd := UserCmd{} |
| 76 | writer.AppendLine("[%d] %s (%d):", tickNumber, "USERCMD", packetType) | ||
| 72 | userCmd.Cmd = int32(reader.TryReadSInt32()) | 77 | userCmd.Cmd = int32(reader.TryReadSInt32()) |
| 73 | userCmd.Size = int32(reader.TryReadSInt32()) | 78 | userCmd.Size = int32(reader.TryReadSInt32()) |
| 74 | data := reader.TryReadBytesToSlice(uint64(userCmd.Size)) | 79 | data := reader.TryReadBytesToSlice(uint64(userCmd.Size)) |
| @@ -76,6 +81,7 @@ func ParsePackets(reader *bitreader.Reader) PacketMessageInfo { | |||
| 76 | packetData = userCmd | 81 | packetData = userCmd |
| 77 | case 6: // DataTables TODO: prop stuff | 82 | case 6: // DataTables TODO: prop stuff |
| 78 | dataTables := DataTables{} | 83 | dataTables := DataTables{} |
| 84 | writer.AppendLine("[%d] %s (%d):", tickNumber, "DATATABLES", packetType) | ||
| 79 | dataTables.Size = int32(reader.TryReadSInt32()) | 85 | dataTables.Size = int32(reader.TryReadSInt32()) |
| 80 | data := reader.TryReadBytesToSlice(uint64(dataTables.Size)) | 86 | data := reader.TryReadBytesToSlice(uint64(dataTables.Size)) |
| 81 | dataTableReader := bitreader.NewReaderFromBytes(data, true) | 87 | dataTableReader := bitreader.NewReaderFromBytes(data, true) |
| @@ -84,43 +90,52 @@ func ParsePackets(reader *bitreader.Reader) PacketMessageInfo { | |||
| 84 | count++ | 90 | count++ |
| 85 | dataTables.SendTable = append(dataTables.SendTable, classes.ParseSendTable(dataTableReader)) | 91 | dataTables.SendTable = append(dataTables.SendTable, classes.ParseSendTable(dataTableReader)) |
| 86 | } | 92 | } |
| 93 | writer.AppendLine("\t%d Send Tables:", count) | ||
| 94 | writer.AppendOutputFromTemp() | ||
| 87 | numOfClasses := dataTableReader.TryReadBits(16) | 95 | numOfClasses := dataTableReader.TryReadBits(16) |
| 88 | for count = 0; count < int(numOfClasses); count++ { | 96 | for count = 0; count < int(numOfClasses); count++ { |
| 89 | dataTables.ServerClassInfo = append(dataTables.ServerClassInfo, classes.ParseServerClassInfo(dataTableReader, count, int(numOfClasses))) | 97 | dataTables.ServerClassInfo = append(dataTables.ServerClassInfo, classes.ParseServerClassInfo(dataTableReader, count, int(numOfClasses))) |
| 90 | } | 98 | } |
| 99 | writer.AppendLine("\t%d Classes:", count) | ||
| 100 | writer.AppendOutputFromTemp() | ||
| 91 | packetData = dataTables | 101 | packetData = dataTables |
| 92 | case 7: // Stop | 102 | case 7: // Stop |
| 93 | stop := Stop{} | 103 | stop := Stop{} |
| 104 | writer.AppendLine("[%d] %s (%d):", tickNumber, "STOP", packetType) | ||
| 94 | if reader.TryReadBool() { | 105 | if reader.TryReadBool() { |
| 95 | stop.RemainingData = reader.TryReadBitsToSlice(uint64(reader.TryReadRemainingBits())) | 106 | stop.RemainingData = reader.TryReadBitsToSlice(uint64(reader.TryReadRemainingBits())) |
| 107 | writer.AppendLine("\tRemaining Data: %v", stop.RemainingData) | ||
| 96 | } | 108 | } |
| 97 | packetData = stop | 109 | packetData = stop |
| 98 | case 8: // CustomData | 110 | case 8: // CustomData TODO: not sar data |
| 99 | customData := CustomData{ | 111 | customData := CustomData{} |
| 100 | Unknown: int32(reader.TryReadBits(32)), | 112 | customData.Type = reader.TryReadSInt32() |
| 101 | Size: int32(reader.TryReadBits(32)), | 113 | customData.Size = reader.TryReadSInt32() |
| 102 | } | 114 | if customData.Type != 0 || customData.Size == 8 { |
| 103 | if customData.Unknown != 0 || customData.Size == 8 { | ||
| 104 | // Not SAR data | 115 | // Not SAR data |
| 116 | writer.AppendLine("[%d] %s (%d):", tickNumber, "CUSTOMDATA", packetType) | ||
| 105 | customData.Data = string(reader.TryReadBytesToSlice(uint64(customData.Size))) | 117 | customData.Data = string(reader.TryReadBytesToSlice(uint64(customData.Size))) |
| 118 | writer.AppendLine("\t%s", customData.Data) | ||
| 106 | packetData = customData | 119 | packetData = customData |
| 107 | break | 120 | break |
| 108 | } | 121 | } |
| 109 | // SAR data | 122 | // SAR data |
| 110 | sarData := classes.SarData{} | 123 | sarData := classes.SarData{} |
| 124 | writer.AppendLine("[%d] %s (%d):", tickNumber, "SARDATA", packetType) | ||
| 111 | data := reader.TryReadBytesToSlice(uint64(customData.Size)) | 125 | data := reader.TryReadBytesToSlice(uint64(customData.Size)) |
| 112 | sarReader := bitreader.NewReaderFromBytes(data, true) | 126 | sarReader := bitreader.NewReaderFromBytes(data, true) |
| 113 | sarData.ParseSarData(sarReader) | 127 | sarData.ParseSarData(sarReader) |
| 114 | packetData = sarData | 128 | packetData = sarData |
| 115 | case 9: // StringTables TODO: parsing string table data | 129 | case 9: // StringTables TODO: parsing string table data |
| 116 | stringTables := StringTables{ | 130 | stringTables := StringTables{} |
| 117 | Size: int32(reader.TryReadSInt32()), | 131 | writer.AppendLine("[%d] %s (%d):", tickNumber, "STRINGTABLES", packetType) |
| 118 | } | 132 | stringTables.Size = reader.TryReadSInt32() |
| 119 | data := reader.TryReadBytesToSlice(uint64(stringTables.Size)) | 133 | data := reader.TryReadBytesToSlice(uint64(stringTables.Size)) |
| 120 | stringTableReader := bitreader.NewReaderFromBytes(data, true) | 134 | stringTableReader := bitreader.NewReaderFromBytes(data, true) |
| 121 | stringTables.Data = classes.ParseStringTables(stringTableReader) | 135 | stringTables.Data = classes.ParseStringTables(stringTableReader) |
| 122 | packetData = stringTables | 136 | packetData = stringTables |
| 123 | default: // invalid | 137 | default: // invalid |
| 138 | writer.AppendLine("[%d] %s (%d):", tickNumber, "INVALID", packetType) | ||
| 124 | panic("invalid packet type") | 139 | panic("invalid packet type") |
| 125 | } | 140 | } |
| 126 | return PacketMessageInfo{ | 141 | return PacketMessageInfo{ |
diff --git a/pkg/packets/types.go b/pkg/packets/types.go index 6297b01..a2fb78f 100644 --- a/pkg/packets/types.go +++ b/pkg/packets/types.go | |||
| @@ -42,9 +42,9 @@ type Stop struct { | |||
| 42 | } | 42 | } |
| 43 | 43 | ||
| 44 | type CustomData struct { | 44 | type CustomData struct { |
| 45 | Unknown int32 | 45 | Type int32 |
| 46 | Size int32 | 46 | Size int32 |
| 47 | Data string | 47 | Data string |
| 48 | } | 48 | } |
| 49 | 49 | ||
| 50 | type StringTables struct { | 50 | type StringTables struct { |