Browse Source

additional eqstream fixes

Additional code for Issue #61
Image 4 years ago
parent
commit
6566a39e8e

+ 1 - 1
EQ2/source/WorldServer/client.cpp

@@ -841,8 +841,8 @@ void Client::SendDefaultGroupOptions(){
 bool Client::HandlePacket(EQApplicationPacket *app) {
 	bool ret = true;
 
-	LogWrite(PACKET__DEBUG, 9, "Packet", "[EQDEBUG] Received Packet:");
 #if EQDEBUG >= 9
+	LogWrite(PACKET__DEBUG, 9, "Packet", "[EQDEBUG] Received Packet:");
 	DumpPacket(app, true);
 #endif
 

+ 2 - 0
EQ2/source/WorldServer/client.h

@@ -399,6 +399,8 @@ public:
 	bool HandleNewLogin(int32 account_id, int32 access_code);
 	void SendSpawnChanges(set<Spawn*>& spawns);
 	void MakeSpawnChangePacket(map<int32, SpawnData> info_changes, map<int32, SpawnData> pos_changes, map<int32, SpawnData> vis_changes, int32 info_size, int32 pos_size, int32 vis_size);
+
+	bool IsZonedIn() { return connected_to_zone; }
 private:
 	void    SavePlayerImages();
 	void	SkillChanged(Skill* skill, int16 previous_value, int16 new_value);

+ 13 - 0
EQ2/source/common/EQStream.cpp

@@ -207,6 +207,19 @@ bool EQStream::HandleEmbeddedPacket(EQProtocolPacket *p, int16 offset, int16 len
 void EQStream::ProcessPacket(EQProtocolPacket *p)
 {
 	uint32 processed=0,subpacket_length=0;
+	if (p == nullptr)
+		return;
+
+	if (p->opcode > 0xff) {
+		p->opcode = htons(p->opcode); //byte order is backwards in the protocol packet
+		EQApplicationPacket* ap = p->MakeApplicationPacket(2);
+		if (ap)
+			InboundQueuePush(ap);
+
+		LogWrite(PACKET__ERROR, 0, "Packet", "*** Received 0xff opcode, updated to %i",p->opcode);
+		return;
+	}
+
 	if (p) {
 
 		if (p->opcode!=OP_SessionRequest && p->opcode!=OP_SessionResponse && !Session) {

+ 0 - 1
EQ2/source/common/PacketStruct.cpp

@@ -1319,7 +1319,6 @@ bool PacketStruct::StructLoadData(DataStruct* data_struct, void* data, int32 len
 			int32 size = GetArraySize(data_struct,0);
 			if(size > 0xFFFF){
 				LogWrite(PACKET__WARNING, 1, "Packet", "Possible corrupt packet while loading struct array, orig array size: %u in struct name %s, data name %s", size, GetName(), (data_struct && data_struct->GetName()) ? data_struct->GetName() : "??");
-				size = 1;
 				return false;
 			}
 			PacketStruct* ps = GetPacketStructByName(data_struct->GetName());