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);
                }
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #4
0
        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);
            }
        }
Beispiel #6
0
        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);
            }
        }
Beispiel #7
0
        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");
                }
            }
        }
Beispiel #8
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)));
        }
Beispiel #9
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)));
        }
Beispiel #10
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);
        }
Beispiel #11
0
 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);
 }
Beispiel #12
0
        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);
                }
            }
        }
Beispiel #13
0
 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);
            }
        }
Beispiel #15
0
        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);
            }
        }
Beispiel #16
0
        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();
        }
Beispiel #18
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 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);
     }
 }
Beispiel #22
0
 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)))));
            }
        }
Beispiel #27
0
        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);
        }
Beispiel #28
0
        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);
            }
        }
Beispiel #32
0
        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();
        }