Core/Networking: Fixes disconnect when trying to send packets larger then 0x400.
This commit is contained in:
@@ -83,7 +83,7 @@ namespace Game.DataStorage
|
|||||||
AzeriteTierUnlockSetStorage = ReadDB2<AzeriteTierUnlockSetRecord> ("AzeriteTierUnlockSet.db2", HotfixStatements.SEL_AZERITE_TIER_UNLOCK_SET);
|
AzeriteTierUnlockSetStorage = ReadDB2<AzeriteTierUnlockSetRecord> ("AzeriteTierUnlockSet.db2", HotfixStatements.SEL_AZERITE_TIER_UNLOCK_SET);
|
||||||
AzeriteUnlockMappingStorage = ReadDB2<AzeriteUnlockMappingRecord> ("AzeriteUnlockMapping.db2", HotfixStatements.SEL_AZERITE_UNLOCK_MAPPING);
|
AzeriteUnlockMappingStorage = ReadDB2<AzeriteUnlockMappingRecord> ("AzeriteUnlockMapping.db2", HotfixStatements.SEL_AZERITE_UNLOCK_MAPPING);
|
||||||
BankBagSlotPricesStorage = ReadDB2<BankBagSlotPricesRecord>("BankBagSlotPrices.db2", HotfixStatements.SEL_BANK_BAG_SLOT_PRICES);
|
BankBagSlotPricesStorage = ReadDB2<BankBagSlotPricesRecord>("BankBagSlotPrices.db2", HotfixStatements.SEL_BANK_BAG_SLOT_PRICES);
|
||||||
//BannedAddOnsStorage = ReadDB2<BannedAddOnsRecord>("BannedAddons.db2", HotfixStatements.SEL_BANNED_ADDONS);
|
BannedAddOnsStorage = ReadDB2<BannedAddonsRecord>("BannedAddons.db2", HotfixStatements.SEL_BANNED_ADDONS);
|
||||||
BarberShopStyleStorage = ReadDB2<BarberShopStyleRecord>("BarberShopStyle.db2", HotfixStatements.SEL_BARBER_SHOP_STYLE, HotfixStatements.SEL_BARBER_SHOP_STYLE_LOCALE);
|
BarberShopStyleStorage = ReadDB2<BarberShopStyleRecord>("BarberShopStyle.db2", HotfixStatements.SEL_BARBER_SHOP_STYLE, HotfixStatements.SEL_BARBER_SHOP_STYLE_LOCALE);
|
||||||
BattlePetBreedQualityStorage = ReadDB2<BattlePetBreedQualityRecord>("BattlePetBreedQuality.db2", HotfixStatements.SEL_BATTLE_PET_BREED_QUALITY);
|
BattlePetBreedQualityStorage = ReadDB2<BattlePetBreedQualityRecord>("BattlePetBreedQuality.db2", HotfixStatements.SEL_BATTLE_PET_BREED_QUALITY);
|
||||||
BattlePetBreedStateStorage = ReadDB2<BattlePetBreedStateRecord>("BattlePetBreedState.db2", HotfixStatements.SEL_BATTLE_PET_BREED_STATE);
|
BattlePetBreedStateStorage = ReadDB2<BattlePetBreedStateRecord>("BattlePetBreedState.db2", HotfixStatements.SEL_BATTLE_PET_BREED_STATE);
|
||||||
@@ -244,7 +244,7 @@ namespace Game.DataStorage
|
|||||||
RewardPackXItemStorage = ReadDB2<RewardPackXItemRecord>("RewardPackXItem.db2", HotfixStatements.SEL_REWARD_PACK_X_ITEM);
|
RewardPackXItemStorage = ReadDB2<RewardPackXItemRecord>("RewardPackXItem.db2", HotfixStatements.SEL_REWARD_PACK_X_ITEM);
|
||||||
ScenarioStorage = ReadDB2<ScenarioRecord>("Scenario.db2", HotfixStatements.SEL_SCENARIO, HotfixStatements.SEL_SCENARIO_LOCALE);
|
ScenarioStorage = ReadDB2<ScenarioRecord>("Scenario.db2", HotfixStatements.SEL_SCENARIO, HotfixStatements.SEL_SCENARIO_LOCALE);
|
||||||
ScenarioStepStorage = ReadDB2<ScenarioStepRecord>("ScenarioStep.db2", HotfixStatements.SEL_SCENARIO_STEP, HotfixStatements.SEL_SCENARIO_STEP_LOCALE);
|
ScenarioStepStorage = ReadDB2<ScenarioStepRecord>("ScenarioStep.db2", HotfixStatements.SEL_SCENARIO_STEP, HotfixStatements.SEL_SCENARIO_STEP_LOCALE);
|
||||||
//SceneScriptStorage = ReadDB2<SceneScriptRecord>("SceneScript.db2", HotfixStatements.SEL_SCENE_SCRIPT);
|
SceneScriptStorage = ReadDB2<SceneScriptRecord>("SceneScript.db2", HotfixStatements.SEL_SCENE_SCRIPT);
|
||||||
SceneScriptGlobalTextStorage = ReadDB2<SceneScriptGlobalTextRecord>("SceneScriptGlobalText.db2", HotfixStatements.SEL_SCENE_SCRIPT_GLOBAL_TEXT);
|
SceneScriptGlobalTextStorage = ReadDB2<SceneScriptGlobalTextRecord>("SceneScriptGlobalText.db2", HotfixStatements.SEL_SCENE_SCRIPT_GLOBAL_TEXT);
|
||||||
SceneScriptPackageStorage = ReadDB2<SceneScriptPackageRecord>("SceneScriptPackage.db2", HotfixStatements.SEL_SCENE_SCRIPT_PACKAGE);
|
SceneScriptPackageStorage = ReadDB2<SceneScriptPackageRecord>("SceneScriptPackage.db2", HotfixStatements.SEL_SCENE_SCRIPT_PACKAGE);
|
||||||
SceneScriptTextStorage = ReadDB2<SceneScriptTextRecord>("SceneScriptText.db2", HotfixStatements.SEL_SCENE_SCRIPT_TEXT);
|
SceneScriptTextStorage = ReadDB2<SceneScriptTextRecord>("SceneScriptText.db2", HotfixStatements.SEL_SCENE_SCRIPT_TEXT);
|
||||||
@@ -442,7 +442,7 @@ namespace Game.DataStorage
|
|||||||
public static DB6Storage<AzeriteTierUnlockSetRecord> AzeriteTierUnlockSetStorage;
|
public static DB6Storage<AzeriteTierUnlockSetRecord> AzeriteTierUnlockSetStorage;
|
||||||
public static DB6Storage<AzeriteUnlockMappingRecord> AzeriteUnlockMappingStorage;
|
public static DB6Storage<AzeriteUnlockMappingRecord> AzeriteUnlockMappingStorage;
|
||||||
public static DB6Storage<BankBagSlotPricesRecord> BankBagSlotPricesStorage;
|
public static DB6Storage<BankBagSlotPricesRecord> BankBagSlotPricesStorage;
|
||||||
//public static DB6Storage<BannedAddOnsRecord> BannedAddOnsStorage;
|
public static DB6Storage<BannedAddonsRecord> BannedAddOnsStorage;
|
||||||
public static DB6Storage<BarberShopStyleRecord> BarberShopStyleStorage;
|
public static DB6Storage<BarberShopStyleRecord> BarberShopStyleStorage;
|
||||||
public static DB6Storage<BattlePetBreedQualityRecord> BattlePetBreedQualityStorage;
|
public static DB6Storage<BattlePetBreedQualityRecord> BattlePetBreedQualityStorage;
|
||||||
public static DB6Storage<BattlePetBreedStateRecord> BattlePetBreedStateStorage;
|
public static DB6Storage<BattlePetBreedStateRecord> BattlePetBreedStateStorage;
|
||||||
@@ -603,7 +603,7 @@ namespace Game.DataStorage
|
|||||||
public static DB6Storage<RewardPackXItemRecord> RewardPackXItemStorage;
|
public static DB6Storage<RewardPackXItemRecord> RewardPackXItemStorage;
|
||||||
public static DB6Storage<ScenarioRecord> ScenarioStorage;
|
public static DB6Storage<ScenarioRecord> ScenarioStorage;
|
||||||
public static DB6Storage<ScenarioStepRecord> ScenarioStepStorage;
|
public static DB6Storage<ScenarioStepRecord> ScenarioStepStorage;
|
||||||
//public static DB6Storage<SceneScriptRecord> SceneScriptStorage;
|
public static DB6Storage<SceneScriptRecord> SceneScriptStorage;
|
||||||
public static DB6Storage<SceneScriptGlobalTextRecord> SceneScriptGlobalTextStorage;
|
public static DB6Storage<SceneScriptGlobalTextRecord> SceneScriptGlobalTextStorage;
|
||||||
public static DB6Storage<SceneScriptPackageRecord> SceneScriptPackageStorage;
|
public static DB6Storage<SceneScriptPackageRecord> SceneScriptPackageStorage;
|
||||||
public static DB6Storage<SceneScriptTextRecord> SceneScriptTextStorage;
|
public static DB6Storage<SceneScriptTextRecord> SceneScriptTextStorage;
|
||||||
|
|||||||
@@ -728,7 +728,6 @@ namespace Game.DataStorage
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
HotfixRecord hotfixRecord = new HotfixRecord();
|
HotfixRecord hotfixRecord = new HotfixRecord();
|
||||||
hotfixRecord.TableHash = tableHash;
|
hotfixRecord.TableHash = tableHash;
|
||||||
hotfixRecord.RecordID = recordId;
|
hotfixRecord.RecordID = recordId;
|
||||||
|
|||||||
@@ -243,12 +243,6 @@ namespace Game.Networking
|
|||||||
PacketHeader header = new PacketHeader();
|
PacketHeader header = new PacketHeader();
|
||||||
header.Read(_headerBuffer.GetData());
|
header.Read(_headerBuffer.GetData());
|
||||||
|
|
||||||
if (!header.IsValidSize())
|
|
||||||
{
|
|
||||||
Log.outError(LogFilter.Network, $"WorldSocket.ReadHeaderHandler(): client {GetRemoteIpAddress()} sent malformed packet (size: {header.Size})");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
_packetBuffer.Resize(header.Size);
|
_packetBuffer.Resize(header.Size);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -277,6 +271,13 @@ namespace Game.Networking
|
|||||||
PacketLog.Write(packet.GetData(), packet.GetOpcode(), GetRemoteIpAddress(), _connectType, true);
|
PacketLog.Write(packet.GetData(), packet.GetOpcode(), GetRemoteIpAddress(), _connectType, true);
|
||||||
|
|
||||||
ClientOpcodes opcode = (ClientOpcodes)packet.GetOpcode();
|
ClientOpcodes opcode = (ClientOpcodes)packet.GetOpcode();
|
||||||
|
|
||||||
|
if (opcode != ClientOpcodes.HotfixRequest && !header.IsValidSize())
|
||||||
|
{
|
||||||
|
Log.outError(LogFilter.Network, $"WorldSocket.ReadHeaderHandler(): client {GetRemoteIpAddress()} sent malformed packet (size: {header.Size})");
|
||||||
|
return ReadDataHandlerResult.Error;
|
||||||
|
}
|
||||||
|
|
||||||
switch (opcode)
|
switch (opcode)
|
||||||
{
|
{
|
||||||
case ClientOpcodes.Ping:
|
case ClientOpcodes.Ping:
|
||||||
@@ -376,7 +377,7 @@ namespace Game.Networking
|
|||||||
buffer.WriteUInt32(ZLib.adler32(0x9827D8F1, compressedData, compressedSize));
|
buffer.WriteUInt32(ZLib.adler32(0x9827D8F1, compressedData, compressedSize));
|
||||||
buffer.WriteBytes(compressedData, compressedSize);
|
buffer.WriteBytes(compressedData, compressedSize);
|
||||||
|
|
||||||
packetSize = (ushort)(compressedSize + 12);
|
packetSize = (int)(compressedSize + 12);
|
||||||
opcode = ServerOpcodes.CompressedPacket;
|
opcode = ServerOpcodes.CompressedPacket;
|
||||||
|
|
||||||
data = buffer.GetData();
|
data = buffer.GetData();
|
||||||
|
|||||||
Reference in New Issue
Block a user