aboutsummaryrefslogtreecommitdiff
path: root/pkg/messages/types/svcCreateStringTable.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/messages/types/svcCreateStringTable.go')
-rw-r--r--pkg/messages/types/svcCreateStringTable.go36
1 files changed, 36 insertions, 0 deletions
diff --git a/pkg/messages/types/svcCreateStringTable.go b/pkg/messages/types/svcCreateStringTable.go
new file mode 100644
index 0000000..ed9e477
--- /dev/null
+++ b/pkg/messages/types/svcCreateStringTable.go
@@ -0,0 +1,36 @@
1package messages
2
3import (
4 "math"
5
6 "github.com/pektezol/bitreader"
7)
8
9type SvcCreateStringTable struct {
10 Name string
11 MaxEntries int16
12 NumEntries int8
13 Length int32
14 UserDataFixedSize bool
15 UserDataSize int16
16 UserDataSizeBits int8
17 Flags int8
18 StringData int
19}
20
21func ParseSvcCreateStringTable(reader *bitreader.ReaderType) SvcCreateStringTable {
22 svcCreateStringTable := SvcCreateStringTable{
23 Name: reader.TryReadString(),
24 MaxEntries: int16(reader.TryReadBits(16)),
25 }
26 svcCreateStringTable.NumEntries = int8(reader.TryReadBits(int(math.Log2(float64(svcCreateStringTable.MaxEntries))) + 1))
27 svcCreateStringTable.Length = int32(reader.TryReadBits(20))
28 svcCreateStringTable.UserDataFixedSize = reader.TryReadBool()
29 if svcCreateStringTable.UserDataFixedSize {
30 svcCreateStringTable.UserDataSize = int16(reader.TryReadBits(12))
31 svcCreateStringTable.UserDataSizeBits = int8(reader.TryReadBits(4))
32 }
33 svcCreateStringTable.Flags = int8(reader.TryReadBits(2))
34 reader.SkipBits(int(svcCreateStringTable.Length)) // TODO: StringTable parsing
35 return svcCreateStringTable
36}