예제 #1
0
파일: WoWRealm.cs 프로젝트: Stewa91/123
        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);
        }
예제 #2
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);
        }
예제 #3
0
 public static void HandleJoinRequestV2(BattlenetPacket packet)
 {
     packet.Read<uint>("ClientSalt", 0, 32);
     packet.ReadSkip(20);
     packet.Read<byte>("Region", 0, 8);
     packet.ReadSkip(12);
     packet.Read<byte>("Site", 0, 8);
     packet.Read<uint>("Realm", 0, 32);
 }
예제 #4
0
파일: Profile.cs 프로젝트: Stewa91/123
 public static void HandleSettingsAvailable(BattlenetPacket packet)
 {
     packet.ReadSkip(5);
     packet.ReadByteArray("Path", 0, 6);
     packet.ReadSkip(21);
     packet.Read <ulong>("Id", 0, 64, "Address");
     packet.Read <uint>("Label", 0, 32, "Address");
     packet.Read <SettingsType>("Type", 1, 2);
 }
예제 #5
0
파일: WoWRealm.cs 프로젝트: Stewa91/123
 public static void HandleJoinRequestV2(BattlenetPacket packet)
 {
     packet.Read <uint>("ClientSalt", 0, 32);
     packet.ReadSkip(20);
     packet.Read <byte>("Region", 0, 8);
     packet.ReadSkip(12);
     packet.Read <byte>("Site", 0, 8);
     packet.Read <uint>("Realm", 0, 32);
 }
예제 #6
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);
        }
예제 #7
0
        public static void HandleReadRequest(BattlenetPacket packet)
        {
            packet.ReadSkip(21);
            packet.Read<ulong>("Id", 0, 64, "RecordAddress");
            packet.Read<uint>("Label", 0, 32, "RecordAddress");
            packet.Read<uint>("RequestId", 0, 32);
            if (packet.ReadBoolean())
            {
                var profiles = packet.Read<int>(0, 4);
                for (var i = 0; i < profiles; ++i)
                    packet.Read<ulong>("ProfileId", 0, 64, "Specification", "Reader");
            }

            var selection = packet.Read<int>(0, 3);
            switch (selection)
            {
                case 0:
                    packet.ReadByteArray("PrefixPath", 0, 6, "All");
                    break;
                case 1:
                    packet.ReadByteArray("PrefixPath", 0, 6, "Slice");
                    if (packet.ReadBoolean())
                        packet.Read<ulong>("SliceStart", long.MinValue, 64, "Slice");
                    if (packet.ReadBoolean())
                        packet.Read<ulong>("SliceEnd", long.MinValue, 64, "Slice");
                    if (packet.ReadBoolean())
                        packet.Read<uint>("RowLimit", 0, 32, "Slice");
                    if (packet.ReadBoolean())
                        packet.ReadBoolean("SingleDepth", "Slice");
                    break;
                case 2:
                    packet.ReadByteArray("PrefixPath", 0, 6, "Random");
                    var indices = packet.Read<int>(0, 7);
                    for (var i = 0; i < indices; ++i)
                        packet.Read<ulong>("Index", 0, 64, "Random", "Indices");
                    break;
                case 3:
                    var paths = packet.Read<int>(0, 5);
                    for (var i = 0; i < paths; ++i)
                        packet.ReadByteArray("PrefixPath", 0, 6, "MultiPath", "Paths");
                    break;
                case 4:
                    packet.ReadByteArray("PrefixPath", 0, 6, "Range");
                    if (packet.ReadBoolean())
                        packet.Read<ulong>("RangeStart", long.MinValue, 64, "Range");
                    if (packet.ReadBoolean())
                        packet.Read<ulong>("RangeEnd", long.MinValue, 64, "Range");
                    if (packet.ReadBoolean())
                        packet.Read<uint>("RowLimit", 0, 32, "Range");
                    if (packet.ReadBoolean())
                        packet.ReadBoolean("SingleDepth", "Range");
                    break;
            }
        }
예제 #8
0
파일: WoWRealm.cs 프로젝트: Stewa91/123
 public static void HandleToonReady(BattlenetPacket packet)
 {
     packet.Read <byte>("Region", 0, 8, "Name");
     packet.ReadFourCC("ProgramId", "Name");
     packet.Read <uint>("Realm", 0, 32, "Name");
     packet.ReadString("Name", 2, 7, "Name");
     packet.ReadSkip(21);
     packet.Read <ulong>("Id", 0, 64, "ProfileAddress");
     packet.Read <uint>("Label", 0, 32, "ProfileAddress");
     packet.Read <ulong>("Id", 0, 64, "Handle");
     packet.Read <uint>("Realm", 0, 32, "Handle");
     packet.Read <byte>("Region", 0, 8, "Handle");
     packet.ReadFourCC("ProgramId", "Handle");
 }
예제 #9
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);
     }
 }
예제 #10
0
파일: Cache.cs 프로젝트: Stewa91/123
        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);
            }
        }
예제 #11
0
 public static void HandleGetStreamItemsRequest(BattlenetPacket packet)
 {
     packet.ReadSkip(31);
     packet.Read<uint>("Token", 0, 32);
     packet.Read<uint>("ReferenceTime", int.MinValue, 32);
     packet.Read<StreamDirection>("Direction", 0, 1);
     packet.Read<byte>("MaxItems", 0, 6);
     packet.ReadFourCC("Locale");
     if (packet.ReadBoolean())
     {
         packet.ReadFourCC("ItemName");
         packet.ReadFourCC("Channel");
     }
     else
         packet.Read<ushort>("Index", 0, 16);
 }
예제 #12
0
파일: Cache.cs 프로젝트: Stewa91/123
 public static void HandleGetStreamItemsRequest(BattlenetPacket packet)
 {
     packet.ReadSkip(31);
     packet.Read <uint>("Token", 0, 32);
     packet.Read <uint>("ReferenceTime", int.MinValue, 32);
     packet.Read <StreamDirection>("Direction", 0, 1);
     packet.Read <byte>("MaxItems", 0, 6);
     packet.ReadFourCC("Locale");
     if (packet.ReadBoolean())
     {
         packet.ReadFourCC("ItemName");
         packet.ReadFourCC("Channel");
     }
     else
     {
         packet.Read <ushort>("Index", 0, 16);
     }
 }
예제 #13
0
        public static void HandleListSubscribeResponse(BattlenetPacket packet)
        {
            if (packet.ReadBoolean())
            {
                packet.Read<WowAuthResult>("Failure", 0, 8);
                return;
            }

            var charNumberCount = packet.Read<int>(0, 7);
            for (var i = 0; i < charNumberCount; ++i)
            {
                packet.Read<byte>("Region", 0, 8, "ToonCountEntry", i);
                packet.ReadSkip(12);
                packet.Read<byte>("Site", 0, 8, "ToonCountEntry", i);
                packet.Read<uint>("Realm", 0, 32, "ToonCountEntry", i);
                packet.Read<short>("Count", 0, 16, "ToonCountEntry", i);
            }
        }
예제 #14
0
파일: WoWRealm.cs 프로젝트: Stewa91/123
        public static void HandleListSubscribeResponse(BattlenetPacket packet)
        {
            if (packet.ReadBoolean())
            {
                packet.Read <WowAuthResult>("Failure", 0, 8);
                return;
            }

            var charNumberCount = packet.Read <int>(0, 7);

            for (var i = 0; i < charNumberCount; ++i)
            {
                packet.Read <byte>("Region", 0, 8, "ToonCountEntry", i);
                packet.ReadSkip(12);
                packet.Read <byte>("Site", 0, 8, "ToonCountEntry", i);
                packet.Read <uint>("Realm", 0, 32, "ToonCountEntry", i);
                packet.Read <short>("Count", 0, 16, "ToonCountEntry", i);
            }
        }
예제 #15
0
 public static void HandleToonReady(BattlenetPacket packet)
 {
     packet.Read<byte>("Region", 0, 8, "Name");
     packet.ReadFourCC("ProgramId", "Name");
     packet.Read<uint>("Realm", 0, 32, "Name");
     packet.ReadString("Name", 2, 7, "Name");
     packet.ReadSkip(21);
     packet.Read<ulong>("Id", 0, 64, "ProfileAddress");
     packet.Read<uint>("Label", 0, 32, "ProfileAddress");
     packet.Read<ulong>("Id", 0, 64, "Handle");
     packet.Read<uint>("Realm", 0, 32, "Handle");
     packet.Read<byte>("Region", 0, 8, "Handle");
     packet.ReadFourCC("ProgramId", "Handle");
 }
예제 #16
0
파일: Profile.cs 프로젝트: Stewa91/123
        public static void HandleReadRequest(BattlenetPacket packet)
        {
            packet.ReadSkip(21);
            packet.Read <ulong>("Id", 0, 64, "RecordAddress");
            packet.Read <uint>("Label", 0, 32, "RecordAddress");
            packet.Read <uint>("RequestId", 0, 32);
            if (packet.ReadBoolean())
            {
                var profiles = packet.Read <int>(0, 4);
                for (var i = 0; i < profiles; ++i)
                {
                    packet.Read <ulong>("ProfileId", 0, 64, "Specification", "Reader");
                }
            }

            var selection = packet.Read <int>(0, 3);

            switch (selection)
            {
            case 0:
                packet.ReadByteArray("PrefixPath", 0, 6, "All");
                break;

            case 1:
                packet.ReadByteArray("PrefixPath", 0, 6, "Slice");
                if (packet.ReadBoolean())
                {
                    packet.Read <ulong>("SliceStart", long.MinValue, 64, "Slice");
                }
                if (packet.ReadBoolean())
                {
                    packet.Read <ulong>("SliceEnd", long.MinValue, 64, "Slice");
                }
                if (packet.ReadBoolean())
                {
                    packet.Read <uint>("RowLimit", 0, 32, "Slice");
                }
                if (packet.ReadBoolean())
                {
                    packet.ReadBoolean("SingleDepth", "Slice");
                }
                break;

            case 2:
                packet.ReadByteArray("PrefixPath", 0, 6, "Random");
                var indices = packet.Read <int>(0, 7);
                for (var i = 0; i < indices; ++i)
                {
                    packet.Read <ulong>("Index", 0, 64, "Random", "Indices");
                }
                break;

            case 3:
                var paths = packet.Read <int>(0, 5);
                for (var i = 0; i < paths; ++i)
                {
                    packet.ReadByteArray("PrefixPath", 0, 6, "MultiPath", "Paths");
                }
                break;

            case 4:
                packet.ReadByteArray("PrefixPath", 0, 6, "Range");
                if (packet.ReadBoolean())
                {
                    packet.Read <ulong>("RangeStart", long.MinValue, 64, "Range");
                }
                if (packet.ReadBoolean())
                {
                    packet.Read <ulong>("RangeEnd", long.MinValue, 64, "Range");
                }
                if (packet.ReadBoolean())
                {
                    packet.Read <uint>("RowLimit", 0, 32, "Range");
                }
                if (packet.ReadBoolean())
                {
                    packet.ReadBoolean("SingleDepth", "Range");
                }
                break;
            }
        }
예제 #17
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);
        }
예제 #18
0
 public static void HandleSettingsAvailable(BattlenetPacket packet)
 {
     packet.ReadSkip(5);
     packet.ReadByteArray("Path", 0, 6);
     packet.ReadSkip(21);
     packet.Read<ulong>("Id", 0, 64, "Address");
     packet.Read<uint>("Label", 0, 32, "Address");
     packet.Read<SettingsType>("Type", 1, 2);
 }