summaryrefslogtreecommitdiffstats
path: root/src/Protocol/ProtocolRecognizer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Protocol/ProtocolRecognizer.cpp')
-rw-r--r--src/Protocol/ProtocolRecognizer.cpp359
1 files changed, 87 insertions, 272 deletions
diff --git a/src/Protocol/ProtocolRecognizer.cpp b/src/Protocol/ProtocolRecognizer.cpp
index fe53aede1..af9e0d1bc 100644
--- a/src/Protocol/ProtocolRecognizer.cpp
+++ b/src/Protocol/ProtocolRecognizer.cpp
@@ -7,11 +7,6 @@
#include "Globals.h"
#include "ProtocolRecognizer.h"
-#include "Protocol125.h"
-#include "Protocol132.h"
-#include "Protocol14x.h"
-#include "Protocol15x.h"
-#include "Protocol16x.h"
#include "Protocol17x.h"
#include "Protocol18x.h"
#include "../ClientHandle.h"
@@ -27,7 +22,7 @@
cProtocolRecognizer::cProtocolRecognizer(cClientHandle * a_Client) :
super(a_Client),
- m_Protocol(NULL),
+ m_Protocol(nullptr),
m_Buffer(8192) // We need a larger buffer to support BungeeCord - it sends one huge packet at the start
{
}
@@ -39,7 +34,7 @@ cProtocolRecognizer::cProtocolRecognizer(cClientHandle * a_Client) :
cProtocolRecognizer::~cProtocolRecognizer()
{
delete m_Protocol;
- m_Protocol = NULL;
+ m_Protocol = nullptr;
}
@@ -50,17 +45,6 @@ AString cProtocolRecognizer::GetVersionTextFromInt(int a_ProtocolVersion)
{
switch (a_ProtocolVersion)
{
- case PROTO_VERSION_1_2_5: return "1.2.5";
- case PROTO_VERSION_1_3_2: return "1.3.2";
- // case PROTO_VERSION_1_4_2: return "1.4.2";
- case PROTO_VERSION_1_4_4: return "1.4.4";
- case PROTO_VERSION_1_4_6: return "1.4.6";
- case PROTO_VERSION_1_5_0: return "1.5";
- case PROTO_VERSION_1_5_2: return "1.5.2";
- case PROTO_VERSION_1_6_1: return "1.6.1";
- case PROTO_VERSION_1_6_2: return "1.6.2";
- case PROTO_VERSION_1_6_3: return "1.6.3";
- case PROTO_VERSION_1_6_4: return "1.6.4";
case PROTO_VERSION_1_7_2: return "1.7.2";
case PROTO_VERSION_1_7_6: return "1.7.6";
case PROTO_VERSION_1_8_0: return "1.8";
@@ -75,7 +59,7 @@ AString cProtocolRecognizer::GetVersionTextFromInt(int a_ProtocolVersion)
void cProtocolRecognizer::DataReceived(const char * a_Data, size_t a_Size)
{
- if (m_Protocol == NULL)
+ if (m_Protocol == nullptr)
{
if (!m_Buffer.Write(a_Data, a_Size))
{
@@ -106,7 +90,7 @@ void cProtocolRecognizer::DataReceived(const char * a_Data, size_t a_Size)
void cProtocolRecognizer::SendAttachEntity(const cEntity & a_Entity, const cEntity * a_Vehicle)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendAttachEntity(a_Entity, a_Vehicle);
}
@@ -116,7 +100,7 @@ void cProtocolRecognizer::SendAttachEntity(const cEntity & a_Entity, const cEnti
void cProtocolRecognizer::SendBlockAction(int a_BlockX, int a_BlockY, int a_BlockZ, char a_Byte1, char a_Byte2, BLOCKTYPE a_BlockType)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendBlockAction(a_BlockX, a_BlockY, a_BlockZ, a_Byte1, a_Byte2, a_BlockType);
}
@@ -126,7 +110,7 @@ void cProtocolRecognizer::SendBlockAction(int a_BlockX, int a_BlockY, int a_Bloc
void cProtocolRecognizer::SendBlockBreakAnim(int a_entityID, int a_BlockX, int a_BlockY, int a_BlockZ, char stage)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendBlockBreakAnim(a_entityID, a_BlockX, a_BlockY, a_BlockZ, stage);
}
@@ -136,7 +120,7 @@ void cProtocolRecognizer::SendBlockBreakAnim(int a_entityID, int a_BlockX, int a
void cProtocolRecognizer::SendBlockChange(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendBlockChange(a_BlockX, a_BlockY, a_BlockZ, a_BlockType, a_BlockMeta);
}
@@ -146,7 +130,7 @@ void cProtocolRecognizer::SendBlockChange(int a_BlockX, int a_BlockY, int a_Bloc
void cProtocolRecognizer::SendBlockChanges(int a_ChunkX, int a_ChunkZ, const sSetBlockVector & a_Changes)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendBlockChanges(a_ChunkX, a_ChunkZ, a_Changes);
}
@@ -156,7 +140,7 @@ void cProtocolRecognizer::SendBlockChanges(int a_ChunkX, int a_ChunkZ, const sSe
void cProtocolRecognizer::SendChat(const AString & a_Message)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendChat(a_Message);
}
@@ -166,7 +150,7 @@ void cProtocolRecognizer::SendChat(const AString & a_Message)
void cProtocolRecognizer::SendChat(const cCompositeChat & a_Message)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendChat(a_Message);
}
@@ -176,7 +160,7 @@ void cProtocolRecognizer::SendChat(const cCompositeChat & a_Message)
void cProtocolRecognizer::SendChunkData(int a_ChunkX, int a_ChunkZ, cChunkDataSerializer & a_Serializer)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendChunkData(a_ChunkX, a_ChunkZ, a_Serializer);
}
@@ -186,7 +170,7 @@ void cProtocolRecognizer::SendChunkData(int a_ChunkX, int a_ChunkZ, cChunkDataSe
void cProtocolRecognizer::SendCollectEntity(const cEntity & a_Entity, const cPlayer & a_Player)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendCollectEntity(a_Entity, a_Player);
}
@@ -196,7 +180,7 @@ void cProtocolRecognizer::SendCollectEntity(const cEntity & a_Entity, const cPla
void cProtocolRecognizer::SendDestroyEntity(const cEntity & a_Entity)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendDestroyEntity(a_Entity);
}
@@ -206,15 +190,20 @@ void cProtocolRecognizer::SendDestroyEntity(const cEntity & a_Entity)
void cProtocolRecognizer::SendDisconnect(const AString & a_Reason)
{
- if (m_Protocol != NULL)
+ if (m_Protocol != nullptr)
{
m_Protocol->SendDisconnect(a_Reason);
}
else
{
// This is used when the client sends a server-ping, respond with the default packet:
- WriteByte (0xff); // PACKET_DISCONNECT
- WriteString(a_Reason);
+ static const int Packet = 0xff; // PACKET_DISCONNECT
+ SendData((const char *)&Packet, 1); // WriteByte()
+
+ AString UTF16 = UTF8ToRawBEUTF16(a_Reason.c_str(), a_Reason.length());
+ static const u_short Size = htons((u_short)(UTF16.size() / 2));
+ SendData((const char *)&Size, 2); // WriteShort()
+ SendData(UTF16.data(), UTF16.size()); // WriteString()
}
}
@@ -223,7 +212,7 @@ void cProtocolRecognizer::SendDisconnect(const AString & a_Reason)
void cProtocolRecognizer::SendEditSign(int a_BlockX, int a_BlockY, int a_BlockZ)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendEditSign(a_BlockX, a_BlockY, a_BlockZ);
}
@@ -233,7 +222,7 @@ void cProtocolRecognizer::SendEditSign(int a_BlockX, int a_BlockY, int a_BlockZ)
void cProtocolRecognizer::SendEntityEffect(const cEntity & a_Entity, int a_EffectID, int a_Amplifier, short a_Duration)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendEntityEffect(a_Entity, a_EffectID, a_Amplifier, a_Duration);
}
@@ -243,7 +232,7 @@ void cProtocolRecognizer::SendEntityEffect(const cEntity & a_Entity, int a_Effec
void cProtocolRecognizer::SendEntityEquipment(const cEntity & a_Entity, short a_SlotNum, const cItem & a_Item)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendEntityEquipment(a_Entity, a_SlotNum, a_Item);
}
@@ -253,7 +242,7 @@ void cProtocolRecognizer::SendEntityEquipment(const cEntity & a_Entity, short a_
void cProtocolRecognizer::SendEntityHeadLook(const cEntity & a_Entity)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendEntityHeadLook(a_Entity);
}
@@ -263,7 +252,7 @@ void cProtocolRecognizer::SendEntityHeadLook(const cEntity & a_Entity)
void cProtocolRecognizer::SendEntityLook(const cEntity & a_Entity)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendEntityLook(a_Entity);
}
@@ -273,7 +262,7 @@ void cProtocolRecognizer::SendEntityLook(const cEntity & a_Entity)
void cProtocolRecognizer::SendEntityMetadata(const cEntity & a_Entity)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendEntityMetadata(a_Entity);
}
@@ -283,7 +272,7 @@ void cProtocolRecognizer::SendEntityMetadata(const cEntity & a_Entity)
void cProtocolRecognizer::SendEntityProperties(const cEntity & a_Entity)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendEntityProperties(a_Entity);
}
@@ -293,7 +282,7 @@ void cProtocolRecognizer::SendEntityProperties(const cEntity & a_Entity)
void cProtocolRecognizer::SendEntityRelMove(const cEntity & a_Entity, char a_RelX, char a_RelY, char a_RelZ)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendEntityRelMove(a_Entity, a_RelX, a_RelY, a_RelZ);
}
@@ -303,7 +292,7 @@ void cProtocolRecognizer::SendEntityRelMove(const cEntity & a_Entity, char a_Rel
void cProtocolRecognizer::SendEntityRelMoveLook(const cEntity & a_Entity, char a_RelX, char a_RelY, char a_RelZ)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendEntityRelMoveLook(a_Entity, a_RelX, a_RelY, a_RelZ);
}
@@ -313,7 +302,7 @@ void cProtocolRecognizer::SendEntityRelMoveLook(const cEntity & a_Entity, char a
void cProtocolRecognizer::SendEntityStatus(const cEntity & a_Entity, char a_Status)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendEntityStatus(a_Entity, a_Status);
}
@@ -323,7 +312,7 @@ void cProtocolRecognizer::SendEntityStatus(const cEntity & a_Entity, char a_Stat
void cProtocolRecognizer::SendEntityVelocity(const cEntity & a_Entity)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendEntityVelocity(a_Entity);
}
@@ -333,7 +322,7 @@ void cProtocolRecognizer::SendEntityVelocity(const cEntity & a_Entity)
void cProtocolRecognizer::SendExplosion(double a_BlockX, double a_BlockY, double a_BlockZ, float a_Radius, const cVector3iArray & a_BlocksAffected, const Vector3d & a_PlayerMotion)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendExplosion(a_BlockX, a_BlockY, a_BlockZ, a_Radius, a_BlocksAffected, a_PlayerMotion);
}
@@ -343,7 +332,7 @@ void cProtocolRecognizer::SendExplosion(double a_BlockX, double a_BlockY, double
void cProtocolRecognizer::SendGameMode(eGameMode a_GameMode)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendGameMode(a_GameMode);
}
@@ -353,7 +342,7 @@ void cProtocolRecognizer::SendGameMode(eGameMode a_GameMode)
void cProtocolRecognizer::SendHealth(void)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendHealth();
}
@@ -361,9 +350,9 @@ void cProtocolRecognizer::SendHealth(void)
-void cProtocolRecognizer::SendWindowProperty(const cWindow & a_Window, int a_Property, int a_Value)
+void cProtocolRecognizer::SendWindowProperty(const cWindow & a_Window, short a_Property, short a_Value)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendWindowProperty(a_Window, a_Property, a_Value);
}
@@ -373,7 +362,7 @@ void cProtocolRecognizer::SendWindowProperty(const cWindow & a_Window, int a_Pro
void cProtocolRecognizer::SendInventorySlot(char a_WindowID, short a_SlotNum, const cItem & a_Item)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendInventorySlot(a_WindowID, a_SlotNum, a_Item);
}
@@ -383,7 +372,7 @@ void cProtocolRecognizer::SendInventorySlot(char a_WindowID, short a_SlotNum, co
void cProtocolRecognizer::SendKeepAlive(int a_PingID)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendKeepAlive(a_PingID);
}
@@ -393,7 +382,7 @@ void cProtocolRecognizer::SendKeepAlive(int a_PingID)
void cProtocolRecognizer::SendLogin(const cPlayer & a_Player, const cWorld & a_World)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendLogin(a_Player, a_World);
}
@@ -403,7 +392,7 @@ void cProtocolRecognizer::SendLogin(const cPlayer & a_Player, const cWorld & a_W
void cProtocolRecognizer::SendLoginSuccess(void)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendLoginSuccess();
}
@@ -413,7 +402,7 @@ void cProtocolRecognizer::SendLoginSuccess(void)
void cProtocolRecognizer::SendMapColumn(int a_ID, int a_X, int a_Y, const Byte * a_Colors, unsigned int a_Length, unsigned int m_Scale)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendMapColumn(a_ID, a_X, a_Y, a_Colors, a_Length, m_Scale);
}
@@ -423,7 +412,7 @@ void cProtocolRecognizer::SendMapColumn(int a_ID, int a_X, int a_Y, const Byte *
void cProtocolRecognizer::SendMapDecorators(int a_ID, const cMapDecoratorList & a_Decorators, unsigned int m_Scale)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendMapDecorators(a_ID, a_Decorators, m_Scale);
}
@@ -433,7 +422,7 @@ void cProtocolRecognizer::SendMapDecorators(int a_ID, const cMapDecoratorList &
void cProtocolRecognizer::SendMapInfo(int a_ID, unsigned int a_Scale)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendMapInfo(a_ID, a_Scale);
}
@@ -443,7 +432,7 @@ void cProtocolRecognizer::SendMapInfo(int a_ID, unsigned int a_Scale)
void cProtocolRecognizer::SendParticleEffect(const AString & a_ParticleName, float a_SrcX, float a_SrcY, float a_SrcZ, float a_OffsetX, float a_OffsetY, float a_OffsetZ, float a_ParticleData, int a_ParticleAmount)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendParticleEffect(a_ParticleName, a_SrcX, a_SrcY, a_SrcZ, a_OffsetX, a_OffsetY, a_OffsetZ, a_ParticleData, a_ParticleAmount);
}
@@ -461,7 +450,7 @@ void cProtocolRecognizer::SendPaintingSpawn(const cPainting & a_Painting)
void cProtocolRecognizer::SendPickupSpawn(const cPickup & a_Pickup)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendPickupSpawn(a_Pickup);
}
@@ -471,7 +460,7 @@ void cProtocolRecognizer::SendPickupSpawn(const cPickup & a_Pickup)
void cProtocolRecognizer::SendPlayerAbilities(void)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendPlayerAbilities();
}
@@ -481,7 +470,7 @@ void cProtocolRecognizer::SendPlayerAbilities(void)
void cProtocolRecognizer::SendEntityAnimation(const cEntity & a_Entity, char a_Animation)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendEntityAnimation(a_Entity, a_Animation);
}
@@ -491,7 +480,7 @@ void cProtocolRecognizer::SendEntityAnimation(const cEntity & a_Entity, char a_A
void cProtocolRecognizer::SendPlayerListAddPlayer(const cPlayer & a_Player)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendPlayerListAddPlayer(a_Player);
}
@@ -501,7 +490,7 @@ void cProtocolRecognizer::SendPlayerListAddPlayer(const cPlayer & a_Player)
void cProtocolRecognizer::SendPlayerListRemovePlayer(const cPlayer & a_Player)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendPlayerListRemovePlayer(a_Player);
}
@@ -511,7 +500,7 @@ void cProtocolRecognizer::SendPlayerListRemovePlayer(const cPlayer & a_Player)
void cProtocolRecognizer::SendPlayerListUpdateGameMode(const cPlayer & a_Player)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendPlayerListUpdateGameMode(a_Player);
}
@@ -521,7 +510,7 @@ void cProtocolRecognizer::SendPlayerListUpdateGameMode(const cPlayer & a_Player)
void cProtocolRecognizer::SendPlayerListUpdatePing(const cPlayer & a_Player)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendPlayerListUpdatePing(a_Player);
}
@@ -531,7 +520,7 @@ void cProtocolRecognizer::SendPlayerListUpdatePing(const cPlayer & a_Player)
void cProtocolRecognizer::SendPlayerListUpdateDisplayName(const cPlayer & a_Player, const AString & a_CustomName)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendPlayerListUpdateDisplayName(a_Player, a_CustomName);
}
@@ -541,7 +530,7 @@ void cProtocolRecognizer::SendPlayerListUpdateDisplayName(const cPlayer & a_Play
void cProtocolRecognizer::SendPlayerMaxSpeed(void)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendPlayerMaxSpeed();
}
@@ -551,7 +540,7 @@ void cProtocolRecognizer::SendPlayerMaxSpeed(void)
void cProtocolRecognizer::SendPlayerMoveLook(void)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendPlayerMoveLook();
}
@@ -561,7 +550,7 @@ void cProtocolRecognizer::SendPlayerMoveLook(void)
void cProtocolRecognizer::SendPlayerPosition(void)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendPlayerPosition();
}
@@ -571,7 +560,7 @@ void cProtocolRecognizer::SendPlayerPosition(void)
void cProtocolRecognizer::SendPlayerSpawn(const cPlayer & a_Player)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendPlayerSpawn(a_Player);
}
@@ -581,7 +570,7 @@ void cProtocolRecognizer::SendPlayerSpawn(const cPlayer & a_Player)
void cProtocolRecognizer::SendPluginMessage(const AString & a_Channel, const AString & a_Message)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendPluginMessage(a_Channel, a_Message);
}
@@ -591,7 +580,7 @@ void cProtocolRecognizer::SendPluginMessage(const AString & a_Channel, const ASt
void cProtocolRecognizer::SendRemoveEntityEffect(const cEntity & a_Entity, int a_EffectID)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendRemoveEntityEffect(a_Entity, a_EffectID);
}
@@ -601,7 +590,7 @@ void cProtocolRecognizer::SendRemoveEntityEffect(const cEntity & a_Entity, int a
void cProtocolRecognizer::SendRespawn(eDimension a_Dimension, bool a_ShouldIgnoreDimensionChecks)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendRespawn(a_Dimension, a_ShouldIgnoreDimensionChecks);
}
@@ -611,7 +600,7 @@ void cProtocolRecognizer::SendRespawn(eDimension a_Dimension, bool a_ShouldIgnor
void cProtocolRecognizer::SendExperience(void)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendExperience();
}
@@ -621,7 +610,7 @@ void cProtocolRecognizer::SendExperience(void)
void cProtocolRecognizer::SendExperienceOrb(const cExpOrb & a_ExpOrb)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendExperienceOrb(a_ExpOrb);
}
@@ -631,7 +620,7 @@ void cProtocolRecognizer::SendExperienceOrb(const cExpOrb & a_ExpOrb)
void cProtocolRecognizer::SendScoreboardObjective(const AString & a_Name, const AString & a_DisplayName, Byte a_Mode)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendScoreboardObjective(a_Name, a_DisplayName, a_Mode);
}
@@ -641,7 +630,7 @@ void cProtocolRecognizer::SendScoreboardObjective(const AString & a_Name, const
void cProtocolRecognizer::SendScoreUpdate(const AString & a_Objective, const AString & a_Player, cObjective::Score a_Score, Byte a_Mode)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendScoreUpdate(a_Objective, a_Player, a_Score, a_Mode);
}
@@ -651,7 +640,7 @@ void cProtocolRecognizer::SendScoreUpdate(const AString & a_Objective, const ASt
void cProtocolRecognizer::SendDisplayObjective(const AString & a_Objective, cScoreboard::eDisplaySlot a_Display)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendDisplayObjective(a_Objective, a_Display);
}
@@ -661,7 +650,7 @@ void cProtocolRecognizer::SendDisplayObjective(const AString & a_Objective, cSco
void cProtocolRecognizer::SendSoundEffect(const AString & a_SoundName, double a_X, double a_Y, double a_Z, float a_Volume, float a_Pitch)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendSoundEffect(a_SoundName, a_X, a_Y, a_Z, a_Volume, a_Pitch);
}
@@ -671,7 +660,7 @@ void cProtocolRecognizer::SendSoundEffect(const AString & a_SoundName, double a_
void cProtocolRecognizer::SendSoundParticleEffect(int a_EffectID, int a_SrcX, int a_SrcY, int a_SrcZ, int a_Data)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendSoundParticleEffect(a_EffectID, a_SrcX, a_SrcY, a_SrcZ, a_Data);
}
@@ -681,7 +670,7 @@ void cProtocolRecognizer::SendSoundParticleEffect(int a_EffectID, int a_SrcX, in
void cProtocolRecognizer::SendSpawnFallingBlock(const cFallingBlock & a_FallingBlock)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendSpawnFallingBlock(a_FallingBlock);
}
@@ -691,7 +680,7 @@ void cProtocolRecognizer::SendSpawnFallingBlock(const cFallingBlock & a_FallingB
void cProtocolRecognizer::SendSpawnMob(const cMonster & a_Mob)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendSpawnMob(a_Mob);
}
@@ -701,7 +690,7 @@ void cProtocolRecognizer::SendSpawnMob(const cMonster & a_Mob)
void cProtocolRecognizer::SendSpawnObject(const cEntity & a_Entity, char a_ObjectType, int a_ObjectData, Byte a_Yaw, Byte a_Pitch)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendSpawnObject(a_Entity, a_ObjectType, a_ObjectData, a_Yaw, a_Pitch);
}
@@ -711,7 +700,7 @@ void cProtocolRecognizer::SendSpawnObject(const cEntity & a_Entity, char a_Objec
void cProtocolRecognizer::SendSpawnVehicle(const cEntity & a_Vehicle, char a_VehicleType, char a_VehicleSubType)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendSpawnVehicle(a_Vehicle, a_VehicleType, a_VehicleSubType);
}
@@ -721,7 +710,7 @@ void cProtocolRecognizer::SendSpawnVehicle(const cEntity & a_Vehicle, char a_Veh
void cProtocolRecognizer::SendStatistics(const cStatManager & a_Manager)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendStatistics(a_Manager);
}
@@ -731,7 +720,7 @@ void cProtocolRecognizer::SendStatistics(const cStatManager & a_Manager)
void cProtocolRecognizer::SendTabCompletionResults(const AStringVector & a_Results)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendTabCompletionResults(a_Results);
}
@@ -741,7 +730,7 @@ void cProtocolRecognizer::SendTabCompletionResults(const AStringVector & a_Resul
void cProtocolRecognizer::SendTeleportEntity(const cEntity & a_Entity)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendTeleportEntity(a_Entity);
}
@@ -751,7 +740,7 @@ void cProtocolRecognizer::SendTeleportEntity(const cEntity & a_Entity)
void cProtocolRecognizer::SendThunderbolt(int a_BlockX, int a_BlockY, int a_BlockZ)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendThunderbolt(a_BlockX, a_BlockY, a_BlockZ);
}
@@ -761,7 +750,7 @@ void cProtocolRecognizer::SendThunderbolt(int a_BlockX, int a_BlockY, int a_Bloc
void cProtocolRecognizer::SendTimeUpdate(Int64 a_WorldAge, Int64 a_TimeOfDay, bool a_DoDaylightCycle)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendTimeUpdate(a_WorldAge, a_TimeOfDay, a_DoDaylightCycle);
}
@@ -771,7 +760,7 @@ void cProtocolRecognizer::SendTimeUpdate(Int64 a_WorldAge, Int64 a_TimeOfDay, bo
void cProtocolRecognizer::SendUnloadChunk(int a_ChunkX, int a_ChunkZ)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendUnloadChunk(a_ChunkX, a_ChunkZ);
}
@@ -781,7 +770,7 @@ void cProtocolRecognizer::SendUnloadChunk(int a_ChunkX, int a_ChunkZ)
void cProtocolRecognizer::SendUpdateBlockEntity(cBlockEntity & a_BlockEntity)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendUpdateBlockEntity(a_BlockEntity);
}
@@ -791,7 +780,7 @@ void cProtocolRecognizer::SendUpdateBlockEntity(cBlockEntity & a_BlockEntity)
void cProtocolRecognizer::SendUpdateSign(int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendUpdateSign(a_BlockX, a_BlockY, a_BlockZ, a_Line1, a_Line2, a_Line3, a_Line4);
}
@@ -801,7 +790,7 @@ void cProtocolRecognizer::SendUpdateSign(int a_BlockX, int a_BlockY, int a_Block
void cProtocolRecognizer::SendUseBed(const cEntity & a_Entity, int a_BlockX, int a_BlockY, int a_BlockZ)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendUseBed(a_Entity, a_BlockX, a_BlockY, a_BlockZ);
}
@@ -811,7 +800,7 @@ void cProtocolRecognizer::SendUseBed(const cEntity & a_Entity, int a_BlockX, int
void cProtocolRecognizer::SendWeather(eWeather a_Weather)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendWeather(a_Weather);
}
@@ -821,7 +810,7 @@ void cProtocolRecognizer::SendWeather(eWeather a_Weather)
void cProtocolRecognizer::SendWholeInventory(const cWindow & a_Window)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendWholeInventory(a_Window);
}
@@ -831,7 +820,7 @@ void cProtocolRecognizer::SendWholeInventory(const cWindow & a_Window)
void cProtocolRecognizer::SendWindowClose(const cWindow & a_Window)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendWindowClose(a_Window);
}
@@ -841,7 +830,7 @@ void cProtocolRecognizer::SendWindowClose(const cWindow & a_Window)
void cProtocolRecognizer::SendWindowOpen(const cWindow & a_Window)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
m_Protocol->SendWindowOpen(a_Window);
}
@@ -851,7 +840,7 @@ void cProtocolRecognizer::SendWindowOpen(const cWindow & a_Window)
AString cProtocolRecognizer::GetAuthServerID(void)
{
- ASSERT(m_Protocol != NULL);
+ ASSERT(m_Protocol != nullptr);
return m_Protocol->GetAuthServerID();
}
@@ -873,51 +862,8 @@ bool cProtocolRecognizer::TryRecognizeProtocol(void)
{
// NOTE: If a new protocol is added or an old one is removed, adjust MCS_CLIENT_VERSIONS and
// MCS_PROTOCOL_VERSIONS macros in the header file, as well as PROTO_VERSION_LATEST macro
-
- // The first packet should be a Handshake, 0x02:
- unsigned char PacketType;
- if (!m_Buffer.ReadByte(PacketType))
- {
- return false;
- }
- switch (PacketType)
- {
- case 0x02: return TryRecognizeLengthlessProtocol(); // Handshake, continue recognizing
- case 0xfe:
- {
- // This may be either a packet length or the length-less Ping packet
- Byte NextByte;
- if (!m_Buffer.ReadByte(NextByte))
- {
- // Not enough data for either protocol
- // This could actually happen with the 1.2 / 1.3 client, but their support is fading out anyway
- return false;
- }
- if (NextByte != 0x01)
- {
- // This is definitely NOT a length-less Ping packet, handle as lengthed protocol:
- break;
- }
- if (!m_Buffer.ReadByte(NextByte))
- {
- // There is no more data. Although this *could* mean TCP fragmentation, it is highly unlikely
- // and rather this is a 1.4 client sending a regular Ping packet (without the following Plugin message)
- SendLengthlessServerPing();
- return false;
- }
- if (NextByte == 0xfa)
- {
- // Definitely a length-less Ping followed by a Plugin message
- SendLengthlessServerPing();
- return false;
- }
- // Definitely a lengthed Initial handshake, handle below:
- break;
- }
- } // switch (PacketType)
- // This must be a lengthed protocol, try if it has the entire initial handshake packet:
- m_Buffer.ResetRead();
+ // Lengthed protocol, try if it has the entire initial handshake packet:
UInt32 PacketLen;
UInt32 ReadSoFar = (UInt32)m_Buffer.GetReadableSpace();
if (!m_Buffer.ReadVarInt(PacketLen))
@@ -938,61 +884,6 @@ bool cProtocolRecognizer::TryRecognizeProtocol(void)
-bool cProtocolRecognizer::TryRecognizeLengthlessProtocol(void)
-{
- // The comm started with 0x02, which is a Handshake packet in the length-less protocol family
- // 1.3.2 starts with 0x02 0x39 <name-length-short>
- // 1.2.5 starts with 0x02 <name-length-short> and name is expected to less than 0x3900 long :)
- char ch;
- if (!m_Buffer.ReadChar(ch))
- {
- return false;
- }
- switch (ch)
- {
- case PROTO_VERSION_1_3_2:
- {
- m_Protocol = new cProtocol132(m_Client);
- return true;
- }
- case PROTO_VERSION_1_4_2:
- case PROTO_VERSION_1_4_4:
- {
- m_Protocol = new cProtocol142(m_Client);
- return true;
- }
- case PROTO_VERSION_1_4_6:
- {
- m_Protocol = new cProtocol146(m_Client);
- return true;
- }
- case PROTO_VERSION_1_5_0:
- case PROTO_VERSION_1_5_2:
- {
- m_Protocol = new cProtocol150(m_Client);
- return true;
- }
- case PROTO_VERSION_1_6_1:
- {
- m_Protocol = new cProtocol161(m_Client);
- return true;
- }
- case PROTO_VERSION_1_6_2:
- case PROTO_VERSION_1_6_3:
- case PROTO_VERSION_1_6_4:
- {
- m_Protocol = new cProtocol162(m_Client);
- return true;
- }
- }
- m_Protocol = new cProtocol125(m_Client);
- return true;
-}
-
-
-
-
-
bool cProtocolRecognizer::TryRecognizeLengthedProtocol(UInt32 a_PacketLengthRemaining)
{
UInt32 PacketType;
@@ -1014,6 +905,7 @@ bool cProtocolRecognizer::TryRecognizeLengthedProtocol(UInt32 a_PacketLengthRema
{
return false;
}
+ m_Client->SetProtocolVersion(ProtocolVersion);
switch (ProtocolVersion)
{
case PROTO_VERSION_1_7_2:
@@ -1090,80 +982,3 @@ bool cProtocolRecognizer::TryRecognizeLengthedProtocol(UInt32 a_PacketLengthRema
-
-void cProtocolRecognizer::SendLengthlessServerPing(void)
-{
- AString Reply;
- cServer * Server = cRoot::Get()->GetServer();
-
- AString ServerDescription = Server->GetDescription();
- int NumPlayers = Server->GetNumPlayers();
- int MaxPlayers = Server->GetMaxPlayers();
- AString Favicon = Server->GetFaviconData();
- cRoot::Get()->GetPluginManager()->CallHookServerPing(*m_Client, ServerDescription, NumPlayers, MaxPlayers, Favicon);
-
- switch (cRoot::Get()->GetPrimaryServerVersion())
- {
- case PROTO_VERSION_1_2_5:
- case PROTO_VERSION_1_3_2:
- {
- // http://wiki.vg/wiki/index.php?title=Protocol&oldid=3099#Server_List_Ping_.280xFE.29
- Printf(Reply, "%s%s%i%s%i",
- ServerDescription.c_str(),
- cChatColor::Delimiter,
- NumPlayers,
- cChatColor::Delimiter,
- MaxPlayers
- );
- break;
- }
-
- case PROTO_VERSION_1_4_2:
- case PROTO_VERSION_1_4_4:
- case PROTO_VERSION_1_4_6:
- case PROTO_VERSION_1_5_0:
- case PROTO_VERSION_1_5_2:
- case PROTO_VERSION_1_6_1:
- case PROTO_VERSION_1_6_2:
- case PROTO_VERSION_1_6_3:
- case PROTO_VERSION_1_6_4:
- {
- // The server list ping now has 1 more byte of "magic". Mojang just loves to complicate stuff.
- // http://wiki.vg/wiki/index.php?title=Protocol&oldid=3101#Server_List_Ping_.280xFE.29
- // _X 2012_10_31: I know that this needn't eat the byte, since it still may be in transit.
- // Who cares? We're disconnecting anyway.
- m_Buffer.ResetRead();
- if (m_Buffer.CanReadBytes(2))
- {
- Byte val;
- m_Buffer.ReadByte(val); // Packet type - Serverlist ping
- m_Buffer.ReadByte(val); // 0x01 magic value
- ASSERT(val == 0x01);
- }
-
- AString ProtocolVersionNum;
- Printf(ProtocolVersionNum, "%d", cRoot::Get()->GetPrimaryServerVersion());
- AString ProtocolVersionTxt(GetVersionTextFromInt(cRoot::Get()->GetPrimaryServerVersion()));
-
- // Cannot use Printf() because of in-string NUL bytes.
- Reply = cChatColor::Delimiter;
- Reply.append("1");
- Reply.push_back(0);
- Reply.append(ProtocolVersionNum);
- Reply.push_back(0);
- Reply.append(ProtocolVersionTxt);
- Reply.push_back(0);
- Reply.append(ServerDescription);
- Reply.push_back(0);
- Reply.append(Printf("%d", NumPlayers));
- Reply.push_back(0);
- Reply.append(Printf("%d", MaxPlayers));
- break;
- }
- } // switch (m_PrimaryServerVersion)
- m_Client->Kick(Reply);
-}
-
-
-
-