forked from teeworlds-go/protocol
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathddnet_2part_snap_on_connect_test.go
More file actions
233 lines (212 loc) · 19.1 KB
/
ddnet_2part_snap_on_connect_test.go
File metadata and controls
233 lines (212 loc) · 19.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
package snapshot7_test
// ddnet rus production server
import (
"log"
"testing"
"github.com/teeworlds-go/protocol/internal/testutils/require"
"github.com/teeworlds-go/protocol/messages7"
"github.com/teeworlds-go/protocol/network7"
"github.com/teeworlds-go/protocol/packer"
"github.com/teeworlds-go/protocol/protocol7"
"github.com/teeworlds-go/protocol/snapshot7"
"github.com/teeworlds-go/protocol/teeworlds7"
)
// map Multeasymap
func TestDdnetCrash(t *testing.T) {
t.Parallel()
// snapshot captured with tcpdump
// generated by a ddnet production server with a bunch of players on it
// used goofworlds to connect
//
// libtw2 dissector details
// Teeworlds 0.7 Protocol packet
// Teeworlds 0.7 Protocol chunk: sys.snap
// Header (non-vital)
// Message: sys.snap
// Tick: 17377120
// Delta tick: 17377121
// Num parts: 2
// Part: 0
// Crc: 230743274
// Data (900 bytes)
dumpPart0 := []byte{
0x10, 0x04, 0x01, 0x01, 0x02, 0x03,
0x04, 0xf4, 0x34, 0x1c, 0x7e, 0x3e, 0xb6, 0x05, 0xb5, 0x86, 0x3e, 0xb6, 0x05, 0xb5, 0xa8, 0x49,
0xea, 0xa4, 0x68, 0x50, 0xd4, 0x48, 0xdf, 0xbd, 0x62, 0x95, 0x25, 0x2d, 0x3c, 0xd3, 0x50, 0x3c,
0x93, 0x8a, 0xef, 0x98, 0x06, 0x2f, 0x85, 0x1c, 0xf1, 0xa4, 0x06, 0x0a, 0xfd, 0xa6, 0x41, 0xf4,
0xee, 0x61, 0xc0, 0xb7, 0x54, 0x61, 0x93, 0xae, 0xa4, 0x85, 0xe7, 0x47, 0x57, 0x86, 0x42, 0x69,
0x1e, 0xf5, 0x8a, 0xbb, 0x9f, 0x14, 0x05, 0x75, 0x2b, 0xd4, 0x90, 0xa6, 0x1c, 0x8a, 0x5d, 0xcd,
0x49, 0x8a, 0xd1, 0x77, 0x41, 0xd2, 0xc2, 0xd3, 0x95, 0x62, 0x9a, 0xef, 0xc3, 0xe8, 0x7d, 0xa5,
0x0c, 0x4b, 0x1c, 0x25, 0x95, 0x1a, 0xac, 0xeb, 0x3e, 0xeb, 0xe9, 0x04, 0x8a, 0x4d, 0x4c, 0xd7,
0xc9, 0x4b, 0xd2, 0xc2, 0x83, 0x62, 0xc5, 0xf3, 0xa3, 0x6b, 0x10, 0x1a, 0x5d, 0x83, 0x09, 0x32,
0xe6, 0x6f, 0x02, 0xa6, 0x95, 0x23, 0x7e, 0x70, 0x18, 0x58, 0x6e, 0x49, 0x52, 0xde, 0xbd, 0x92,
0x16, 0x9e, 0xe2, 0xf9, 0xba, 0xd4, 0xd3, 0x15, 0x1c, 0x81, 0xcb, 0x31, 0x9c, 0x6d, 0x38, 0x8e,
0xae, 0x64, 0x9a, 0x58, 0xaf, 0x98, 0x06, 0x71, 0x01, 0xae, 0x7f, 0x0e, 0x92, 0x16, 0x1e, 0x7f,
0xaa, 0x72, 0xb5, 0x69, 0xc8, 0x5d, 0x19, 0x26, 0x1f, 0x72, 0x65, 0x54, 0x7c, 0x13, 0xf9, 0x08,
0xd0, 0xf3, 0x97, 0x7a, 0xd3, 0x90, 0x3a, 0x77, 0x5d, 0x26, 0x69, 0xe1, 0xf9, 0xec, 0xb3, 0xd4,
0xf9, 0xd8, 0x4e, 0xd1, 0x87, 0xa4, 0x96, 0x85, 0x23, 0x35, 0xbe, 0xd2, 0x95, 0xda, 0x82, 0x3b,
0xc6, 0xfc, 0xe0, 0xc3, 0x38, 0xd6, 0x5d, 0x8a, 0x92, 0x16, 0x1e, 0x54, 0x8e, 0x03, 0x28, 0x32,
0x4d, 0x9b, 0x16, 0x67, 0xbe, 0xb7, 0xa0, 0x6a, 0x9f, 0x55, 0x98, 0x00, 0x81, 0x22, 0x3f, 0xd2,
0xa4, 0x4e, 0x7b, 0x97, 0x4b, 0x5a, 0x78, 0x2e, 0xb3, 0x6d, 0x5a, 0x29, 0x70, 0x78, 0x8c, 0xb3,
0xe2, 0xc9, 0x14, 0x26, 0x00, 0x97, 0xaa, 0x7c, 0xa5, 0x63, 0x62, 0x19, 0xee, 0xa1, 0x6a, 0x77,
0x15, 0x4a, 0x5a, 0x78, 0xd2, 0xa9, 0xd2, 0x04, 0x7c, 0x1d, 0x7d, 0x47, 0x95, 0x3e, 0x52, 0x68,
0xa7, 0x2a, 0x5e, 0xae, 0x49, 0xd7, 0x09, 0x5c, 0x5b, 0xd0, 0xa0, 0x1c, 0x87, 0xa8, 0x2c, 0x69,
0xd1, 0xc2, 0x55, 0xb0, 0x2a, 0xfb, 0x30, 0x64, 0x02, 0xb4, 0x79, 0x48, 0x0b, 0x7e, 0x96, 0x43,
0x13, 0x9e, 0xff, 0xd2, 0x38, 0xc9, 0xf4, 0x74, 0x25, 0x2d, 0x0a, 0xcc, 0x27, 0x52, 0x4f, 0xd1,
0x57, 0xd5, 0xfe, 0x58, 0x29, 0x5d, 0x49, 0x0b, 0x14, 0xf3, 0x41, 0xf4, 0x11, 0x75, 0xfa, 0xaa,
0xda, 0x5f, 0x54, 0x4a, 0x57, 0xd2, 0x42, 0x88, 0xf9, 0x08, 0x54, 0x41, 0x15, 0xd4, 0xab, 0xfd,
0x2d, 0x02, 0x8e, 0xa7, 0x30, 0x5d, 0x49, 0x0b, 0x0b, 0x31, 0x1f, 0x0b, 0xd4, 0x66, 0xd8, 0x82,
0xda, 0xdf, 0xab, 0x94, 0xae, 0xa4, 0x85, 0x27, 0xe6, 0xe3, 0xa1, 0x0b, 0x8c, 0xd9, 0x82, 0xda,
0xdf, 0x1e, 0xd6, 0x04, 0x35, 0x4b, 0x57, 0xd2, 0xc2, 0x2e, 0x44, 0x3e, 0x76, 0xd4, 0x15, 0x67,
0x5f, 0x55, 0xfb, 0xdb, 0x34, 0xf8, 0x5b, 0x96, 0xae, 0xa4, 0x85, 0x8d, 0xd8, 0xdf, 0xad, 0x6d,
0xa9, 0xf1, 0x7b, 0xba, 0x92, 0x16, 0x6e, 0x62, 0x7f, 0x92, 0xa2, 0xe2, 0x59, 0xd3, 0x95, 0xb4,
0x20, 0x62, 0x3e, 0x04, 0xa5, 0x41, 0x91, 0xaf, 0xaa, 0xfd, 0x99, 0x69, 0x4a, 0x8d, 0xe2, 0x4a,
0x57, 0xd2, 0x82, 0x29, 0xe6, 0xc3, 0x44, 0x15, 0x7e, 0xb3, 0x05, 0xb5, 0xbf, 0xbe, 0x46, 0x5f,
0xa1, 0x55, 0xba, 0x92, 0x16, 0x7a, 0x31, 0x1f, 0x3d, 0xba, 0xd7, 0x8f, 0xba, 0x52, 0xfb, 0xfb,
0x97, 0xee, 0x9a, 0x7d, 0x78, 0xba, 0x92, 0x16, 0xfe, 0x62, 0x3e, 0xfe, 0xa8, 0xc2, 0xb4, 0x39,
0xab, 0xfd, 0xe5, 0x95, 0xd2, 0x95, 0xb4, 0x90, 0x8b, 0xf9, 0xc8, 0xd1, 0x65, 0x2a, 0x7c, 0x55,
0xed, 0xef, 0x94, 0xa6, 0x18, 0x1c, 0xe9, 0x4a, 0x5a, 0x38, 0x62, 0x3e, 0x0e, 0x9a, 0x08, 0x96,
0x97, 0xda, 0x9f, 0x3e, 0x45, 0xcd, 0x57, 0x4a, 0x57, 0xd2, 0x82, 0x5e, 0xcc, 0x87, 0x1e, 0x2d,
0xa7, 0xeb, 0xb3, 0xda, 0xdf, 0x5d, 0xa5, 0x74, 0x25, 0x2d, 0xdc, 0x89, 0xf9, 0xb8, 0x43, 0x3f,
0xb8, 0x97, 0x83, 0xda, 0x5f, 0x5d, 0x29, 0x5d, 0x49, 0x0b, 0xb5, 0xc0, 0xfe, 0xa6, 0x2a, 0xa5,
0x2b, 0x69, 0x61, 0x4a, 0xcc, 0xc7, 0x14, 0xc2, 0x4a, 0xf2, 0x98, 0xda, 0x9f, 0x5b, 0x29, 0x5d,
0x49, 0x0b, 0xae, 0x98, 0x0f, 0x17, 0x55, 0xe6, 0xe0, 0xab, 0x6a, 0x7f, 0x55, 0x69, 0x71, 0xb2,
0x2d, 0x4e, 0x57, 0xd2, 0x42, 0x95, 0x98, 0x8f, 0x2a, 0x94, 0xe6, 0x32, 0x5d, 0x53, 0xfb, 0xc3,
0x57, 0x4a, 0x57, 0xd2, 0x02, 0x5e, 0x60, 0x7f, 0xdf, 0xd2, 0xb2, 0xa4, 0x59, 0xba, 0x92, 0x16,
0xbe, 0x89, 0xf9, 0xf8, 0x86, 0xb6, 0xa5, 0xd8, 0x82, 0xda, 0x9f, 0x46, 0x97, 0xbb, 0x6f, 0x5a,
0x31, 0x5d, 0x49, 0x0b, 0x1a, 0x62, 0x3e, 0x34, 0xd0, 0x6f, 0x32, 0x6d, 0x41, 0xed, 0xcf, 0xa7,
0x52, 0xba, 0x92, 0x16, 0x7c, 0xc4, 0x7c, 0xf8, 0x20, 0xac, 0x2d, 0xeb, 0x9a, 0xda, 0x1f, 0x52,
0x23, 0xf0, 0xb5, 0xd2, 0x95, 0xb4, 0x80, 0x88, 0xf9, 0x40, 0x50, 0x9b, 0x09, 0xf8, 0xaa, 0xda,
0x9f, 0x67, 0xa5, 0x74, 0x25, 0x2d, 0x78, 0x8a, 0xf9, 0xf0, 0x44, 0x6d, 0x86, 0x2d, 0xa8, 0xfd,
0x25, 0x34, 0x69, 0x9a, 0x00, 0xd3, 0x95, 0xb4, 0x90, 0x20, 0xe6, 0x23, 0x01, 0xa5, 0xc0, 0x64,
0x0b, 0x6a, 0x7f, 0x68, 0x79, 0x31, 0xa0, 0x4e, 0xb7, 0x74, 0x25, 0x2d, 0xa0, 0x89, 0xf9, 0x40,
0x43, 0x5a, 0x3e, 0xa4, 0x6b, 0x6a, 0x7f, 0x05, 0xa1, 0x52, 0x9d, 0x2b, 0x99, 0xae, 0xa4, 0x85,
0x02, 0x31, 0x1f, 0x05, 0xe8, 0x1e, 0x99, 0xb6, 0xa0, 0xf6, 0x37, 0x57, 0x4a, 0x57, 0xd2, 0xc2,
0x2c, 0x30, 0x1f, 0x33, 0xca, 0x34, 0x74, 0x5d, 0xed, 0xaf, 0x5c, 0x23, 0x55, 0xd9, 0xa2, 0x74,
0x25, 0x2d, 0x94, 0xc5, 0x7c, 0x94, 0x91, 0x85, 0x8f, 0x7d, 0x55, 0xed, 0xef, 0x52, 0xa5, 0x74,
0x25, 0x2d, 0x5c, 0x12, 0xf3, 0x71, 0x09, 0x2d, 0x97, 0x69, 0x0b, 0x6a, 0xc5, 0x0d,
}
// part 0 -> 23 1.787747 8316 40719 TW7 910 sys.snap
packet := protocol7.Packet{}
err := packet.Unpack(dumpPart0)
require.NoError(t, err)
// content
require.Equal(t, 1, len(packet.Messages))
require.Equal(t, network7.MsgSysSnap, packet.Messages[0].MsgId())
part0, ok := packet.Messages[0].(*messages7.Snap)
require.Equal(t, true, ok)
require.Equal(t, 17377120, part0.GameTick)
require.Equal(t, 17377121, part0.DeltaTick)
require.Equal(t, 230743274, part0.Crc)
// Teeworlds 0.7 Protocol packet
// Teeworlds 0.7 Protocol chunk: sys.snap
// Header (non-vital)
// Message: sys.snap
// Tick: 17377120
// Delta tick: 17377121
// Num parts: 2
// Part: 1
// Crc: 230743274
// Data (761 bytes)
dumpPart1 := []byte{
0x10, 0x04, 0x01, 0x01, 0x02, 0x03,
0x04, 0x72, 0x7f, 0x87, 0x9f, 0x8f, 0x6d, 0x41, 0xad, 0xa1, 0x8f, 0x6d, 0x41, 0x2d, 0x50, 0x93,
0xd4, 0x49, 0xd1, 0xa0, 0xe8, 0x32, 0x7f, 0x7f, 0xd6, 0xa1, 0x9a, 0x56, 0xad, 0xd2, 0x95, 0xb4,
0x60, 0x2d, 0xf6, 0x67, 0x54, 0x29, 0x5d, 0x49, 0x0b, 0x46, 0x62, 0x3e, 0x8c, 0x50, 0x86, 0xdf,
0x7c, 0x55, 0xed, 0xaf, 0x3b, 0x45, 0x1f, 0x06, 0x47, 0xba, 0x92, 0x16, 0xba, 0xc5, 0x7c, 0x74,
0xa3, 0x34, 0x97, 0xe9, 0x9a, 0xda, 0xdf, 0xf4, 0x4a, 0xe9, 0x4a, 0x5a, 0x98, 0x2e, 0xf6, 0x87,
0x51, 0x1b, 0x47, 0x54, 0x4a, 0x57, 0xd2, 0x02, 0x86, 0x98, 0x0f, 0x0c, 0x74, 0x39, 0x05, 0xb6,
0xa0, 0xf6, 0x57, 0x94, 0x22, 0x55, 0xa8, 0x94, 0xae, 0xa4, 0x85, 0x22, 0x31, 0x1f, 0x45, 0xe8,
0x27, 0x67, 0x5f, 0x55, 0xfb, 0x6b, 0x4f, 0x51, 0x65, 0x57, 0x32, 0x5d, 0x49, 0x0b, 0xed, 0x62,
0x3e, 0xda, 0x51, 0x85, 0xae, 0x6c, 0x41, 0xed, 0x2f, 0xab, 0x36, 0x5a, 0x9a, 0x23, 0x5d, 0x49,
0x0b, 0x59, 0x62, 0x3e, 0xb2, 0x90, 0xa2, 0x0c, 0x5d, 0x57, 0xfb, 0x5b, 0x4b, 0x67, 0xc1, 0x43,
0xba, 0x92, 0x16, 0x56, 0x31, 0x1f, 0x2b, 0xba, 0x47, 0x83, 0xfa, 0xaa, 0xda, 0x5f, 0x27, 0x45,
0x97, 0x71, 0xc6, 0x74, 0x25, 0x2d, 0x74, 0xc4, 0x7c, 0x74, 0x50, 0x31, 0x16, 0xb6, 0xa0, 0xf6,
0x97, 0x58, 0xba, 0xaf, 0x84, 0x62, 0x4c, 0x57, 0xd2, 0x42, 0xa2, 0x98, 0x8f, 0x44, 0x64, 0x0c,
0x26, 0x5b, 0x50, 0xfb, 0xfb, 0x55, 0x29, 0x5d, 0x49, 0x0b, 0xbf, 0xc4, 0xfe, 0xb4, 0x03, 0x3f,
0x2a, 0x6e, 0xd3, 0x95, 0xb4, 0xa0, 0x2d, 0xe6, 0x43, 0x1b, 0x5d, 0xc5, 0xdf, 0x16, 0xd4, 0xfe,
0xb6, 0x56, 0x4a, 0x57, 0xd2, 0xc2, 0x56, 0x31, 0x1f, 0x5b, 0x91, 0xbf, 0x6b, 0xf0, 0x55, 0xb5,
0xbf, 0x8b, 0x95, 0xd2, 0x95, 0xb4, 0x70, 0x51, 0xec, 0x6f, 0x59, 0xa5, 0x74, 0x25, 0x2d, 0x2c,
0x13, 0xfb, 0xbb, 0x5e, 0x29, 0x5d, 0x49, 0x0b, 0xd7, 0x05, 0xf6, 0xf7, 0xa9, 0xe1, 0x2a, 0x5b,
0x9c, 0xae, 0xa4, 0x85, 0x4f, 0x62, 0x3e, 0x3e, 0x21, 0x54, 0x5d, 0xe7, 0x31, 0xb5, 0xbf, 0x2f,
0xa5, 0xdb, 0x32, 0xe3, 0xe9, 0x4a, 0x5a, 0xf8, 0x22, 0x30, 0x1f, 0x5f, 0x90, 0x1f, 0x2d, 0xf7,
0xaa, 0xfd, 0xb5, 0xae, 0x94, 0xae, 0xa4, 0x85, 0xd6, 0x62, 0x3e, 0x5a, 0xa3, 0x0a, 0x19, 0x3e,
0xa4, 0xf6, 0xe7, 0xe8, 0x4a, 0xe9, 0x4a, 0x5a, 0x70, 0xb4, 0x10, 0xf9, 0x70, 0x34, 0xc2, 0x75,
0xb5, 0x2d, 0xa8, 0xfd, 0x7d, 0x4d, 0x93, 0x96, 0xe0, 0x48, 0x57, 0xd2, 0xc2, 0xd7, 0x88, 0xf9,
0xf8, 0x1a, 0xa4, 0xa5, 0xc5, 0x16, 0xd4, 0xfe, 0xd4, 0x15, 0xd6, 0xb4, 0x15, 0x77, 0xb7, 0x74,
0x25, 0x2d, 0xa8, 0x4b, 0xcc, 0x87, 0xba, 0x90, 0x96, 0x0f, 0xe9, 0x9a, 0xda, 0x9f, 0xce, 0x1a,
0x8a, 0x47, 0xe7, 0xd2, 0x95, 0xb4, 0xa0, 0x33, 0x31, 0x1f, 0x3a, 0x43, 0x29, 0x2e, 0xd7, 0x35,
0xb5, 0x3f, 0x1d, 0xd2, 0x84, 0xde, 0x16, 0xa7, 0x2b, 0x69, 0x41, 0x07, 0x31, 0x1f, 0x3a, 0x20,
0x05, 0x2a, 0x6c, 0x41, 0xed, 0x6f, 0x5a, 0x2a, 0xa5, 0x2b, 0x69, 0x61, 0x5a, 0xc4, 0x7a, 0xd7,
0x9b, 0x74, 0x4c, 0xea, 0xf2, 0xaf, 0xf4, 0xeb, 0x47, 0xfb, 0x2e, 0x48, 0x5a, 0xb8, 0xae, 0x07,
0xc0, 0xa6, 0xf8, 0x95, 0xf4, 0xac, 0x4d, 0xfa, 0xd8, 0x16, 0xd4, 0x0c, 0xcc, 0xd4, 0x34, 0xc0,
0x98, 0xbf, 0x69, 0xaa, 0xa9, 0xc6, 0x5b, 0x29, 0xbd, 0xcf, 0x66, 0xb8, 0x1a, 0xa0, 0x1e, 0xa9,
0xc2, 0x62, 0x19, 0x9c, 0xda, 0x82, 0xda, 0x8e, 0xbb, 0x20, 0x69, 0xc1, 0x5a, 0x0f, 0x80, 0x8d,
0x0c, 0x4e, 0x6d, 0x41, 0x2d, 0x1e, 0xf8, 0xd8, 0x16, 0xd4, 0x0a, 0x85, 0x6b, 0xb6, 0xeb, 0x6d,
0x54, 0xf8, 0xd8, 0x16, 0xd4, 0xb2, 0xc3, 0x53, 0x94, 0xaa, 0x25, 0xd7, 0xa5, 0x86, 0x29, 0xb5,
0xb8, 0x52, 0xbd, 0x1f, 0xe1, 0x39, 0x48, 0x95, 0xa2, 0x05, 0xc7, 0xdd, 0x77, 0x9c, 0xda, 0x82,
0xda, 0x6e, 0xb1, 0x0b, 0x92, 0x16, 0x36, 0x7a, 0x00, 0xa4, 0x08, 0xdf, 0x71, 0x6a, 0x0b, 0x6a,
0x11, 0x97, 0xdd, 0xc7, 0xb6, 0xa0, 0x66, 0x69, 0x87, 0x42, 0xd4, 0xbb, 0xf1, 0xf3, 0xb1, 0x2d,
0xa8, 0x7d, 0xcc, 0x35, 0xe9, 0x77, 0x5f, 0xdb, 0xf5, 0xb6, 0xcc, 0x54, 0xaa, 0x64, 0xb7, 0x73,
0xaa, 0xa6, 0x40, 0xb5, 0x2b, 0x0b, 0x5d, 0xb2, 0x78, 0xfb, 0x2e, 0x48, 0x5a, 0xb8, 0xe9, 0x01,
0xb0, 0x29, 0x8a, 0xbb, 0x26, 0x0b, 0xaa, 0xf1, 0xf4, 0x2e, 0xf2, 0xf3, 0xb1, 0x2d, 0xa8, 0x61,
0x7d, 0xa3, 0xa2, 0xcb, 0x77, 0x0f, 0xae, 0x34, 0xac, 0x6f, 0x54, 0x74, 0xf9, 0x47, 0xb1, 0x0b,
0x92, 0x16, 0x2e, 0xea, 0x01, 0xb0, 0x29, 0xda, 0xef, 0x37, 0x0b, 0x5f, 0xc3, 0xb5, 0x31, 0xe9,
0x98, 0xd4, 0xe5, 0x8a, 0x1b,
}
// part 1 -> 25 1.787756 8316 40719 TW7 725 sys.snap
packet = protocol7.Packet{}
err = packet.Unpack(dumpPart1)
require.NoError(t, err)
// content
require.Equal(t, 1, len(packet.Messages))
require.Equal(t, network7.MsgSysSnap, packet.Messages[0].MsgId())
part1, ok := packet.Messages[0].(*messages7.Snap)
require.Equal(t, true, ok)
require.Equal(t, 17377120, part0.GameTick)
require.Equal(t, 17377121, part0.DeltaTick)
require.Equal(t, 230743274, part0.Crc)
// ------------------------------------
// client with state and delta unpacker
// ------------------------------------
client := teeworlds7.NewClient()
// part 0/2 (first)
client.SnapshotStorage.AddIncomingData(part0.Part, part0.NumParts, part0.Data)
// part 1/2 (last)
client.SnapshotStorage.AddIncomingData(part1.Part, part1.NumParts, part1.Data)
prevSnap, found := client.SnapshotStorage.Get(snapshot7.EmptySnapTick)
require.True(t, found)
u := &packer.Unpacker{}
u.Reset(client.SnapshotStorage.IncomingData())
newFullSnap, err := snapshot7.UnpackDelta(log.Default(), prevSnap, u)
require.NoError(t, err)
err = client.SnapshotStorage.Add(part1.GameTick, newFullSnap)
require.NoError(t, err)
}
// unprocessed game message id=12
// header: 4214c4
// payload: 0547697665207520746865204d6f6f6e20627920466561525a207c20332f3520e2988500343732323120e29a91207c2030383a353120e297b700476c616465206279205753696b65207c20332f3520e2988500343435363020e29a91207c2030363a353020e297b700476c617373426f78206279204b6e69676874203a33207c20332f3520e298850000000000000000000000
// full msg: 4214c40547697665207520746865204d6f6f6e20627920466561525a207c20332f3520e2988500343732323120e29a91207c2030383a353120e297b700476c616465206279205753696b65207c20332f3520e2988500343435363020e29a91207c2030363a353020e297b700476c617373426f78206279204b6e69676874203a33207c20332f3520e298850000000000000000000000
// got gamedata race red size=3 remaining unpacker data=a0a91b02040b0000acca2300beff0300020100170001abb8c8100b01004000beff030102000017010189fdc8100b02004000beff03020200001702019ae8ab100b030080fb5400beff0303020000170301a894c9100b04004000beff0304020000170401bd8fc9100b0500b0d94400beff03050202001705019b9ec8100b0600948e2f00beff03060200000b0700a4cf4f00beff03070200000b0800b8d62800beff0308020000170801acf5c8100b090098cf5a00beff03090200001709019a83c9100b0a0084f94200beff030a020000170a01bb8d9b100b0b009ce23c00beff030b020000170b019adf9e100b0c004000beff030c020000170c01b99ac8100b0d00ac954700beff030d020000170d01b5b0bc100b0e00b8f24000beff030e020000170e01a9bea2100b0f004000beff030f020000170f0191bbba100b10004000beff03100201000b11004000beff0311020000171101b0ffc7100b12004000beff0312020000171201bfbac8100b13008cc46200beff0313020000171301acb9c5100b14004000beff03140201000b15008ca64400beff0315020000171501a486c9100b1600b7a3fc0100beff0316020000171601838ac9100b17004000beff0317020000171701b0c3c5100b180084807600beff0318020000171801a8edc8100b19004000beff0319020000171901a894c9100b1a0090d2800100beff031a020000171a018693c9100b1b00bca5fd0700beff031b020000171b018cc6c5100b1c00b4de7e00beff031c020000171c01858ac9100b1d004000beff031d020100171d018a94c0100b1e0084ef6f00beff031e020000171e01929dc8100b1f004000beff031f020000171f01a98ac9100b2000b4fc4200beff03200200000b21004000beff03210200001721019683c8100b2200b8ec4700beff0322020000172201acb9c5100b23004000beff03230200000b2400a8d84a00beff0324020000172401b78bc9100b2500b8e84a00beff0325020000172501819ec8100b2600b8bf7e00beff03260200001726019a9bc9100b2700a88c6000beff0327020000172701b896c0100b28029c924600beff032802000017280185dcc8100b2900b8b99e0100beff03290200001729019592c9100b2a009cf7ee0100beff032a020000172a018f93c9100b2b004000beff032b0200000b2c00808d7700beff032c020000172c01b38ec9100b2d004000beff032d020000172d018edac8100b2e004000beff032e0200000b2f004000beff032f0200000b30004000beff03300201000b310094b36200beff0331020000173101b4c0c7100b32009cc34300beff0332020100173201a08cbb100b33004000beff03330200001733019a96c6100b35004000beff0335020200173501b287c9100b360090a64700beff03360200001736018c88c9100b3800b0dff80700beff03380200001738018cc6c5100b3b0094d66700beff033b020000173b0186b7c5100b3d0098ad6200beff033d0200000b3e004000beff033e0200000a30a19dc910900d915c008002d1060000400000900d905c00000a0a0001050000bdff03300a8080060002000000000000400a20909dc910a51dae578f0bd210d704000040000ea21db257ab01e8030000969fc91005010000bdff03200a808006969fc9100200010000809dc910b602e2050a06a89dc91091158d5a00b01265000040000a9115885ab8037f0000af9fc91005030000bdff03060a808006af9fc9100200020000999dc910b8046e0a07a89dc910af10894fc136df178d06000040050d9f108b4bce02d30300000000050000bdff03070a80800600020003000000078f060a2ea99dc910b015b15c0000cf010000400000b015b15c000000000000020000bdff032e0a80800600020005000000a705f4010a2fa99dc9108a15844ae401f234f10200014000128a15914a9102d20300000001020001bdff032f0a80800600020006000000a403fe020b2000b4fc4200beff03200200000b21004000beff03210200001721019683c8100b2200b8ec4700beff0322020000172201acb9c5100b23004000beff03230200000b2400a8d84a00beff0324020000172401b78bc9100b2500b8e84a00beff0325020000172501819ec8100b2600b8bf7e00beff03260200001726019a9bc9100b2700a88c6000beff0327020000172701b896c0100b28029c924600beff032802000017280185dcc8100b2900b8b99e0100beff03290200001729019592c9100b2a009cf7ee0100beff032a020000172a018f93c9100b2b004000beff032b0200000b2c00808d7700beff032c020000172c01b38ec9100b2d004000beff032d020000172d018edac8100b2e004000beff032e0200000b2f004000beff032f0200000b30004000beff03300201000b310094b36200beff0331020000173101b4c0c7100b32009cc34300beff0332020100173201a08cbb100b33004000beff03330200001733019a96c6100b35004000beff0335020200173501b287c9100b360090a64700beff03360200001736018c88c9100b3800b0dff80700beff03380200001738018cc6c5100b3b0094d66700beff033b020000173b0186b7c5100b3d0098ad6200beff033d0200000b3e004000beff033e0200000a30a19dc910900d915c008002d1060000400000900d905c00000a0a0001050000bdff03300a8080060002000100000000400a20b09dc910931e91598e098002d704010040000e911e9159ab01e80300000000010000bdff03200a80800600020002000000b602e2050a06b49dc9109115ad5b00b02ac401000040000a9115a25bb8037f0000af9fc91005030000bdff03060a808006af9fc9100200030000999dc9109404cc010a07b49dc9108911bc4c8014d92ff40101004005199f108b4bce02d30300000000050000bdff03070a80800600020004000000a605f0020a2eb39dc910b015b15c0000c5020000400000b015b15c000000000000020000bdff032e0a808006000200060000009a05c703
// panic: unexpected remaining size 746 after snapshot unpack
//
//
// goroutine 12 [running]:
// github.com/teeworlds-go/protocol/snapshot7.UnpackDelta(0xc00058e930, 0xc000f16240)
// /home/chiller/go/pkg/mod/github.com/teeworlds-go/protocol@v0.0.0-20240707012613-e2851cf3343e/snapshot7/snapshot7.go:213 +0xb74
// github.com/teeworlds-go/protocol/teeworlds7.(*Client).processSystem.func5()
// /home/chiller/go/pkg/mod/github.com/teeworlds-go/protocol@v0.0.0-20240707012613-e2851cf3343e/teeworlds7/system.go:93 +0x410
// github.com/teeworlds-go/protocol/teeworlds7.userMsgCallback[...]({0x0?, 0xf1a000?, 0x7f0a1b8312c8?}, 0x40?, 0x7f0a1b8e1a68?)
// /home/chiller/go/pkg/mod/github.com/teeworlds-go/protocol@v0.0.0-20240707012613-e2851cf3343e/teeworlds7/callbacks.go:26 +0x38
// github.com/teeworlds-go/protocol/teeworlds7.(*Client).processSystem(0xc000a2c008, {0x9ce1a0?, 0xc000c80370}, 0xc0000f8dc0)
// /home/chiller/go/pkg/mod/github.com/teeworlds-go/protocol@v0.0.0-20240707012613-e2851cf3343e/teeworlds7/system.go:57 +0x2e8
// github.com/teeworlds-go/protocol/teeworlds7.(*Client).processMessage(0xc000a2c008, {0x9ce1a0, 0xc000c80370}, 0xc0000f8dc0)
// /home/chiller/go/pkg/mod/github.com/teeworlds-go/protocol@v0.0.0-20240707012613-e2851cf3343e/teeworlds7/packet.go:35 +0x85
// github.com/teeworlds-go/protocol/teeworlds7.(*Client).processPacket(0xc000a2c008, 0xc0000f8d80)
// /home/chiller/go/pkg/mod/github.com/teeworlds-go/protocol@v0.0.0-20240707012613-e2851cf3343e/teeworlds7/packet.go:108 +0x49d
// github.com/teeworlds-go/protocol/teeworlds7.(*Client).Connect(0xc000a2c008, {0x7ffc3ae11842, 0xd}, 0x207c)
// /home/chiller/go/pkg/mod/github.com/teeworlds-go/protocol@v0.0.0-20240707012613-e2851cf3343e/teeworlds7/networking.go:76 +0x39e
// main.main.func2()
// /home/chiller/Desktop/git/teeworlds-go/goofworlds/main.go:192 +0xb9
// created by main.main in goroutine 1
// /home/chiller/Desktop/git/teeworlds-go/goofworlds/main.go:190 +0x21f