Skip to content

Commit 25a98b1

Browse files
committed
Fixed Split* output formats when working with 32 bit opcode values
1 parent 266ba2e commit 25a98b1

File tree

7 files changed

+44
-99
lines changed

7 files changed

+44
-99
lines changed

WowPacketParser/Loading/BinaryPacketReader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace WowPacketParser.Loading
1010
{
1111
public sealed class BinaryPacketReader : IPacketReader
1212
{
13-
enum PktVersion
13+
public enum PktVersion
1414
{
1515
NoHeader = 0,
1616
// ReSharper disable InconsistentNaming

WowPacketParser/Loading/SniffFile.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
using System.IO;
77
using System.IO.Compression;
88
using System.Linq;
9-
using System.Text;
109
using System.Threading;
1110
using WowPacketParser.Enums;
1211
using WowPacketParser.Enums.Version;
@@ -542,31 +541,31 @@ public List<Packet> ReadPackets()
542541
private void FusionDump(ICollection<Packet> packets)
543542
{
544543
Trace.WriteLine($"{_logPrefix}: Merge {packets.Count} packets to a file...");
545-
FusionBinaryPacketWriter.Write(packets, Encoding.ASCII);
544+
FusionBinaryPacketWriter.Write(packets);
546545
}
547546

548547
private void SplitBinaryDump(ICollection<Packet> packets)
549548
{
550549
Trace.WriteLine($"{_logPrefix}: Splitting {packets.Count} packets to multiple files...");
551-
SplitBinaryPacketWriter.Write(packets, Encoding.ASCII);
550+
SplitBinaryPacketWriter.Write(packets);
552551
}
553552

554553
private void DirectionSplitBinaryDump(ICollection<Packet> packets)
555554
{
556555
Trace.WriteLine($"{_logPrefix}: Splitting {packets.Count} packets to multiple files...");
557-
SplitDirectionBinaryPacketWriter.Write(packets, Encoding.ASCII);
556+
SplitDirectionBinaryPacketWriter.Write(packets);
558557
}
559558

560559
private void SessionSplitBinaryDump(ICollection<Packet> packets)
561560
{
562561
Trace.WriteLine($"{_logPrefix}: Splitting {packets.Count} packets to multiple files...");
563-
SplitSessionBinaryPacketWriter.Write(packets, Encoding.ASCII);
562+
SplitSessionBinaryPacketWriter.Write(packets);
564563
}
565564

566565
private void BinaryDump(string fileName, ICollection<Packet> packets)
567566
{
568567
Trace.WriteLine($"{_logPrefix}: Copying {packets.Count} packets to .pkt format...");
569-
BinaryPacketWriter.Write(SniffType.Pkt, fileName, Encoding.ASCII, packets);
568+
BinaryPacketWriter.Write(fileName, FileMode.Create, packets);
570569
}
571570

572571
private void WriteSQLs(Packets packets)

WowPacketParser/Saving/BinaryPacketWriter.cs

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,43 @@
1-
using System.Collections.Generic;
2-
using System.Diagnostics.CodeAnalysis;
1+
using System;
2+
using System.Collections.Generic;
33
using System.IO;
44
using System.Text;
55
using WowPacketParser.Enums;
6+
using WowPacketParser.Loading;
67
using WowPacketParser.Misc;
78

89
namespace WowPacketParser.Saving
910
{
1011
public static class BinaryPacketWriter
1112
{
12-
[SuppressMessage("Microsoft.Reliability", "CA2000", Justification = "fileStream is disposed when writer is disposed.")]
13-
public static void Write(SniffType type, string fileName, Encoding encoding, IEnumerable<Packet> packets)
13+
public static void Write(string fileName, FileMode fileMode, IEnumerable<Packet> packets)
1414
{
15-
var fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None);
16-
using (var writer = new BinaryWriter(fileStream, encoding))
15+
using var fileStream = new FileStream(fileName, fileMode, FileAccess.Write, FileShare.None);
16+
using var writer = new BinaryWriter(fileStream, Encoding.ASCII);
17+
18+
writer.Write(['P', 'K', 'T']);
19+
writer.Write((ushort)BinaryPacketReader.PktVersion.V3_1);
20+
writer.Write((byte)0x15); // sniffer id (pretend to be ymir)
21+
writer.Write(ClientVersion.BuildInt);
22+
writer.Write(Encoding.ASCII.GetBytes(ClientLocale.ClientLocaleString));
23+
writer.Write(new byte[40]); // session key
24+
writer.Write((uint)0); // dump start timestamp
25+
writer.Write((uint)0); // dump start TickCount
26+
27+
uint optionalHeaderLength = 2;
28+
writer.Write(optionalHeaderLength); // optional header length
29+
writer.Write((ushort)0x0100); // sniffer version
30+
31+
foreach (var packet in packets)
1732
{
18-
foreach (var packet in packets)
19-
{
20-
if (type == SniffType.Pkt)
21-
{
22-
writer.Write((ushort) packet.Opcode);
23-
writer.Write((int) packet.Length);
24-
writer.Write((byte) packet.Direction);
25-
writer.Write(Utilities.GetUnixTimeFromDateTime(packet.Time));
26-
writer.Write(packet.GetStream(0));
27-
}
28-
else
29-
{
30-
writer.Write(packet.Opcode);
31-
writer.Write((int) packet.Length);
32-
writer.Write((int) Utilities.GetUnixTimeFromDateTime(packet.Time));
33-
writer.Write((byte) packet.Direction);
34-
writer.Write(packet.GetStream(0));
35-
}
36-
}
33+
writer.Write(packet.Direction == Direction.ClientToServer ? 0x47534d43u : 0x47534d53u);
34+
writer.Write(packet.ConnectionIndex);
35+
writer.Write((uint)0); // packet TickCount
36+
writer.Write((uint)8); // size of optional data
37+
writer.Write((uint)packet.Length + 4); // size of packet data
38+
writer.Write((double)((DateTimeOffset)packet.Time).ToUnixTimeMilliseconds()); // optional data
39+
writer.Write(packet.Opcode); // opcode
40+
writer.Write(packet.GetStream(0)); // data
3741
}
3842
}
3943
}

WowPacketParser/Saving/FusionBinaryPacketWriter.cs

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,15 @@
11
using System.Collections.Generic;
22
using System.IO;
33
using System.Linq;
4-
using System.Text;
54
using System.Threading.Tasks;
65
using WowPacketParser.Misc;
76

87
namespace WowPacketParser.Saving
98
{
109
public static class FusionBinaryPacketWriter
1110
{
12-
private static Encoding _encoding;
13-
14-
public static void Write(IEnumerable<Packet> packets, Encoding encoding)
11+
public static void Write(IEnumerable<Packet> packets)
1512
{
16-
_encoding = encoding;
17-
1813
// split packets by opcode (group is a set of packets all with the same opcode)
1914
var groups = packets.GroupBy(p => p.Opcode);
2015

@@ -29,17 +24,7 @@ private static void WriteGroup(IGrouping<int, Packet> groups)
2924
{
3025
var fileName = "Fusion.pkt";
3126

32-
using (var fileStream = new FileStream(fileName, FileMode.Append, FileAccess.Write))
33-
using (var writer = new BinaryWriter(fileStream, _encoding))
34-
foreach (var packet in group)
35-
{
36-
writer.Write((ushort)packet.Opcode);
37-
writer.Write((int)packet.Length);
38-
writer.Write((byte)packet.Direction);
39-
writer.Write(Utilities.GetUnixTimeFromDateTime(packet.Time));
40-
writer.Write(packet.GetStream(0));
41-
// TODO: Add ConnIdx in a backwards compatible way
42-
}
27+
BinaryPacketWriter.Write(fileName, FileMode.Append, group);
4328
}
4429
}
4530
}

WowPacketParser/Saving/SplitBinaryPacketWriter.cs

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System.Collections.Generic;
22
using System.IO;
33
using System.Linq;
4-
using System.Text;
54
using System.Threading.Tasks;
65
using WowPacketParser.Enums.Version;
76
using WowPacketParser.Misc;
@@ -11,11 +10,9 @@ namespace WowPacketParser.Saving
1110
public static class SplitBinaryPacketWriter
1211
{
1312
private const string Folder = "split"; // might want to move to config later
14-
private static Encoding _encoding;
1513

16-
public static void Write(IEnumerable<Packet> packets, Encoding encoding)
14+
public static void Write(IEnumerable<Packet> packets)
1715
{
18-
_encoding = encoding;
1916
Directory.CreateDirectory(Folder); // not doing anything if it exists already
2017

2118
// split packets by opcode (group is a set of packets all with the same opcode)
@@ -32,17 +29,7 @@ private static void WriteGroup(IGrouping<int, Packet> groups)
3229
{
3330
var fileName = Folder + "/" + Opcodes.GetOpcodeName(groups.Key, group.Key) + ".pkt";
3431

35-
using (var fileStream = new FileStream(fileName, FileMode.Append, FileAccess.Write))
36-
using (var writer = new BinaryWriter(fileStream, _encoding))
37-
foreach (var packet in group)
38-
{
39-
writer.Write((ushort)packet.Opcode);
40-
writer.Write((int)packet.Length);
41-
writer.Write((byte)packet.Direction);
42-
writer.Write(Utilities.GetUnixTimeFromDateTime(packet.Time));
43-
writer.Write(packet.GetStream(0));
44-
// TODO: Add ConnIdx in a backwards compatible way
45-
}
32+
BinaryPacketWriter.Write(fileName, FileMode.Append, group);
4633
}
4734
}
4835
}

WowPacketParser/Saving/SplitDirectionBinaryPacketWriter.cs

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System.Collections.Generic;
22
using System.IO;
33
using System.Linq;
4-
using System.Text;
54
using System.Threading.Tasks;
65
using WowPacketParser.Enums.Version;
76
using WowPacketParser.Misc;
@@ -11,12 +10,9 @@ namespace WowPacketParser.Saving
1110
public static class SplitDirectionBinaryPacketWriter
1211
{
1312
private const string Folder = "split"; // might want to move to config later
14-
private static Encoding _encoding;
1513

16-
public static void Write(IEnumerable<Packet> packets, Encoding encoding)
14+
public static void Write(IEnumerable<Packet> packets)
1715
{
18-
_encoding = encoding;
19-
2016
// not doing anything if it exists already
2117
Directory.CreateDirectory(Folder);
2218

@@ -35,16 +31,7 @@ private static void WriteGroup(IGrouping<int, Packet> groups)
3531
Directory.CreateDirectory(Folder + "/" + group.Key);
3632
var fileName = Folder + "/" + group.Key + "/" + Opcodes.GetOpcodeName(groups.Key, group.Key) + ".pkt";
3733

38-
using (var fileStream = new FileStream(fileName, FileMode.Append, FileAccess.Write))
39-
using (var writer = new BinaryWriter(fileStream, _encoding))
40-
foreach (var packet in group)
41-
{
42-
writer.Write((ushort)packet.Opcode);
43-
writer.Write((int)packet.Length);
44-
writer.Write((byte)packet.Direction);
45-
writer.Write(Utilities.GetUnixTimeFromDateTime(packet.Time));
46-
writer.Write(packet.GetStream(0));
47-
}
34+
BinaryPacketWriter.Write(fileName, FileMode.Append, group);
4835
}
4936
}
5037
}

WowPacketParser/Saving/SplitSessionBinaryPacketWriter.cs

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using System.IO;
44
using System.Linq;
55
using System.Net;
6-
using System.Text;
76
using System.Threading.Tasks;
87
using WowPacketParser.Misc;
98

@@ -12,11 +11,9 @@ namespace WowPacketParser.Saving
1211
public static class SplitSessionBinaryPacketWriter
1312
{
1413
private const string Folder = "split_session"; // might want to move to config later
15-
private static Encoding _encoding;
1614

17-
public static void Write(IEnumerable<Packet> packets, Encoding encoding)
15+
public static void Write(IEnumerable<Packet> packets)
1816
{
19-
_encoding = encoding;
2017
Directory.CreateDirectory(Folder); // not doing anything if it exists already
2118

2219
// split packets by session (group is a set of packets all with the same session)
@@ -28,23 +25,9 @@ public static void Write(IEnumerable<Packet> packets, Encoding encoding)
2825

2926
private static void WriteGroup(IGrouping<EndPoint, Packet> group)
3027
{
31-
string fileName = Folder + "/" + (group.Key?.GetHashCode().ToString(CultureInfo.InvariantCulture) ?? "0") + ".pkt";
28+
var fileName = Folder + "/" + (group.Key?.GetHashCode().ToString(CultureInfo.InvariantCulture) ?? "0") + ".pkt";
3229

33-
using (FileStream fileStream = new FileStream(fileName, FileMode.Append, FileAccess.Write))
34-
{
35-
using (BinaryWriter writer = new BinaryWriter(fileStream, _encoding))
36-
{
37-
foreach (Packet packet in group)
38-
{
39-
writer.Write((ushort) packet.Opcode);
40-
writer.Write((int) packet.Length);
41-
writer.Write((byte) packet.Direction);
42-
writer.Write(Utilities.GetUnixTimeFromDateTime(packet.Time));
43-
writer.Write(packet.GetStream(0));
44-
}
45-
}
46-
}
30+
BinaryPacketWriter.Write(fileName, FileMode.Append, group);
4731
}
4832
}
4933
}
50-

0 commit comments

Comments
 (0)