From 4feb3ef68581eed43c268fb2df4d9c83ebea4474 Mon Sep 17 00:00:00 2001 From: Sky Johnson Date: Sat, 6 Sep 2025 06:37:22 -0500 Subject: [PATCH] move crypto to common/crypto --- source/LoginServer/makefile | 6 +- source/LoginServer/net.cpp | 2 +- source/WorldServer/LoginServer.cpp | 2 +- source/common/CRC16.cpp | 311 ------------------------ source/common/Condition.cpp | 116 --------- source/common/Condition.h | 31 --- source/common/EQPacket.cpp | 2 +- source/common/EQStream.cpp | 2 +- source/common/EQStream.h | 3 +- source/common/EQStreamFactory.cpp | 5 +- source/common/EQStreamFactory.h | 10 +- source/common/{ => crypto}/Crypto.cpp | 0 source/common/{ => crypto}/Crypto.h | 0 source/common/{ => crypto}/RC4.cpp | 0 source/common/{ => crypto}/RC4.h | 0 source/common/crypto/crc.cpp | 122 ++++++++++ source/common/{CRC16.h => crypto/crc.h} | 6 +- source/common/{ => crypto}/md5.cpp | 6 +- source/common/{ => crypto}/md5.h | 0 source/common/{ => crypto}/sha512.cpp | 0 source/common/{ => crypto}/sha512.h | 0 source/common/dbcore.h | 1 - test_compile.sh | 55 +++++ 23 files changed, 199 insertions(+), 481 deletions(-) delete mode 100644 source/common/CRC16.cpp delete mode 100644 source/common/Condition.cpp delete mode 100644 source/common/Condition.h rename source/common/{ => crypto}/Crypto.cpp (100%) rename source/common/{ => crypto}/Crypto.h (100%) rename source/common/{ => crypto}/RC4.cpp (100%) rename source/common/{ => crypto}/RC4.h (100%) create mode 100644 source/common/crypto/crc.cpp rename source/common/{CRC16.h => crypto/crc.h} (76%) rename source/common/{ => crypto}/md5.cpp (98%) rename source/common/{ => crypto}/md5.h (100%) rename source/common/{ => crypto}/sha512.cpp (100%) rename source/common/{ => crypto}/sha512.h (100%) create mode 100755 test_compile.sh diff --git a/source/LoginServer/makefile b/source/LoginServer/makefile index 6af1ca9..982001c 100644 --- a/source/LoginServer/makefile +++ b/source/LoginServer/makefile @@ -2,12 +2,12 @@ APP=login SF= ../common/Log.o ../common/timer.o ../common/packet_dump.o ../common/unix.o \ ../common/Mutex.o ../common/MiscFunctions.o LoginDatabase.o LoginAccount.o \ ../common/TCPConnection.o ../common/emu_opcodes.o \ - client.o net.o PacketHeaders.o LWorld.o ../common/md5.o ../common/dbcore.o \ + client.o net.o PacketHeaders.o LWorld.o ../common/crypto/md5.o ../common/dbcore.o \ Web/LoginWeb.o \ - ../common/EQEMuError.o ../common/misc.o ../common/Crypto.o ../common/RC4.o \ + ../common/EQEMuError.o ../common/misc.o ../common/crypto/Crypto.o ../common/RC4.o \ .obj/debug.o .obj/database.o .obj/EQStream.o ../common/xmlParser.o \ .obj/EQStreamFactory.o .obj/EQPacket.o ../common/CRC16.o ../common/packet_functions.o \ - ../common/Condition.o ../common/opcodemgr.o ../common/PacketStruct.o ../common/ConfigReader.o \ + ../common/opcodemgr.o ../common/PacketStruct.o ../common/ConfigReader.o \ ../common/DatabaseNew.o ../common/DatabaseResult.o ../common/Web/WebServer.o ../common/JsonParser.o CC=g++ diff --git a/source/LoginServer/net.cpp b/source/LoginServer/net.cpp index e2f4840..81976a4 100644 --- a/source/LoginServer/net.cpp +++ b/source/LoginServer/net.cpp @@ -66,7 +66,7 @@ char version[200], consoletitle[200]; #endif #include "../common/timer.h" -#include "../common/CRC16.h" +#include "../common/crypto/crc.h" #include int main(int argc, char** argv){ diff --git a/source/WorldServer/LoginServer.cpp b/source/WorldServer/LoginServer.cpp index a376dca..b5f6658 100644 --- a/source/WorldServer/LoginServer.cpp +++ b/source/WorldServer/LoginServer.cpp @@ -11,7 +11,7 @@ using namespace std; #include #include "../common/version.h" #include "../common/GlobalHeaders.h" -#include "../common/sha512.h" +#include "../common/crypto/sha512.h" #ifdef WIN32 #include diff --git a/source/common/CRC16.cpp b/source/common/CRC16.cpp deleted file mode 100644 index 0aac820..0000000 --- a/source/common/CRC16.cpp +++ /dev/null @@ -1,311 +0,0 @@ -// Copyright (C) 2007-2025 EQ2EMulator -// Licensed under GPL v3 -#include - -unsigned long IntArray[]={ -0x00000000, -0x77073096, -0xEE0E612C, -0x990951BA, -0x076DC419, -0x706AF48F, -0xE963A535, -0x9E6495A3, -0x0EDB8832, -0x79DCB8A4, -0xE0D5E91E, -0x97D2D988, -0x09B64C2B, -0x7EB17CBD, -0xE7B82D07, -0x90BF1D91, -0x1DB71064, -0x6AB020F2, -0xF3B97148, -0x84BE41DE, -0x1ADAD47D, -0x6DDDE4EB, -0xF4D4B551, -0x83D385C7, -0x136C9856, -0x646BA8C0, -0xFD62F97A, -0x8A65C9EC, -0x14015C4F, -0x63066CD9, -0xFA0F3D63, -0x8D080DF5, -0x3B6E20C8, -0x4C69105E, -0xD56041E4, -0xA2677172, -0x3C03E4D1, -0x4B04D447, -0xD20D85FD, -0xA50AB56B, -0x35B5A8FA, -0x42B2986C, -0xDBBBC9D6, -0xACBCF940, -0x32D86CE3, -0x45DF5C75, -0xDCD60DCF, -0xABD13D59, -0x26D930AC, -0x51DE003A, -0xC8D75180, -0xBFD06116, -0x21B4F4B5, -0x56B3C423, -0xCFBA9599, -0xB8BDA50F, -0x2802B89E, -0x5F058808, -0xC60CD9B2, -0xB10BE924, -0x2F6F7C87, -0x58684C11, -0xC1611DAB, -0xB6662D3D, -0x76DC4190, -0x01DB7106, -0x98D220BC, -0xEFD5102A, -0x71B18589, -0x06B6B51F, -0x9FBFE4A5, -0xE8B8D433, -0x7807C9A2, -0x0F00F934, -0x9609A88E, -0xE10E9818, -0x7F6A0DBB, -0x086D3D2D, -0x91646C97, -0xE6635C01, -0x6B6B51F4, -0x1C6C6162, -0x856530D8, -0xF262004E, -0x6C0695ED, -0x1B01A57B, -0x8208F4C1, -0xF50FC457, -0x65B0D9C6, -0x12B7E950, -0x8BBEB8EA, -0xFCB9887C, -0x62DD1DDF, -0x15DA2D49, -0x8CD37CF3, -0xFBD44C65, -0x4DB26158, -0x3AB551CE, -0xA3BC0074, -0xD4BB30E2, -0x4ADFA541, -0x3DD895D7, -0xA4D1C46D, -0xD3D6F4FB, -0x4369E96A, -0x346ED9FC, -0xAD678846, -0xDA60B8D0, -0x44042D73, -0x33031DE5, -0xAA0A4C5F, -0xDD0D7CC9, -0x5005713C, -0x270241AA, -0xBE0B1010, -0xC90C2086, -0x5768B525, -0x206F85B3, -0xB966D409, -0xCE61E49F, -0x5EDEF90E, -0x29D9C998, -0xB0D09822, -0xC7D7A8B4, -0x59B33D17, -0x2EB40D81, -0xB7BD5C3B, -0xC0BA6CAD, -0xEDB88320, -0x9ABFB3B6, -0x03B6E20C, -0x74B1D29A, -0xEAD54739, -0x9DD277AF, -0x04DB2615, -0x73DC1683, -0xE3630B12, -0x94643B84, -0x0D6D6A3E, -0x7A6A5AA8, -0xE40ECF0B, -0x9309FF9D, -0x0A00AE27, -0x7D079EB1, -0xF00F9344, -0x8708A3D2, -0x1E01F268, -0x6906C2FE, -0xF762575D, -0x806567CB, -0x196C3671, -0x6E6B06E7, -0xFED41B76, -0x89D32BE0, -0x10DA7A5A, -0x67DD4ACC, -0xF9B9DF6F, -0x8EBEEFF9, -0x17B7BE43, -0x60B08ED5, -0xD6D6A3E8, -0xA1D1937E, -0x38D8C2C4, -0x4FDFF252, -0xD1BB67F1, -0xA6BC5767, -0x3FB506DD, -0x48B2364B, -0xD80D2BDA, -0xAF0A1B4C, -0x36034AF6, -0x41047A60, -0xDF60EFC3, -0xA867DF55, -0x316E8EEF, -0x4669BE79, -0xCB61B38C, -0xBC66831A, -0x256FD2A0, -0x5268E236, -0xCC0C7795, -0xBB0B4703, -0x220216B9, -0x5505262F, -0xC5BA3BBE, -0xB2BD0B28, -0x2BB45A92, -0x5CB36A04, -0xC2D7FFA7, -0xB5D0CF31, -0x2CD99E8B, -0x5BDEAE1D, -0x9B64C2B0, -0xEC63F226, -0x756AA39C, -0x026D930A, -0x9C0906A9, -0xEB0E363F, -0x72076785, -0x05005713, -0x95BF4A82, -0xE2B87A14, -0x7BB12BAE, -0x0CB61B38, -0x92D28E9B, -0xE5D5BE0D, -0x7CDCEFB7, -0x0BDBDF21, -0x86D3D2D4, -0xF1D4E242, -0x68DDB3F8, -0x1FDA836E, -0x81BE16CD, -0xF6B9265B, -0x6FB077E1, -0x18B74777, -0x88085AE6, -0xFF0F6A70, -0x66063BCA, -0x11010B5C, -0x8F659EFF, -0xF862AE69, -0x616BFFD3, -0x166CCF45, -0xA00AE278, -0xD70DD2EE, -0x4E048354, -0x3903B3C2, -0xA7672661, -0xD06016F7, -0x4969474D, -0x3E6E77DB, -0xAED16A4A, -0xD9D65ADC, -0x40DF0B66, -0x37D83BF0, -0xA9BCAE53, -0xDEBB9EC5, -0x47B2CF7F, -0x30B5FFE9, -0xBDBDF21C, -0xCABAC28A, -0x53B39330, -0x24B4A3A6, -0xBAD03605, -0xCDD70693, -0x54DE5729, -0x23D967BF, -0xB3667A2E, -0xC4614AB8, -0x5D681B02, -0x2A6F2B94, -0xB40BBE37, -0xC30C8EA1, -0x5A05DF1B, -0x2D02EF8D, -}; - -unsigned long CRC16(const unsigned char *buf, int size, int key) -{ - unsigned long ecx = key; //mov ecx, [esp+arg_8] - unsigned long eax = ecx; //mov eax, ecx - unsigned long edi; - - eax = ~ eax; //not eax - eax&=0xFF; //and eax, 0FFh - eax=IntArray[eax]; //mov eax, dword_0_10115D38[eax*4] IntArray - eax ^= 0x00FFFFFF; //xor eax, 0FFFFFFh - int edx = ecx; //mov edx, ecx - edx = edx >> 8; //sar edx, 8 - edx = edx ^ eax; //xor edx, eax - eax = eax >> 8; //sar eax, 8 - edx &= 0xFF; //and edx, 0FFh - eax &= 0x00FFFFFF; //and eax, 0FFFFFFh - eax ^= IntArray[edx]; //xor eax, dword_0_10115D38[edx*4] - edx = ecx; //mov edx, ecx - edx = edx >> 0x10; //sar edx, 10h - edx ^= eax; //xor edx, eax - eax = eax >> 8; //sar eax, 8 - edx &= 0xFF; //and edx, 0FFh - int esi = IntArray[edx]; //mov esi, dword_0_10115D38[edx*4] - edx = size; //mov edx, [esp+4+arg_4] - eax &= 0x00FFFFFF; //and eax, 0FFFFFFh - eax ^= esi; //xor eax, esi - ecx = ecx >> 0x18; //sar ecx, 18h - ecx ^= eax; //xor ecx, eax - ecx &= 0xFF; //and ecx, 0FFh - esi = IntArray[ecx]; //mov esi, dword_0_10115D38[ecx*4] - ecx = (int)*buf; //mov ecx, [esp+4+arg_0] - eax = eax >> 8; //sar eax, 8 - eax &= 0x00FFFFFF; //and eax, 0FFFFFFh - eax ^= esi; //xor eax, esi - for(int x = 0; x < size; x++) - { //eax is the crc, ecx is the current part of the buffer - int edx = 0; //xor edx, edx - edx = buf[x] & 0x00FF; //mov dl, [ecx] - - edx ^= eax; //xor edx, eax - eax = eax >> 8; //sar eax, 8 - edx &= 0xFF; //and edx, 0FFh - edi = IntArray[edx]; //mov edi, dword_0_10115D38[edx*4] - eax &= 0x00FFFFFF; //and eax, 0FFFFFFh - eax ^= edi; //xor eax, edi - } - return ~eax; -} diff --git a/source/common/Condition.cpp b/source/common/Condition.cpp deleted file mode 100644 index 4442541..0000000 --- a/source/common/Condition.cpp +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright (C) 2007-2025 EQ2EMulator -// Licensed under GPL v3 -#include "debug.h" -#include "Condition.h" - -#ifdef WIN32 -#else -#include -#include -#include -#endif - -#ifdef WIN32 -/* - - Windows does not support condition variables by default. - So we use a simple hack of sleeping in wait() and doing - nothing anywhere else. - - some possible places to look for ways to do this: - http://www.cs.wustl.edu/~schmidt/win32-cv-1.html - - http://sources.redhat.com/pthreads-win32/ - http://sources.redhat.com/cgi-bin/cvsweb.cgi/pthreads/pthread_cond_signal.c?rev=1.7&content-type=text/x-cvsweb-markup&cvsroot=pthreads-win32 - -*/ - -#define CONDITION_HACK_GRANULARITY 4 - - -Condition::Condition() -{ -} - -void Condition::Signal() -{ -} - -void Condition::SignalAll() -{ -} - -void Condition::Wait() -{ - Sleep(CONDITION_HACK_GRANULARITY); -} - -Condition::~Condition() -{ -} - - -#else //!WIN32 - -Condition::Condition() -{ - pthread_cond_init(&cond,NULL); - pthread_mutex_init(&mutex,NULL); -} - -void Condition::Signal() -{ - pthread_mutex_lock(&mutex); - pthread_cond_signal(&cond); - pthread_mutex_unlock(&mutex); -} - -void Condition::SignalAll() -{ - pthread_mutex_lock(&mutex); - pthread_cond_broadcast(&cond); - pthread_mutex_unlock(&mutex); -} - -void Condition::Wait() -{ - pthread_mutex_lock(&mutex); - pthread_cond_wait(&cond,&mutex); - pthread_mutex_unlock(&mutex); -} - -/* -I commented this specifically because I think it might be very -difficult to write a windows counterpart to it, so I would like -to discourage its use until we can confirm that it can be reasonably -implemented on windows. - -bool Condition::TimedWait(unsigned long usec) -{ -struct timeval now; -struct timespec timeout; -int retcode=0; - pthread_mutex_lock(&mutex); - gettimeofday(&now,NULL); - now.tv_usec+=usec; - timeout.tv_sec = now.tv_sec + (now.tv_usec/1000000); - timeout.tv_nsec = (now.tv_usec%1000000) *1000; - //cout << "now=" << now.tv_sec << "."< -#endif - -//Sombody, someday needs to figure out how to implement a condition -//system on windows... - - -class Condition { - private: -#ifndef WIN32 - pthread_cond_t cond; - pthread_mutex_t mutex; -#endif - public: - Condition(); - void Signal(); - void SignalAll(); - void Wait(); -// bool TimedWait(unsigned long usec); - ~Condition(); -}; - -#endif - - diff --git a/source/common/EQPacket.cpp b/source/common/EQPacket.cpp index 4fb0359..63fb3f3 100644 --- a/source/common/EQPacket.cpp +++ b/source/common/EQPacket.cpp @@ -13,7 +13,7 @@ #include "EQPacket.h" #include "misc.h" #include "op_codes.h" -#include "CRC16.h" +#include "crypto/crc.h" #include "opcodemgr.h" #include "packet_dump.h" #include "Log.h" diff --git a/source/common/EQStream.cpp b/source/common/EQStream.cpp index b3685af..fb2b1ef 100644 --- a/source/common/EQStream.cpp +++ b/source/common/EQStream.cpp @@ -29,7 +29,7 @@ #include "misc.h" #include "Mutex.h" #include "op_codes.h" -#include "CRC16.h" +#include "crypto/crc.h" #include "packet_dump.h" #include "EQ2_Common_Structs.h" #include "Log.h" diff --git a/source/common/EQStream.h b/source/common/EQStream.h index 2abfc31..098d960 100644 --- a/source/common/EQStream.h +++ b/source/common/EQStream.h @@ -21,8 +21,7 @@ #include "Mutex.h" #include "opcodemgr.h" #include "misc.h" -#include "Condition.h" -#include "Crypto.h" +#include "crypto/Crypto.h" #include "zlib.h" #include "timer.h" diff --git a/source/common/EQStreamFactory.cpp b/source/common/EQStreamFactory.cpp index 4abe59e..f4f4d51 100644 --- a/source/common/EQStreamFactory.cpp +++ b/source/common/EQStreamFactory.cpp @@ -289,7 +289,7 @@ void EQStreamFactory::ReaderLoop() s->SetFactory(this); s->SetStreamType(StreamType); Streams[temp] = s; - WriterWork.Signal(); + WriterWork.notify_one(); Push(s); s->Process(buffer, length); s->SetLastPacketTime(Timer::GetCurrentTime2()); @@ -538,7 +538,8 @@ void EQStreamFactory::WriterLoop() MStreams.unlock(); if (!stream_count) { - WriterWork.Wait(); + std::unique_lock lock(WriterWorkMutex); + WriterWork.wait(lock); } } } diff --git a/source/common/EQStreamFactory.h b/source/common/EQStreamFactory.h index c886faa..ab48a16 100644 --- a/source/common/EQStreamFactory.h +++ b/source/common/EQStreamFactory.h @@ -8,9 +8,10 @@ #include #include #include +#include +#include #include "../common/EQStream.h" -#include "../common/Condition.h" #include "../common/opcodemgr.h" #include "../common/timer.h" @@ -36,7 +37,8 @@ private: Mutex MCombinePacketRunning; // Mutex for combiner thread flag // Thread synchronization - Condition WriterWork; // Condition variable for writer thread + std::condition_variable WriterWork; // Condition variable for writer thread + std::mutex WriterWorkMutex; // Mutex for condition variable // Stream management EQStreamType StreamType; // Type of streams this factory creates @@ -108,7 +110,7 @@ public: MWriterRunning.lock(); WriterRunning = false; MWriterRunning.unlock(); - WriterWork.Signal(); + WriterWork.notify_one(); } void StopCombinePacket() { @@ -118,7 +120,7 @@ public: } void SignalWriter() { - WriterWork.Signal(); + WriterWork.notify_one(); } }; diff --git a/source/common/Crypto.cpp b/source/common/crypto/Crypto.cpp similarity index 100% rename from source/common/Crypto.cpp rename to source/common/crypto/Crypto.cpp diff --git a/source/common/Crypto.h b/source/common/crypto/Crypto.h similarity index 100% rename from source/common/Crypto.h rename to source/common/crypto/Crypto.h diff --git a/source/common/RC4.cpp b/source/common/crypto/RC4.cpp similarity index 100% rename from source/common/RC4.cpp rename to source/common/crypto/RC4.cpp diff --git a/source/common/RC4.h b/source/common/crypto/RC4.h similarity index 100% rename from source/common/RC4.h rename to source/common/crypto/RC4.h diff --git a/source/common/crypto/crc.cpp b/source/common/crypto/crc.cpp new file mode 100644 index 0000000..dc11181 --- /dev/null +++ b/source/common/crypto/crc.cpp @@ -0,0 +1,122 @@ +// Copyright (C) 2007-2025 EQ2EMulator +// Licensed under GPL v3 + +#include + +unsigned long IntArray[] = { + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, + 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, + 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, + 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, + 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, + 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, + 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, + 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, + 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, + 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, + 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, + 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, + 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, + 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, + 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, + 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, + 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, + 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, + 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, + 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, + 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, + 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, + 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, + 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, + 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, + 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, + 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, + 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, + 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, + 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, + 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, + 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, + 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, + 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, + 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, + 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, + 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, + 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, + 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, + 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, + 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, + 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, + 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, + 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, + 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, + 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, + 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, + 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, + 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, + 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, + 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, + 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, + 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, + 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, + 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, + 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, + 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, + 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, + 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, + 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, + 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, + 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, + 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D, +}; + +unsigned long CRC16(const unsigned char *buf, int size, int key) +{ + unsigned long ecx = key; //mov ecx, [esp+arg_8] + unsigned long eax = ecx; //mov eax, ecx + unsigned long edi; + + eax = ~ eax; //not eax + eax&=0xFF; //and eax, 0FFh + eax=IntArray[eax]; //mov eax, dword_0_10115D38[eax*4] IntArray + eax ^= 0x00FFFFFF; //xor eax, 0FFFFFFh + int edx = ecx; //mov edx, ecx + edx = edx >> 8; //sar edx, 8 + edx = edx ^ eax; //xor edx, eax + eax = eax >> 8; //sar eax, 8 + edx &= 0xFF; //and edx, 0FFh + eax &= 0x00FFFFFF; //and eax, 0FFFFFFh + eax ^= IntArray[edx]; //xor eax, dword_0_10115D38[edx*4] + edx = ecx; //mov edx, ecx + edx = edx >> 0x10; //sar edx, 10h + edx ^= eax; //xor edx, eax + eax = eax >> 8; //sar eax, 8 + edx &= 0xFF; //and edx, 0FFh + int esi = IntArray[edx]; //mov esi, dword_0_10115D38[edx*4] + edx = size; //mov edx, [esp+4+arg_4] + eax &= 0x00FFFFFF; //and eax, 0FFFFFFh + eax ^= esi; //xor eax, esi + ecx = ecx >> 0x18; //sar ecx, 18h + ecx ^= eax; //xor ecx, eax + ecx &= 0xFF; //and ecx, 0FFh + esi = IntArray[ecx]; //mov esi, dword_0_10115D38[ecx*4] + ecx = (int)*buf; //mov ecx, [esp+4+arg_0] + eax = eax >> 8; //sar eax, 8 + eax &= 0x00FFFFFF; //and eax, 0FFFFFFh + eax ^= esi; //xor eax, esi + + for(int x = 0; x < size; x++) { + //eax is the crc, ecx is the current part of the buffer + int edx = 0; //xor edx, edx + edx = buf[x] & 0x00FF; //mov dl, [ecx] + + edx ^= eax; //xor edx, eax + eax = eax >> 8; //sar eax, 8 + edx &= 0xFF; //and edx, 0FFh + edi = IntArray[edx]; //mov edi, dword_0_10115D38[edx*4] + eax &= 0x00FFFFFF; //and eax, 0FFFFFFh + eax ^= edi; //xor eax, edi + } + + return ~eax; +} diff --git a/source/common/CRC16.h b/source/common/crypto/crc.h similarity index 76% rename from source/common/CRC16.h rename to source/common/crypto/crc.h index f85c9c3..0a0498b 100644 --- a/source/common/CRC16.h +++ b/source/common/crypto/crc.h @@ -1,8 +1,6 @@ // Copyright (C) 2007-2025 EQ2EMulator // Licensed under GPL v3 -#ifndef _CRC16_H -#define _CRC16_H + +#pragma once unsigned long CRC16(const unsigned char *buf, int size, int key); - -#endif diff --git a/source/common/md5.cpp b/source/common/crypto/md5.cpp similarity index 98% rename from source/common/md5.cpp rename to source/common/crypto/md5.cpp index 7188ad5..7968980 100644 --- a/source/common/md5.cpp +++ b/source/common/crypto/md5.cpp @@ -1,9 +1,9 @@ // Copyright (C) 2007-2025 EQ2EMulator // Licensed under GPL v3 #include /* for memcpy() */ -#include "../common/md5.h" -#include "../common/MiscFunctions.h" -#include "../common/seperator.h" +#include "md5.h" +#include "../MiscFunctions.h" +#include "../seperator.h" MD5::MD5() { memset(pMD5, 0, 16); diff --git a/source/common/md5.h b/source/common/crypto/md5.h similarity index 100% rename from source/common/md5.h rename to source/common/crypto/md5.h diff --git a/source/common/sha512.cpp b/source/common/crypto/sha512.cpp similarity index 100% rename from source/common/sha512.cpp rename to source/common/crypto/sha512.cpp diff --git a/source/common/sha512.h b/source/common/crypto/sha512.h similarity index 100% rename from source/common/sha512.h rename to source/common/crypto/sha512.h diff --git a/source/common/dbcore.h b/source/common/dbcore.h index 881a111..f7a08cc 100644 --- a/source/common/dbcore.h +++ b/source/common/dbcore.h @@ -14,7 +14,6 @@ #include "../common/linked_list.h" #include "../common/queue.h" #include "../common/timer.h" -#include "../common/Condition.h" #ifdef LOGIN #define DB_INI_FILE "login_db.ini" #endif diff --git a/test_compile.sh b/test_compile.sh new file mode 100755 index 0000000..7be18d0 --- /dev/null +++ b/test_compile.sh @@ -0,0 +1,55 @@ +#!/bin/bash + +# Test compilation script - checks if code compiles without creating object files +# Uses -fsyntax-only flag to only check syntax without generating output + +echo "Testing compilation of EQStreamFactory with std::condition_variable..." + +# Compiler settings (matching makefile) +CC="g++" +DFLAGS="-DEQ2 -DLOGIN" +WFLAGS="-Wall -Wuninitialized -Wwrite-strings -Wcast-qual -Wcomment -Wcast-align -Wno-deprecated" +COPTS="$WFLAGS -march=native -pthread -pipe -DFX -D_GNU_SOURCE -DINVERSEXY $DFLAGS -I/usr/include/mysql -I/usr/local/include/boost -I/usr/include/lua5.4 -std=c++17" + +# Test EQStreamFactory.cpp compilation +echo "Checking EQStreamFactory.cpp..." +$CC -fsyntax-only $COPTS source/common/EQStreamFactory.cpp 2>&1 +if [ $? -eq 0 ]; then + echo "✓ EQStreamFactory.cpp compiles successfully" +else + echo "✗ EQStreamFactory.cpp compilation failed" + exit 1 +fi + +# Test EQStreamFactory.h inclusion +echo "Checking EQStreamFactory.h..." +echo '#include "source/common/EQStreamFactory.h"' | $CC -fsyntax-only $COPTS -x c++ - 2>&1 +if [ $? -eq 0 ]; then + echo "✓ EQStreamFactory.h compiles successfully" +else + echo "✗ EQStreamFactory.h compilation failed" + exit 1 +fi + +# Test files that previously included Condition.h +echo "Checking dbcore.h..." +echo '#include "source/common/dbcore.h"' | $CC -fsyntax-only $COPTS -x c++ - 2>&1 +if [ $? -eq 0 ]; then + echo "✓ dbcore.h compiles successfully" +else + echo "✗ dbcore.h compilation failed" + exit 1 +fi + +echo "Checking EQStream.h..." +echo '#include "source/common/EQStream.h"' | $CC -fsyntax-only $COPTS -x c++ - 2>&1 +if [ $? -eq 0 ]; then + echo "✓ EQStream.h compiles successfully" +else + echo "✗ EQStream.h compilation failed" + exit 1 +fi + +echo "" +echo "All compilation tests passed! The Condition class has been successfully replaced with std::condition_variable." +echo "Note: Condition.h and Condition.cpp files can now be safely removed from the project." \ No newline at end of file