aboutsummaryrefslogtreecommitdiff
path: root/packets/messages
diff options
context:
space:
mode:
authorArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2022-11-08 22:48:20 +0300
committerArda Serdar Pektezol <1669855+pektezol@users.noreply.github.com>2023-09-16 21:39:39 +0300
commit833a46544df2ed2a7afdba08ebfe02ed7741d86a (patch)
tree2432f14b449761086d773fb8cd072797d23006f1 /packets/messages
parentput class type into individual files (diff)
downloadsdp.go-833a46544df2ed2a7afdba08ebfe02ed7741d86a.tar.gz
sdp.go-833a46544df2ed2a7afdba08ebfe02ed7741d86a.tar.bz2
sdp.go-833a46544df2ed2a7afdba08ebfe02ed7741d86a.zip
net/svc messages
Diffstat (limited to 'packets/messages')
-rw-r--r--packets/messages/message.go50
-rw-r--r--packets/messages/types/NetDisconnect.go11
-rw-r--r--packets/messages/types/NetFile.go17
-rw-r--r--packets/messages/types/NetNop.go3
-rw-r--r--packets/messages/types/NetSetConVar.go28
-rw-r--r--packets/messages/types/NetSignOnState.go31
-rw-r--r--packets/messages/types/NetSplitScreenUser.go13
-rw-r--r--packets/messages/types/NetStringCmd.go13
-rw-r--r--packets/messages/types/NetTick.go17
-rw-r--r--packets/messages/types/SvcClassInfo.go42
-rw-r--r--packets/messages/types/SvcSendTable.go17
-rw-r--r--packets/messages/types/SvcServerInfo.go43
-rw-r--r--packets/messages/types/SvcSetPause.go11
13 files changed, 296 insertions, 0 deletions
diff --git a/packets/messages/message.go b/packets/messages/message.go
new file mode 100644
index 0000000..c508bfa
--- /dev/null
+++ b/packets/messages/message.go
@@ -0,0 +1,50 @@
1package messages
2
3import (
4 "bytes"
5
6 "github.com/pektezol/bitreader"
7 "github.com/pektezol/demoparser/packets/messages/types"
8)
9
10func ParseMessage(data []byte) []Message {
11 reader := bitreader.Reader(bytes.NewReader(data), true)
12 var messages []Message
13 for {
14 messageType, err := reader.ReadBits(6)
15 if err != nil {
16 break
17 }
18 switch messageType {
19 case 0x00:
20 messages = append(messages, Message{Data: types.NetNop{}})
21 case 0x01:
22 messages = append(messages, Message{Data: types.ParseNetDisconnect(reader)})
23 case 0x02:
24 messages = append(messages, Message{Data: types.ParseNetFile(reader)})
25 case 0x03:
26 messages = append(messages, Message{Data: types.ParseNetSplitScreenUser(reader)})
27 case 0x04:
28 messages = append(messages, Message{Data: types.ParseNetTick(reader)})
29 case 0x05:
30 messages = append(messages, Message{Data: types.ParseNetStringCmd(reader)})
31 case 0x06:
32 messages = append(messages, Message{Data: types.ParseNetSetConVar(reader)})
33 case 0x07:
34 messages = append(messages, Message{Data: types.ParseNetSignOnState(reader)})
35 case 0x08:
36 messages = append(messages, Message{Data: types.ParseSvcServerInfo(reader)})
37 case 0x09:
38 messages = append(messages, Message{Data: types.ParseSvcSendTable(reader)})
39 case 0x10:
40 messages = append(messages, Message{Data: types.ParseSvcClassInfo(reader)})
41 case 0x11:
42 messages = append(messages, Message{Data: types.ParseSvcSetPause(reader)})
43 }
44 }
45 return messages
46}
47
48type Message struct {
49 Data any
50}
diff --git a/packets/messages/types/NetDisconnect.go b/packets/messages/types/NetDisconnect.go
new file mode 100644
index 0000000..8b65568
--- /dev/null
+++ b/packets/messages/types/NetDisconnect.go
@@ -0,0 +1,11 @@
1package types
2
3import "github.com/pektezol/bitreader"
4
5type NetDisconnect struct {
6 Text string
7}
8
9func ParseNetDisconnect(reader *bitreader.ReaderType) NetDisconnect {
10 return NetDisconnect{Text: reader.TryReadString()}
11}
diff --git a/packets/messages/types/NetFile.go b/packets/messages/types/NetFile.go
new file mode 100644
index 0000000..c65873d
--- /dev/null
+++ b/packets/messages/types/NetFile.go
@@ -0,0 +1,17 @@
1package types
2
3import "github.com/pektezol/bitreader"
4
5type NetFile struct {
6 TransferId uint32
7 FileName string
8 FileRequested bool
9}
10
11func ParseNetFile(reader *bitreader.ReaderType) NetFile {
12 return NetFile{
13 TransferId: reader.TryReadInt32(),
14 FileName: reader.TryReadString(),
15 FileRequested: reader.TryReadBool(),
16 }
17}
diff --git a/packets/messages/types/NetNop.go b/packets/messages/types/NetNop.go
new file mode 100644
index 0000000..d0a1f7a
--- /dev/null
+++ b/packets/messages/types/NetNop.go
@@ -0,0 +1,3 @@
1package types
2
3type NetNop struct{}
diff --git a/packets/messages/types/NetSetConVar.go b/packets/messages/types/NetSetConVar.go
new file mode 100644
index 0000000..b502953
--- /dev/null
+++ b/packets/messages/types/NetSetConVar.go
@@ -0,0 +1,28 @@
1package types
2
3import "github.com/pektezol/bitreader"
4
5type NetSetConVar struct {
6 Length uint8
7 ConVars []ConVar
8}
9
10type ConVar struct {
11 Name string
12 Value string
13}
14
15func ParseNetSetConVar(reader *bitreader.ReaderType) NetSetConVar {
16 var convars []ConVar
17 netsetconvar := NetSetConVar{
18 Length: reader.TryReadInt8(),
19 }
20 for i := 0; i < int(netsetconvar.Length); i++ {
21 convars = append(convars, ConVar{
22 Name: reader.TryReadString(),
23 Value: reader.TryReadString(),
24 })
25 }
26 netsetconvar.ConVars = convars
27 return netsetconvar
28}
diff --git a/packets/messages/types/NetSignOnState.go b/packets/messages/types/NetSignOnState.go
new file mode 100644
index 0000000..3d02e91
--- /dev/null
+++ b/packets/messages/types/NetSignOnState.go
@@ -0,0 +1,31 @@
1package types
2
3import (
4 "fmt"
5
6 "github.com/pektezol/bitreader"
7)
8
9type NetSignOnState struct {
10 SignonState int8
11 SpawnCount uint32
12 NumServerPlayers uint32
13 IdsLength uint32
14 PlayersNetworkIds []byte
15 MapNameLength uint32
16 MapName string
17}
18
19func ParseNetSignOnState(reader *bitreader.ReaderType) NetSignOnState {
20 netsignonstate := NetSignOnState{
21 SignonState: int8(reader.TryReadInt8()),
22 SpawnCount: reader.TryReadInt32(),
23 NumServerPlayers: reader.TryReadInt32(),
24 IdsLength: reader.TryReadInt32(),
25 }
26 fmt.Println(netsignonstate.IdsLength)
27 netsignonstate.PlayersNetworkIds = reader.TryReadBytesToSlice(int(netsignonstate.IdsLength))
28 netsignonstate.MapNameLength = reader.TryReadInt32()
29 netsignonstate.MapName = reader.TryReadStringLen(int(netsignonstate.MapNameLength))
30 return netsignonstate
31}
diff --git a/packets/messages/types/NetSplitScreenUser.go b/packets/messages/types/NetSplitScreenUser.go
new file mode 100644
index 0000000..66a7c85
--- /dev/null
+++ b/packets/messages/types/NetSplitScreenUser.go
@@ -0,0 +1,13 @@
1package types
2
3import "github.com/pektezol/bitreader"
4
5type NetSplitScreenUser struct {
6 Unknown bool
7}
8
9func ParseNetSplitScreenUser(reader *bitreader.ReaderType) NetSplitScreenUser {
10 return NetSplitScreenUser{
11 Unknown: reader.TryReadBool(),
12 }
13}
diff --git a/packets/messages/types/NetStringCmd.go b/packets/messages/types/NetStringCmd.go
new file mode 100644
index 0000000..1ee9f67
--- /dev/null
+++ b/packets/messages/types/NetStringCmd.go
@@ -0,0 +1,13 @@
1package types
2
3import "github.com/pektezol/bitreader"
4
5type NetStringCmd struct {
6 Command string
7}
8
9func ParseNetStringCmd(reader *bitreader.ReaderType) NetStringCmd {
10 return NetStringCmd{
11 Command: reader.TryReadString(),
12 }
13}
diff --git a/packets/messages/types/NetTick.go b/packets/messages/types/NetTick.go
new file mode 100644
index 0000000..9dae14b
--- /dev/null
+++ b/packets/messages/types/NetTick.go
@@ -0,0 +1,17 @@
1package types
2
3import "github.com/pektezol/bitreader"
4
5type NetTick struct {
6 Tick uint32
7 HostFrameTime float32
8 HostFrameTimeStdDeviation float32
9}
10
11func ParseNetTick(reader *bitreader.ReaderType) NetTick {
12 return NetTick{
13 Tick: reader.TryReadInt32(),
14 HostFrameTime: float32(reader.TryReadInt16()) / 1e5,
15 HostFrameTimeStdDeviation: float32(reader.TryReadInt16()) / 1e5,
16 }
17}
diff --git a/packets/messages/types/SvcClassInfo.go b/packets/messages/types/SvcClassInfo.go
new file mode 100644
index 0000000..58e43b7
--- /dev/null
+++ b/packets/messages/types/SvcClassInfo.go
@@ -0,0 +1,42 @@
1package types
2
3import (
4 "math"
5
6 "github.com/pektezol/bitreader"
7)
8
9type SvcClassInfo struct {
10 Length uint16
11 CreateOnClient bool
12 ServerClasses []ServerClass
13}
14
15type ServerClass struct {
16 ClassId int32
17 ClassName string
18 DataTableName string
19}
20
21func ParseSvcClassInfo(reader *bitreader.ReaderType) SvcClassInfo {
22 var serverclasses []ServerClass
23 svcclassinfo := SvcClassInfo{
24 Length: reader.TryReadInt16(),
25 CreateOnClient: reader.TryReadBool(),
26 }
27 if svcclassinfo.CreateOnClient {
28 for i := 0; i < int(svcclassinfo.Length); i++ {
29 id, err := reader.ReadBits(int(math.Log2(float64(svcclassinfo.Length))) + 1)
30 if err != nil {
31 panic(err)
32 }
33 serverclasses = append(serverclasses, ServerClass{
34 ClassId: int32(id),
35 ClassName: reader.TryReadString(),
36 DataTableName: reader.TryReadString(),
37 })
38 }
39 }
40 svcclassinfo.ServerClasses = serverclasses
41 return svcclassinfo
42}
diff --git a/packets/messages/types/SvcSendTable.go b/packets/messages/types/SvcSendTable.go
new file mode 100644
index 0000000..f76aadb
--- /dev/null
+++ b/packets/messages/types/SvcSendTable.go
@@ -0,0 +1,17 @@
1package types
2
3import "github.com/pektezol/bitreader"
4
5type SvcSendTable struct {
6 NeedsDecoder bool
7 Length uint8
8 Props int32
9}
10
11func ParseSvcSendTable(reader *bitreader.ReaderType) SvcSendTable {
12 return SvcSendTable{
13 NeedsDecoder: reader.TryReadBool(),
14 Length: reader.TryReadInt8(),
15 }
16 // No one cares about SvcSendTable
17}
diff --git a/packets/messages/types/SvcServerInfo.go b/packets/messages/types/SvcServerInfo.go
new file mode 100644
index 0000000..9d2648b
--- /dev/null
+++ b/packets/messages/types/SvcServerInfo.go
@@ -0,0 +1,43 @@
1package types
2
3import "github.com/pektezol/bitreader"
4
5type SvcServerInfo struct {
6 Protocol uint16
7 ServerCount uint32
8 IsHltv bool
9 IsDedicated bool
10 ClientCrc int32
11 MaxClasses uint16
12 MapCrc uint32
13 PlayerSlot uint8
14 MaxClients uint8
15 Unk uint32
16 TickInterval float32
17 COs byte
18 GameDir string
19 MapName string
20 SkyName string
21 HostName string
22}
23
24func ParseSvcServerInfo(reader *bitreader.ReaderType) SvcServerInfo {
25 return SvcServerInfo{
26 Protocol: reader.TryReadInt16(),
27 ServerCount: reader.TryReadInt32(),
28 IsHltv: reader.TryReadBool(),
29 IsDedicated: reader.TryReadBool(),
30 ClientCrc: int32(reader.TryReadInt32()),
31 MaxClasses: reader.TryReadInt16(),
32 MapCrc: reader.TryReadInt32(),
33 PlayerSlot: reader.TryReadInt8(),
34 MaxClients: reader.TryReadInt8(),
35 Unk: reader.TryReadInt32(),
36 TickInterval: reader.TryReadFloat32(),
37 COs: reader.TryReadInt8(),
38 GameDir: reader.TryReadString(),
39 MapName: reader.TryReadString(),
40 SkyName: reader.TryReadString(),
41 HostName: reader.TryReadString(),
42 }
43}
diff --git a/packets/messages/types/SvcSetPause.go b/packets/messages/types/SvcSetPause.go
new file mode 100644
index 0000000..040fb6a
--- /dev/null
+++ b/packets/messages/types/SvcSetPause.go
@@ -0,0 +1,11 @@
1package types
2
3import "github.com/pektezol/bitreader"
4
5type SvcSetPause struct {
6 Paused bool
7}
8
9func ParseSvcSetPause(reader *bitreader.ReaderType) SvcSetPause {
10 return SvcSetPause{Paused: reader.TryReadBool()}
11}