public static void HandleServerProofRequest(BattlenetPacket packet) { var modules = packet.Read <byte>(3); var module = new BattlenetModuleHandler(packet); for (var i = 0; i < modules; ++i) { packet.ReadString("Type", 4, i); packet.ReadFourCC("Region", i); var id = Utilities.ByteArrayToHexString(packet.ReadBytes(32)); packet.Stream.WriteLine(string.Format("[{0}] ModuleId: {1}", i, id)); var dataSize = packet.Read <int>("Data size", 10, i); var data = packet.ReadBytes(dataSize); var result = module.HandleData(id, data, i); if (!result.HasValue) { packet.Stream.WriteLine(string.Format("[{0}] Data: {1}", i, Utilities.ByteArrayToHexString(data))); } else if (!result.Value) { ModulesWaitingForData.Add(id); } } }
public static void HandleListUpdate(BattlenetPacket packet) { if (packet.ReadBoolean()) { packet.Read <uint>("Category", 0, 32); packet.ReadSingle("Population"); packet.Read <byte>("StateFlags", 0, 8); packet.ReadSkip(19); packet.Read <uint>("Type", int.MinValue, 32); packet.ReadString("Name", 0, 10); if (packet.ReadBoolean()) { packet.ReadString("Version", 0, 5, "PrivilegedData"); packet.Read <uint>("ConfigId", 0, 32, "PrivilegedData"); var ip = packet.ReadBytes(4); var port = packet.ReadBytes(2); Array.Reverse(port); packet.Stream.AddValue("Address", new IPEndPoint(new IPAddress(ip), BitConverter.ToUInt16(port, 0)), "PrivilegedData"); } packet.Read <RealmInfoFlags>("InfoFlags", 0, 8); } packet.Read <byte>("Region", 0, 8); packet.ReadSkip(12); packet.Read <byte>("Site", 0, 8); packet.Read <uint>("Realm", 0, 32); }
public static void HandleServerRealmUpdate(BattlenetPacket packet) { if (packet.Read <bool>(1)) { packet.Read <uint>("Timezone", 32); packet.ReadSingle("Population"); packet.Read <byte>("Lock", 8); packet.Read <uint>("Unk", 19); packet.Stream.AddValue("Type", packet.Read <uint>(32) + int.MinValue); packet.ReadString("Name", packet.Read <int>(10)); if (packet.Read <bool>("Has version", 1)) { packet.ReadString("Version", packet.Read <int>(5)); packet.Read <uint>("RealmId4", 32); var ip = packet.ReadBytes(4); var port = packet.ReadBytes(2); Array.Reverse(port); packet.Stream.AddValue("IP address", new IPAddress(ip)); packet.Stream.AddValue("Port", BitConverter.ToUInt16(port, 0)); } packet.Read <byte>("Flags", 8); } packet.Read <byte>("Region", 8); packet.Read <short>("Unk2", 12); packet.Read <byte>("Battlegroup", 8); packet.Read <uint>("Battlegroup index", 32); }
public static void HandleJoinResponse(BattlenetPacket packet) { if (packet.ReadBoolean()) { packet.Read<WowAuthResult>("Failure", 0, 8); return; } packet.Read<uint>("ServerSalt", 0, 32); var count = packet.Read<uint>(0, 5); for (var i = 0; i < count; ++i) { var ip = packet.ReadBytes(4); var port = packet.ReadBytes(2); Array.Reverse(port); packet.Stream.AddValue("Address", new IPEndPoint(new IPAddress(ip), BitConverter.ToUInt16(port, 0)), "v4", i); } count = packet.Read<uint>(0, 5); for (var i = 0; i < count; ++i) { var ip = packet.ReadBytes(16); var port = packet.ReadBytes(2); Array.Reverse(port); packet.Stream.AddValue("Address", new IPEndPoint(new IPAddress(ip), BitConverter.ToUInt16(port, 0)), "v6", i); } }
public static void HandleJoinResponse(BattlenetPacket packet) { if (packet.Read <bool>("Failed", 1)) { packet.Read <byte>("Error code", 8); return; } packet.Read <uint>("Server salt", 32); var count = packet.Read <uint>("IPv4 count", 5); for (var i = 0; i < count; ++i) { var ip = packet.ReadBytes(4); var port = packet.ReadBytes(2); Array.Reverse(port); packet.Stream.AddValue("IP address", new IPAddress(ip), i); packet.Stream.AddValue("Port", BitConverter.ToUInt16(port, 0), i); } count = packet.Read <uint>("IPv6 count", 5); for (var i = 0; i < count; ++i) { var ip = packet.ReadBytes(16); var port = packet.ReadBytes(2); Array.Reverse(port); packet.Stream.AddValue("IP address", new IPAddress(ip), i); packet.Stream.AddValue("Port", BitConverter.ToUInt16(port, 0), i); } }
public static void HandleJoinResponse(BattlenetPacket packet) { if (packet.ReadBoolean()) { packet.Read <WowAuthResult>("Failure", 0, 8); return; } packet.Read <uint>("ServerSalt", 0, 32); var count = packet.Read <uint>(0, 5); for (var i = 0; i < count; ++i) { var ip = packet.ReadBytes(4); var port = packet.ReadBytes(2); Array.Reverse(port); packet.Stream.AddValue("Address", new IPEndPoint(new IPAddress(ip), BitConverter.ToUInt16(port, 0)), "v4", i); } count = packet.Read <uint>(0, 5); for (var i = 0; i < count; ++i) { var ip = packet.ReadBytes(16); var port = packet.ReadBytes(2); Array.Reverse(port); packet.Stream.AddValue("Address", new IPEndPoint(new IPAddress(ip), BitConverter.ToUInt16(port, 0)), "v6", i); } }
public static void HandleResumeResponse(BattlenetPacket packet) { if (packet.ReadBoolean()) { if (packet.ReadBoolean()) // has module { packet.ReadFixedLengthString("Type", 4, "Strings"); packet.ReadFourCC("Region", "Strings"); var id = Convert.ToHexString(packet.ReadBytes("ModuleId", 32, "Strings")); var dataSize = packet.Read <int>("Data size", 0, 10); var data = packet.ReadBytes(dataSize); var module = new BattlenetModuleHandler(packet); if (!module.HandleData(id, data).HasValue) { packet.Stream.AddValue("Data", data, "Strings"); } } var errorType = packet.Read <byte>(2, 0); if (errorType == 1) { packet.Read <ushort>("Error", 0, 16); packet.Read <uint>("Failure", 0, 32); } } else { var modules = packet.Read <byte>(0, 3); var module = new BattlenetModuleHandler(packet); for (var i = 0; i < modules; ++i) { packet.ReadFixedLengthString("Type", 4, "FinalRequest", i); packet.ReadFourCC("Region", "FinalRequest", i); var id = Convert.ToHexString(packet.ReadBytes("ModuleId", 32, "FinalRequest", i)); var dataSize = packet.Read <int>("Data size", 0, 10, i); var data = packet.ReadBytes(dataSize); if (!module.HandleData(id, data, i).HasValue) { packet.Stream.AddValue("Data", data, "FinalRequest", i); } } packet.Read <uint>("PingTimeout", int.MinValue, 32); if (packet.ReadBoolean()) { Connection.ReadRegulatorInfo(packet, "RegulatorRules"); } } }
public static void HandleSTUNServers(BattlenetPacket packet) { var ip = packet.ReadBytes(4); var port = packet.ReadBytes(2); Array.Reverse(port); packet.Stream.AddValue("Server1", new IPEndPoint(new IPAddress(ip), BitConverter.ToUInt16(port, 0))); ip = packet.ReadBytes(4); port = packet.ReadBytes(2); Array.Reverse(port); packet.Stream.AddValue("Server2", new IPEndPoint(new IPAddress(ip), BitConverter.ToUInt16(port, 0))); }
public static void HandleSTUNServers(BattlenetPacket packet) { var ip = packet.ReadBytes(4); var port = packet.ReadBytes(2); Array.Reverse(port); packet.Stream.AddValue("Server1", new IPEndPoint(new IPAddress(ip), BitConverter.ToUInt16(port, 0))); ip = packet.ReadBytes(4); port = packet.ReadBytes(2); Array.Reverse(port); packet.Stream.AddValue("Server2", new IPEndPoint(new IPAddress(ip), BitConverter.ToUInt16(port, 0))); }
public static void HandleUpdateNotify(BattlenetPacket packet) { packet.ReadSkip(6); packet.Read<uint>("IdMaster", 0, 32); packet.ReadSkip(6); var count = packet.Read<int>(0, 4); for (var i = 0; i < count; ++i) packet.Read<uint>("Handle", 0, 32, "Update", "HandlesCleared", i); count = packet.Read<int>(0, 4); var varSizes = new Queue<ushort>(); for (var i = 0; i < count; ++i) varSizes.Enqueue(packet.Read<ushort>(0, 16)); count = packet.Read<int>(0, 4); var handles = new List<uint>(); for (var i = 0; i < count; ++i) handles.Add(packet.Read<uint>(0, 32)); var data = packet.ReadBytes(packet.Read<int>(0, 11)); HandleUpdateNotifyFields(packet.Stream, handles, data, varSizes); if (packet.ReadBoolean()) { packet.Read<uint>("Target", 0, 32, "Level0"); packet.ReadBoolean("IsLastPacket", "Level0"); } packet.ReadBoolean("ServerOnly"); packet.Read<byte>("Online", 0, 8); packet.Read<uint>("IdLocal", 0, 32); }
public static void HandleSettingsAvailable(BattlenetPacket packet) { packet.Read <byte>(5); // padding packet.Stream.AddValue("Smh", Utilities.ByteArrayToHexString(packet.ReadBytes(packet.Read <int>(6)))); packet.Read <int>(21); // padding packet.Read <ulong>("Flags", 64); packet.Read <uint>("Int", 32); packet.Read <byte>("Settings type", 2); }
public static void HandleProofRequest(BattlenetPacket packet) { var modules = packet.Read <byte>(0, 3); var module = new BattlenetModuleHandler(packet); for (var i = 0; i < modules; ++i) { packet.ReadFixedLengthString("Type", 4, i); packet.ReadFourCC("Region", i); var id = Convert.ToHexString(packet.ReadBytes("ModuleId", 32, i)); var dataSize = packet.Read <int>("Data size", 0, 10, i); var data = packet.ReadBytes(dataSize); var result = module.HandleData(id, data, i); if (!result.HasValue) { packet.Stream.AddValue("Data", data, i); } else if (!result.Value) { ModulesWaitingForData.Add(id); } } }
public static void HandleGetStreamItemsResponse(BattlenetPacket packet) { packet.Read<ushort>("Offset", 0, 16); packet.Read<ushort>("TotalNumItems", 0, 16); packet.Read<uint>("Token", 0, 32); var items = packet.Read<byte>(0, 6); for (var i = 0; i < items; ++i) { packet.ReadFixedLengthString("Type", 4, "Items", i); packet.ReadFourCC("Region", "Items", i); packet.ReadBytes("ModuleId", 32, "Items", i); packet.ReadSkip(27); packet.Read<uint>("PublicationTime", 0, 32, "Items", i); } }
public static void HandleGetStreamItemsResponse(BattlenetPacket packet) { packet.Read <ushort>("Unknown1", 16); packet.Read <ushort>("Unknown2", 16); packet.Read <uint>("Index", 32); var modules = packet.Read <byte>(6); for (var i = 0; i < modules; ++i) { packet.ReadString("Type", 4, i); packet.ReadFourCC("Region", i); packet.Stream.AddValue("ModuleId", Utilities.ByteArrayToHexString(packet.ReadBytes(32)), i); packet.Read <int>(27); // padding packet.Stream.AddValue("Publication time", Utilities.ByteArrayToHexString(BitConverter.GetBytes(packet.Read <uint>(32))), i); } }
public static void HandleGetStreamItemsResponse(BattlenetPacket packet) { packet.Read <ushort>("Offset", 0, 16); packet.Read <ushort>("TotalNumItems", 0, 16); packet.Read <uint>("Token", 0, 32); var items = packet.Read <byte>(0, 6); for (var i = 0; i < items; ++i) { packet.ReadFixedLengthString("Type", 4, "Items", i); packet.ReadFourCC("Region", "Items", i); packet.ReadBytes("ModuleId", 32, "Items", i); packet.ReadSkip(27); packet.Read <uint>("PublicationTime", 0, 32, "Items", i); } }
public static void HandleProofResponse(BattlenetPacket packet) { var modules = packet.Read <byte>(0, 3); var module = new BattlenetModuleHandler(packet); for (var i = 0; i < modules; ++i) { var dataSize = packet.Read <int>("Data size", 0, 10, i); var data = packet.ReadBytes(dataSize); if (!module.HandleData(ModulesWaitingForData[i], data, i).HasValue) { packet.Stream.AddValue("Data", data, i); } } ModulesWaitingForData.Clear(); }
public static void HandleProofResponse(BattlenetPacket packet) { var modules = packet.Read <byte>(3); var module = new BattlenetModuleHandler(packet); for (var i = 0; i < modules; ++i) { var dataSize = packet.Read <int>("Data size", 10, i); var data = packet.ReadBytes(dataSize); if (!module.HandleData(ModulesWaitingForData[i], data, i).HasValue) { packet.Stream.WriteLine(string.Format("[{0}] Data: {1}", i, Utilities.ByteArrayToHexString(data))); } } ModulesWaitingForData.Clear(); }
public static void HandleUpdateNotify(BattlenetPacket packet) { packet.ReadSkip(6); packet.Read <uint>("IdMaster", 0, 32); packet.ReadSkip(6); var count = packet.Read <int>(0, 4); for (var i = 0; i < count; ++i) { packet.Read <uint>("Handle", 0, 32, "Update", "HandlesCleared", i); } count = packet.Read <int>(0, 4); var varSizes = new Queue <ushort>(); for (var i = 0; i < count; ++i) { varSizes.Enqueue(packet.Read <ushort>(0, 16)); } count = packet.Read <int>(0, 4); var handles = new List <uint>(); for (var i = 0; i < count; ++i) { handles.Add(packet.Read <uint>(0, 32)); } var data = packet.ReadBytes(packet.Read <int>(0, 11)); HandleUpdateNotifyFields(packet.Stream, handles, data, varSizes); if (packet.ReadBoolean()) { packet.Read <uint>("Target", 0, 32, "Level0"); packet.ReadBoolean("IsLastPacket", "Level0"); } packet.ReadBoolean("ServerOnly"); packet.Read <byte>("Online", 0, 8); packet.Read <uint>("IdLocal", 0, 32); }
public static void HandleComplete(BattlenetPacket packet) { var failed = packet.Read <bool>(1); if (failed) { if (packet.Read <bool>(1)) // has module { packet.ReadString("Type", 4); packet.ReadFourCC("Region"); var id = Utilities.ByteArrayToHexString(packet.ReadBytes("ModuleId", 32)); var dataSize = packet.Read <int>("Data size", 10); var data = packet.ReadBytes(dataSize); var module = new BattlenetModuleHandler(packet); if (!module.HandleData(id, data).HasValue) { packet.Stream.AddValue("Data", data); } } var errorType = packet.Read <byte>(2); if (errorType == 1) { packet.Read <ushort>("Result", 16); packet.Read <uint>("Timeout", 32); } } else { var modules = packet.Read <byte>(3); var module = new BattlenetModuleHandler(packet); for (var i = 0; i < modules; ++i) { packet.ReadString("Type", 4); packet.ReadFourCC("Region"); var id = Utilities.ByteArrayToHexString(packet.ReadBytes("ModuleId", 32)); var dataSize = packet.Read <int>("Data size", 10); var data = packet.ReadBytes(dataSize); if (!module.HandleData(id, data, i).HasValue) { packet.Stream.AddValue("Data", data, i); } } packet.Stream.AddValue("Ping timeout", packet.Read <uint>(32) + int.MinValue); var hasOptionalData = packet.Read <bool>(1); if (hasOptionalData) { var hasConnectionInfo = packet.Read <bool>(1); if (hasConnectionInfo) { packet.Read <uint>("Threshold", 32); packet.Read <uint>("Rate", 32); } } packet.ReadString("First name", packet.Read <int>(8)); packet.ReadString("Last name", packet.Read <int>(8)); packet.Read <uint>("Account id", 32); packet.Read <byte>("Region", 8); packet.Read <ulong>("Account flags", 64); packet.Read <byte>("Game account region", 8); packet.ReadString("Game account name", packet.Read <int>(5) + 1); packet.Read <ulong>("Game account flags", 64); packet.Read <uint>("Failed logins", 32); if (packet.Read <bool>("Has RaF blob", 1)) { packet.ReadBytes("RaF Data", packet.Read <int>(10)); } } }
public static void HandleComplete(BattlenetPacket packet) { var failed = packet.Read <bool>(1); if (failed) { if (packet.Read <bool>(1)) // has module { var type = packet.ReadString(4); var region = packet.ReadFourCC(); var id = Utilities.ByteArrayToHexString(packet.ReadBytes(32)); var dataSize = packet.Read <int>(10); var data = packet.ReadBytes(dataSize); var module = new BattlenetModuleHandler(packet); packet.Stream.WriteLine(string.Format("Type: {0}", type)); packet.Stream.WriteLine(string.Format("Region: {0}", region)); packet.Stream.WriteLine(string.Format("ModuleId: {0}", id)); packet.Stream.WriteLine(string.Format("Data size: {0}", dataSize)); if (!module.HandleData(id, data).HasValue) { packet.Stream.WriteLine(string.Format("Data: {0}", Utilities.ByteArrayToHexString(data))); } } var errorType = packet.Read <byte>(2); if (errorType == 1) { packet.Stream.WriteLine(string.Format("Result: {0}", packet.Read <ushort>(16))); packet.Stream.WriteLine(string.Format("Unk: {0}", packet.Read <uint>(32))); } } else { var modules = packet.Read <byte>(3); var module = new BattlenetModuleHandler(packet); for (var i = 0; i < modules; ++i) { var type = packet.ReadString(4); var region = packet.ReadFourCC(); var id = Utilities.ByteArrayToHexString(packet.ReadBytes(32)); var dataSize = packet.Read <int>(10); var data = packet.ReadBytes(dataSize); packet.Stream.WriteLine(string.Format("[{0}] Type: {1}", i, type)); packet.Stream.WriteLine(string.Format("[{0}] Region: {1}", i, region)); packet.Stream.WriteLine(string.Format("[{0}] ModuleId: {1}", i, id)); packet.Stream.WriteLine(string.Format("[{0}] Data size: {1}", i, dataSize)); if (!module.HandleData(id, data, i).HasValue) { packet.Stream.WriteLine(string.Format("[{0}] Data: {1}", i, Utilities.ByteArrayToHexString(data))); } } packet.Stream.WriteLine(string.Format("Ping timeout: {0}", packet.Read <uint>(32) + int.MinValue)); var hasOptionalData = packet.Read <bool>(1); if (hasOptionalData) { var hasConnectionInfo = packet.Read <bool>(1); if (hasConnectionInfo) { packet.Read <uint>("Threshold", 32); packet.Read <uint>("Rate", 32); } } packet.ReadString("First name", packet.Read <int>(8)); packet.ReadString("Last name", packet.Read <int>(8)); packet.Read <uint>("Account id", 32); packet.Read <byte>("Unk8", 8); packet.Read <ulong>("Unk64", 64); packet.Read <byte>("Unk8", 8); packet.ReadString("Account name", packet.Read <int>(5) + 1); packet.Read <ulong>("Unk64", 64); packet.Read <uint>("Unk32", 32); if (packet.Read <bool>("Unk1", 1)) { packet.Stream.WriteLine(string.Format("Data: {0}", Utilities.ByteArrayToHexString(packet.ReadBytes(packet.Read <int>(10))))); } } }
public static void HandleGetStreamItemsResponse(BattlenetPacket packet) { packet.Read<ushort>("Unknown1", 16); packet.Read<ushort>("Unknown2", 16); packet.Read<uint>("Index", 32); var modules = packet.Read<byte>(6); for (var i = 0; i < modules; ++i) { packet.ReadString("Type", 4, i); packet.ReadFourCC("Region", i); packet.Stream.AddValue("ModuleId", Utilities.ByteArrayToHexString(packet.ReadBytes(32)), i); packet.Read<int>(27); // padding packet.Stream.AddValue("Publication time", Utilities.ByteArrayToHexString(BitConverter.GetBytes(packet.Read<uint>(32))), i); } }
public static void HandleReadResponse(BattlenetPacket packet) { packet.Read<uint>("RequestId", 0, 32); var type = packet.Read<int>(0, 2); switch (type) { case 0: packet.Read<uint>("NumPackets", 0, 32, "Start"); packet.Read<uint>("Type", 0, 32, "Start"); break; case 1: var raw = packet.ReadBytes(packet.Read<int>(0, 14)); using (var reader = new BinaryReader(new MemoryStream(raw))) { while (reader.BaseStream.Position < reader.BaseStream.Length) { var pathLength = UnpackInt(reader); packet.Stream.AddValue("Path", Utilities.ByteArrayToHexString(reader.ReadBytes((int)pathLength))); var fieldType = reader.ReadByte(); switch (fieldType) { case 1: //int var encodedInt = UnpackInt(reader); var decodedInt = 0L; var p1 = (encodedInt & 0xFFFFFFFF) >> 1; var p2 = ((encodedInt >> 32) & 0xFFFFFFFF) >> 1; if ((encodedInt & 1) != 0) decodedInt = ~p1 | (~p2 << 32); else decodedInt = p1 | (p2 << 32); packet.Stream.AddValue("Int", decodedInt); break; case 2: packet.Stream.AddValue("Float", reader.ReadDouble()); break; case 3: var binaryLength = UnpackInt(reader); packet.Stream.AddValue("Binary", Utilities.ByteArrayToHexString(reader.ReadBytes((int)binaryLength))); break; case 4: var stringLength = UnpackInt(reader); packet.Stream.AddValue("String", Encoding.UTF8.GetString(reader.ReadBytes((int)stringLength))); break; case 5: //pointer packet.Stream.AddValue("Unk", UnpackInt(reader), "Pointer"); packet.Stream.AddValue("Label", UnpackInt(reader), "Pointer"); packet.Stream.AddValue("Id", UnpackInt(reader), "Pointer"); break; case 6: //cache handle var handleLength = UnpackInt(reader); if (handleLength == 40) packet.Stream.AddValue("CacheHandle", Utilities.ByteArrayToHexString(reader.ReadBytes(40))); break; } } } break; case 2: packet.Read<ushort>("Failure", 0, 16); break; } }
public static void HandleProofResponse(BattlenetPacket packet) { var modules = packet.Read<byte>(0, 3); var module = new BattlenetModuleHandler(packet); for (var i = 0; i < modules; ++i) { var dataSize = packet.Read<int>("Data size", 0, 10, i); var data = packet.ReadBytes(dataSize); if (!module.HandleData(ModulesWaitingForData[i], data, i).HasValue) packet.Stream.AddValue("Data", data, i); } ModulesWaitingForData.Clear(); }
public static void HandleLogonResponse3(BattlenetPacket packet) { if (packet.ReadBoolean()) { if (packet.ReadBoolean()) // has module { packet.ReadFixedLengthString("Type", 4, "Strings"); packet.ReadFourCC("Region", "Strings"); var id = Utilities.ByteArrayToHexString(packet.ReadBytes("ModuleId", 32, "Strings")); var dataSize = packet.Read<int>("Data size", 0, 10); var data = packet.ReadBytes(dataSize); var module = new BattlenetModuleHandler(packet); if (!module.HandleData(id, data).HasValue) packet.Stream.AddValue("Data", data, "Strings"); } var errorType = packet.Read<byte>(2, 0); if (errorType == 1) { packet.Read<ushort>("Error", 0, 16); packet.Read<uint>("Failure", 0, 32); } } else { var modules = packet.Read<byte>(0, 3); var module = new BattlenetModuleHandler(packet); for (var i = 0; i < modules; ++i) { packet.ReadFixedLengthString("Type", 4, "FinalRequest", i); packet.ReadFourCC("Region", "FinalRequest", i); var id = Utilities.ByteArrayToHexString(packet.ReadBytes("ModuleId", 32, "FinalRequest", i)); var dataSize = packet.Read<int>("Data size", 0, 10, i); var data = packet.ReadBytes(dataSize); if (!module.HandleData(id, data, i).HasValue) packet.Stream.AddValue("Data", data, "FinalRequest", i); } packet.Read<uint>("PingTimeout", int.MinValue, 32); if (packet.ReadBoolean()) Connection.ReadRegulatorInfo(packet, "RegulatorRules"); packet.ReadString("GivenName", 0, 8); packet.ReadString("Surname", 0, 8); packet.Read<uint>("AccountId", 0, 32); packet.Read<byte>("Region", 0, 8); packet.Read<AccountFlags>("Flags", 0, 64); packet.Read<byte>("GameAccountRegion", 0, 8); packet.ReadString("GameAccountName", 1, 5); packet.Read<GameAccountFlags>("GameAccountFlags", 0, 64); packet.Read<uint>("LogonFailures", 0, 32); if (packet.ReadBoolean()) packet.ReadByteArray("Raf", 0, 10); } }
public static void HandleComplete(BattlenetPacket packet) { var failed = packet.Read<bool>(1); if (failed) { if (packet.Read<bool>(1)) // has module { packet.ReadString("Type", 4); packet.ReadFourCC("Region"); var id = Utilities.ByteArrayToHexString(packet.ReadBytes("ModuleId", 32)); var dataSize = packet.Read<int>("Data size", 10); var data = packet.ReadBytes(dataSize); var module = new BattlenetModuleHandler(packet); if (!module.HandleData(id, data).HasValue) packet.Stream.AddValue("Data", data); } var errorType = packet.Read<byte>(2); if (errorType == 1) { packet.Read<ushort>("Result", 16); packet.Read<uint>("Timeout", 32); } } else { var modules = packet.Read<byte>(3); var module = new BattlenetModuleHandler(packet); for (var i = 0; i < modules; ++i) { packet.ReadString("Type", 4); packet.ReadFourCC("Region"); var id = Utilities.ByteArrayToHexString(packet.ReadBytes("ModuleId", 32)); var dataSize = packet.Read<int>("Data size", 10); var data = packet.ReadBytes(dataSize); if (!module.HandleData(id, data, i).HasValue) packet.Stream.AddValue("Data", data, i); } packet.Stream.AddValue("Ping timeout", packet.Read<uint>(32) + int.MinValue); var hasOptionalData = packet.Read<bool>(1); if (hasOptionalData) { var hasConnectionInfo = packet.Read<bool>(1); if (hasConnectionInfo) { packet.Read<uint>("Threshold", 32); packet.Read<uint>("Rate", 32); } } packet.ReadString("First name", packet.Read<int>(8)); packet.ReadString("Last name", packet.Read<int>(8)); packet.Read<uint>("Account id", 32); packet.Read<byte>("Region", 8); packet.Read<ulong>("Account flags", 64); packet.Read<byte>("Game account region", 8); packet.ReadString("Game account name", packet.Read<int>(5) + 1); packet.Read<ulong>("Game account flags", 64); packet.Read<uint>("Failed logins", 32); if (packet.Read<bool>("Has RaF blob", 1)) packet.ReadBytes("RaF Data", packet.Read<int>(10)); } }
public static void HandleComplete(BattlenetPacket packet) { var failed = packet.Read<bool>(1); if (failed) { if (packet.Read<bool>(1)) // has module { var type = packet.ReadString(4); var region = packet.ReadFourCC(); var id = Utilities.ByteArrayToHexString(packet.ReadBytes(32)); var dataSize = packet.Read<int>(10); var data = packet.ReadBytes(dataSize); var module = new BattlenetModuleHandler(packet); packet.Stream.WriteLine(string.Format("Type: {0}", type)); packet.Stream.WriteLine(string.Format("Region: {0}", region)); packet.Stream.WriteLine(string.Format("ModuleId: {0}", id)); packet.Stream.WriteLine(string.Format("Data size: {0}", dataSize)); if (!module.HandleData(id, data).HasValue) packet.Stream.WriteLine(string.Format("Data: {0}", Utilities.ByteArrayToHexString(data))); } var errorType = packet.Read<byte>(2); if (errorType == 1) { packet.Stream.WriteLine(string.Format("Result: {0}", packet.Read<ushort>(16))); packet.Stream.WriteLine(string.Format("Unk: {0}", packet.Read<uint>(32))); } } else { var modules = packet.Read<byte>(3); var module = new BattlenetModuleHandler(packet); for (var i = 0; i < modules; ++i) { var type = packet.ReadString(4); var region = packet.ReadFourCC(); var id = Utilities.ByteArrayToHexString(packet.ReadBytes(32)); var dataSize = packet.Read<int>(10); var data = packet.ReadBytes(dataSize); packet.Stream.WriteLine(string.Format("[{0}] Type: {1}", i, type)); packet.Stream.WriteLine(string.Format("[{0}] Region: {1}", i, region)); packet.Stream.WriteLine(string.Format("[{0}] ModuleId: {1}", i, id)); packet.Stream.WriteLine(string.Format("[{0}] Data size: {1}", i, dataSize)); if (!module.HandleData(id, data, i).HasValue) packet.Stream.WriteLine(string.Format("[{0}] Data: {1}", i, Utilities.ByteArrayToHexString(data))); } packet.Stream.WriteLine(string.Format("Ping timeout: {0}", packet.Read<uint>(32) + int.MinValue)); var hasOptionalData = packet.Read<bool>(1); if (hasOptionalData) { var hasConnectionInfo = packet.Read<bool>(1); if (hasConnectionInfo) { packet.Read<uint>("Threshold", 32); packet.Read<uint>("Rate", 32); } } packet.ReadString("First name", packet.Read<int>(8)); packet.ReadString("Last name", packet.Read<int>(8)); packet.Read<uint>("Account id", 32); packet.Read<byte>("Unk8", 8); packet.Read<ulong>("Unk64", 64); packet.Read<byte>("Unk8", 8); packet.ReadString("Account name", packet.Read<int>(5) + 1); packet.Read<ulong>("Unk64", 64); packet.Read<uint>("Unk32", 32); if (packet.Read<bool>("Unk1", 1)) packet.Stream.WriteLine(string.Format("Data: {0}", Utilities.ByteArrayToHexString(packet.ReadBytes(packet.Read<int>(10))))); } }
public static void HandleListUpdate(BattlenetPacket packet) { if (packet.ReadBoolean()) { packet.Read<uint>("Category", 0, 32); packet.ReadSingle("Population"); packet.Read<byte>("StateFlags", 0, 8); packet.ReadSkip(19); packet.Read<uint>("Type", int.MinValue, 32); packet.ReadString("Name", 0, 10); if (packet.ReadBoolean()) { packet.ReadString("Version", 0, 5, "PrivilegedData"); packet.Read<uint>("ConfigId", 0, 32, "PrivilegedData"); var ip = packet.ReadBytes(4); var port = packet.ReadBytes(2); Array.Reverse(port); packet.Stream.AddValue("Address", new IPEndPoint(new IPAddress(ip), BitConverter.ToUInt16(port, 0)), "PrivilegedData"); } packet.Read<RealmInfoFlags>("InfoFlags", 0, 8); } packet.Read<byte>("Region", 0, 8); packet.ReadSkip(12); packet.Read<byte>("Site", 0, 8); packet.Read<uint>("Realm", 0, 32); }
public static void HandleLogonResponse3(BattlenetPacket packet) { if (packet.ReadBoolean()) { if (packet.ReadBoolean()) // has module { packet.ReadFixedLengthString("Type", 4, "Strings"); packet.ReadFourCC("Region", "Strings"); var id = Utilities.ByteArrayToHexString(packet.ReadBytes("ModuleId", 32, "Strings")); var dataSize = packet.Read <int>("Data size", 0, 10); var data = packet.ReadBytes(dataSize); var module = new BattlenetModuleHandler(packet); if (!module.HandleData(id, data).HasValue) { packet.Stream.AddValue("Data", data, "Strings"); } } var errorType = packet.Read <byte>(2, 0); if (errorType == 1) { packet.Read <ushort>("Error", 0, 16); packet.Read <uint>("Failure", 0, 32); } } else { var modules = packet.Read <byte>(0, 3); var module = new BattlenetModuleHandler(packet); for (var i = 0; i < modules; ++i) { packet.ReadFixedLengthString("Type", 4, "FinalRequest", i); packet.ReadFourCC("Region", "FinalRequest", i); var id = Utilities.ByteArrayToHexString(packet.ReadBytes("ModuleId", 32, "FinalRequest", i)); var dataSize = packet.Read <int>("Data size", 0, 10, i); var data = packet.ReadBytes(dataSize); if (!module.HandleData(id, data, i).HasValue) { packet.Stream.AddValue("Data", data, "FinalRequest", i); } } packet.Read <uint>("PingTimeout", int.MinValue, 32); if (packet.ReadBoolean()) { Connection.ReadRegulatorInfo(packet, "RegulatorRules"); } packet.ReadString("GivenName", 0, 8); packet.ReadString("Surname", 0, 8); packet.Read <uint>("AccountId", 0, 32); packet.Read <byte>("Region", 0, 8); packet.Read <AccountFlags>("Flags", 0, 64); packet.Read <byte>("GameAccountRegion", 0, 8); packet.ReadString("GameAccountName", 1, 5); packet.Read <GameAccountFlags>("GameAccountFlags", 0, 64); packet.Read <uint>("LogonFailures", 0, 32); if (packet.ReadBoolean()) { packet.ReadByteArray("Raf", 0, 10); } } }
public static void HandleSettingsAvailable(BattlenetPacket packet) { packet.Read<byte>(5); // padding packet.Stream.AddValue("Smh", Utilities.ByteArrayToHexString(packet.ReadBytes(packet.Read<int>(6)))); packet.Read<int>(21); // padding packet.Read<ulong>("Flags", 64); packet.Read<uint>("Int", 32); packet.Read<byte>("Settings type", 2); }
public static void HandleServerRealmUpdate(BattlenetPacket packet) { if (!packet.Read<bool>(1)) return; packet.Read<uint>("Timezone", 32); packet.ReadSingle("Population"); packet.Read<byte>("Lock", 8); packet.Read<uint>("Unk", 19); packet.Stream.WriteLine(string.Format("Type: {0}", packet.Read<uint>(32) + int.MinValue)); packet.ReadString("Name", packet.Read<int>(10)); if (packet.Read<bool>("Has version", 1)) { packet.ReadString("Version", packet.Read<int>(5)); packet.Read<uint>("RealmId4", 32); var ip = packet.ReadBytes(4); var port = packet.ReadBytes(2); Array.Reverse(port); packet.Stream.WriteLine("IP address: {0}", new IPAddress(ip)); packet.Stream.WriteLine("Port: {0}", BitConverter.ToUInt16(port, 0)); } packet.Read<byte>("Flags", 8); packet.Read<byte>("Region", 8); packet.Read<short>("Unk2", 12); packet.Read<byte>("Battlegroup", 8); packet.Read<uint>("Battlegroup index", 32); }
public static void HandleServerProofRequest(BattlenetPacket packet) { var modules = packet.Read<byte>(3); var module = new BattlenetModuleHandler(packet); for (var i = 0; i < modules; ++i) { packet.ReadString("Type", 4, i); packet.ReadFourCC("Region", i); var id = Utilities.ByteArrayToHexString(packet.ReadBytes(32)); packet.Stream.WriteLine(string.Format("[{0}] ModuleId: {1}", i, id)); var dataSize = packet.Read<int>("Data size", 10, i); var data = packet.ReadBytes(dataSize); var result = module.HandleData(id, data, i); if (!result.HasValue) packet.Stream.WriteLine(string.Format("[{0}] Data: {1}", i, Utilities.ByteArrayToHexString(data))); else if (!result.Value) ModulesWaitingForData.Add(id); } }
public static void HandleReadResponse(BattlenetPacket packet) { packet.Read <uint>("RequestId", 0, 32); var type = packet.Read <int>(0, 2); switch (type) { case 0: packet.Read <uint>("NumPackets", 0, 32, "Start"); packet.Read <uint>("Type", 0, 32, "Start"); break; case 1: var raw = packet.ReadBytes(packet.Read <int>(0, 14)); using (var reader = new BinaryReader(new MemoryStream(raw))) { while (reader.BaseStream.Position < reader.BaseStream.Length) { var pathLength = UnpackInt(reader); packet.Stream.AddValue("Path", Utilities.ByteArrayToHexString(reader.ReadBytes((int)pathLength))); var fieldType = reader.ReadByte(); switch (fieldType) { case 1: //int var encodedInt = UnpackInt(reader); var decodedInt = 0L; var p1 = (encodedInt & 0xFFFFFFFF) >> 1; var p2 = ((encodedInt >> 32) & 0xFFFFFFFF) >> 1; if ((encodedInt & 1) != 0) { decodedInt = ~p1 | (~p2 << 32); } else { decodedInt = p1 | (p2 << 32); } packet.Stream.AddValue("Int", decodedInt); break; case 2: packet.Stream.AddValue("Float", reader.ReadDouble()); break; case 3: var binaryLength = UnpackInt(reader); packet.Stream.AddValue("Binary", Utilities.ByteArrayToHexString(reader.ReadBytes((int)binaryLength))); break; case 4: var stringLength = UnpackInt(reader); packet.Stream.AddValue("String", Encoding.UTF8.GetString(reader.ReadBytes((int)stringLength))); break; case 5: //pointer packet.Stream.AddValue("Unk", UnpackInt(reader), "Pointer"); packet.Stream.AddValue("Label", UnpackInt(reader), "Pointer"); packet.Stream.AddValue("Id", UnpackInt(reader), "Pointer"); break; case 6: //cache handle var handleLength = UnpackInt(reader); if (handleLength == 40) { packet.Stream.AddValue("CacheHandle", Utilities.ByteArrayToHexString(reader.ReadBytes(40))); } break; } } } break; case 2: packet.Read <ushort>("Failure", 0, 16); break; } }
public static void HandleProofRequest(BattlenetPacket packet) { var modules = packet.Read<byte>(0, 3); var module = new BattlenetModuleHandler(packet); for (var i = 0; i < modules; ++i) { packet.ReadFixedLengthString("Type", 4, i); packet.ReadFourCC("Region", i); var id = Utilities.ByteArrayToHexString(packet.ReadBytes("ModuleId", 32, i)); var dataSize = packet.Read<int>("Data size", 0, 10, i); var data = packet.ReadBytes(dataSize); var result = module.HandleData(id, data, i); if (!result.HasValue) packet.Stream.AddValue("Data", data, i); else if (!result.Value) ModulesWaitingForData.Add(id); } }
public static void HandleJoinResponse(BattlenetPacket packet) { if (packet.Read<bool>("Failed", 1)) { packet.Read<byte>("Error code", 8); return; } packet.Read<uint>("Server salt", 32); var count = packet.Read<uint>("IPv4 count", 5); for (var i = 0; i < count; ++i) { var ip = packet.ReadBytes(4); var port = packet.ReadBytes(2); Array.Reverse(port); packet.Stream.WriteLine("[{0}] IP address: {1}", i, new IPAddress(ip)); packet.Stream.WriteLine("[{0}] Port: {1}", i, BitConverter.ToUInt16(port, 0)); } count = packet.Read<uint>("IPv6 count", 5); for (var i = 0; i < count; ++i) { var ip = packet.ReadBytes(16); var port = packet.ReadBytes(2); Array.Reverse(port); packet.Stream.WriteLine("[{0}] IP address: {1}", i, new IPAddress(ip)); packet.Stream.WriteLine("[{0}] Port: {1}", i, BitConverter.ToUInt16(port, 0)); } }
public static void HandleProofResponse(BattlenetPacket packet) { var modules = packet.Read<byte>(3); var module = new BattlenetModuleHandler(packet); for (var i = 0; i < modules; ++i) { var dataSize = packet.Read<int>("Data size", 10, i); var data = packet.ReadBytes(dataSize); if (!module.HandleData(ModulesWaitingForData[i], data, i).HasValue) packet.Stream.WriteLine(string.Format("[{0}] Data: {1}", i, Utilities.ByteArrayToHexString(data))); } ModulesWaitingForData.Clear(); }