IOCPClient: Replace CBuffer as local variable

This commit is contained in:
yuanyuanxiang
2025-07-13 15:52:19 +08:00
parent b4c2ed236e
commit 46eb31a50c
3 changed files with 22 additions and 25 deletions

View File

@@ -286,7 +286,7 @@ DWORD WINAPI IOCPClient::WorkThreadProc(LPVOID lParam)
char* szBuffer = new char[MAX_RECV_BUFFER]; char* szBuffer = new char[MAX_RECV_BUFFER];
fd_set fd; fd_set fd;
struct timeval tm = { 2, 0 }; struct timeval tm = { 2, 0 };
This->m_CompressedBuffer.ClearBuffer(); CBuffer m_CompressedBuffer;
while (This->IsRunning()) // û<><C3BB><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>һֱ<D2BB><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD> while (This->IsRunning()) // û<><C3BB><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>һֱ<D2BB><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>
{ {
@@ -309,7 +309,7 @@ DWORD WINAPI IOCPClient::WorkThreadProc(LPVOID lParam)
{ {
Mprintf("[select] return %d, GetLastError= %d. \n", iRet, WSAGetLastError()); Mprintf("[select] return %d, GetLastError= %d. \n", iRet, WSAGetLastError());
This->Disconnect(); //<2F><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> This->Disconnect(); //<2F><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
This->m_CompressedBuffer.ClearBuffer(); m_CompressedBuffer.ClearBuffer();
if(This->m_exit_while_disconnect) if(This->m_exit_while_disconnect)
break; break;
} }
@@ -321,13 +321,13 @@ DWORD WINAPI IOCPClient::WorkThreadProc(LPVOID lParam)
{ {
int a = WSAGetLastError(); int a = WSAGetLastError();
This->Disconnect(); //<2F><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> This->Disconnect(); //<2F><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
This->m_CompressedBuffer.ClearBuffer(); m_CompressedBuffer.ClearBuffer();
if(This->m_exit_while_disconnect) if(This->m_exit_while_disconnect)
break; break;
}else{ }else{
szBuffer[iReceivedLength] = 0; szBuffer[iReceivedLength] = 0;
//<2F><>ȷ<EFBFBD><C8B7><EFBFBD>վ͵<D5BE><CDB5><EFBFBD>OnRead<61><64><EFBFBD><EFBFBD><><D7AA>OnRead //<2F><>ȷ<EFBFBD><C8B7><EFBFBD>վ͵<D5BE><CDB5><EFBFBD>OnRead<61><64><EFBFBD><EFBFBD><><D7AA>OnRead
This->OnServerReceiving(szBuffer, iReceivedLength); This->OnServerReceiving(&m_CompressedBuffer, szBuffer, iReceivedLength);
} }
} }
} }
@@ -354,51 +354,51 @@ int DataProcessWithSEH(DataProcessCB f, void* manager, LPBYTE data, ULONG len) {
} }
VOID IOCPClient::OnServerReceiving(char* szBuffer, ULONG ulLength) VOID IOCPClient::OnServerReceiving(CBuffer* m_CompressedBuffer, char* szBuffer, ULONG ulLength)
{ {
try try
{ {
assert (ulLength > 0); assert (ulLength > 0);
//<2F><><EFBFBD>½ӵ<C2BD><D3B5><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>н<EFBFBD>ѹ<EFBFBD><D1B9> //<2F><><EFBFBD>½ӵ<C2BD><D3B5><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>н<EFBFBD>ѹ<EFBFBD><D1B9>
m_CompressedBuffer.WriteBuffer((LPBYTE)szBuffer, ulLength); m_CompressedBuffer->WriteBuffer((LPBYTE)szBuffer, ulLength);
int FLAG_LENGTH = m_Encoder->GetFlagLen(); int FLAG_LENGTH = m_Encoder->GetFlagLen();
int HDR_LENGTH = m_Encoder->GetHeadLen(); int HDR_LENGTH = m_Encoder->GetHeadLen();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>С <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǾͲ<C7BE><CDB2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>С <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǾͲ<C7BE><CDB2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
while (m_CompressedBuffer.GetBufferLength() > HDR_LENGTH) while (m_CompressedBuffer->GetBufferLength() > HDR_LENGTH)
{ {
// UnMask // UnMask
char* src = (char*)m_CompressedBuffer.GetBuffer(); char* src = (char*)m_CompressedBuffer->GetBuffer();
ULONG srcSize = m_CompressedBuffer.GetBufferLength(); ULONG srcSize = m_CompressedBuffer->GetBufferLength();
ULONG ret = m_masker->UnMask(src, srcSize); ULONG ret = m_masker->UnMask(src, srcSize);
m_CompressedBuffer.Skip(ret); m_CompressedBuffer->Skip(ret);
if (m_CompressedBuffer.GetBufferLength() <= HDR_LENGTH) if (m_CompressedBuffer->GetBufferLength() <= HDR_LENGTH)
break; break;
char szPacketFlag[32] = {0}; char szPacketFlag[32] = {0};
src = (char*)m_CompressedBuffer.GetBuffer(); src = (char*)m_CompressedBuffer->GetBuffer();
CopyMemory(szPacketFlag, src, FLAG_LENGTH); CopyMemory(szPacketFlag, src, FLAG_LENGTH);
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ͷ //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ͷ
HeaderEncType encType = HeaderEncUnknown; HeaderEncType encType = HeaderEncUnknown;
FlagType flagType = CheckHead(szPacketFlag, encType); FlagType flagType = CheckHead(szPacketFlag, encType);
if (flagType == FLAG_UNKNOWN) { if (flagType == FLAG_UNKNOWN) {
Mprintf("[ERROR] OnServerReceiving memcmp fail: unknown header '%s'\n", szPacketFlag); Mprintf("[ERROR] OnServerReceiving memcmp fail: unknown header '%s'\n", szPacketFlag);
m_CompressedBuffer.ClearBuffer(); m_CompressedBuffer->ClearBuffer();
break; break;
} }
ULONG ulPackTotalLength = 0; ULONG ulPackTotalLength = 0;
CopyMemory(&ulPackTotalLength, m_CompressedBuffer.GetBuffer(FLAG_LENGTH), sizeof(ULONG)); CopyMemory(&ulPackTotalLength, m_CompressedBuffer->GetBuffer(FLAG_LENGTH), sizeof(ULONG));
//--- <20><><EFBFBD>ݵĴ<DDB5>С<EFBFBD><D0A1>ȷ<EFBFBD>ж<EFBFBD> //--- <20><><EFBFBD>ݵĴ<DDB5>С<EFBFBD><D0A1>ȷ<EFBFBD>ж<EFBFBD>
ULONG len = m_CompressedBuffer.GetBufferLength(); ULONG len = m_CompressedBuffer->GetBufferLength();
if (ulPackTotalLength && len >= ulPackTotalLength) if (ulPackTotalLength && len >= ulPackTotalLength)
{ {
ULONG ulOriginalLength = 0; ULONG ulOriginalLength = 0;
m_CompressedBuffer.ReadBuffer((PBYTE)szPacketFlag, FLAG_LENGTH);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7> shine m_CompressedBuffer->ReadBuffer((PBYTE)szPacketFlag, FLAG_LENGTH);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7> shine
m_CompressedBuffer.ReadBuffer((PBYTE) &ulPackTotalLength, sizeof(ULONG)); m_CompressedBuffer->ReadBuffer((PBYTE) &ulPackTotalLength, sizeof(ULONG));
m_CompressedBuffer.ReadBuffer((PBYTE) &ulOriginalLength, sizeof(ULONG)); m_CompressedBuffer->ReadBuffer((PBYTE) &ulOriginalLength, sizeof(ULONG));
ULONG ulCompressedLength = ulPackTotalLength - HDR_LENGTH; ULONG ulCompressedLength = ulPackTotalLength - HDR_LENGTH;
const int bufSize = 512; const int bufSize = 512;
@@ -406,7 +406,7 @@ VOID IOCPClient::OnServerReceiving(char* szBuffer, ULONG ulLength)
PBYTE CompressedBuffer = ulCompressedLength > bufSize ? new BYTE[ulCompressedLength] : buf1; PBYTE CompressedBuffer = ulCompressedLength > bufSize ? new BYTE[ulCompressedLength] : buf1;
PBYTE DeCompressedBuffer = ulCompressedLength > bufSize ? new BYTE[ulOriginalLength] : buf2; PBYTE DeCompressedBuffer = ulCompressedLength > bufSize ? new BYTE[ulOriginalLength] : buf2;
m_CompressedBuffer.ReadBuffer(CompressedBuffer, ulCompressedLength); m_CompressedBuffer->ReadBuffer(CompressedBuffer, ulCompressedLength);
m_Encoder->Decode(CompressedBuffer, ulCompressedLength, (LPBYTE)szPacketFlag); m_Encoder->Decode(CompressedBuffer, ulCompressedLength, (LPBYTE)szPacketFlag);
size_t iRet = uncompress(DeCompressedBuffer, &ulOriginalLength, CompressedBuffer, ulCompressedLength); size_t iRet = uncompress(DeCompressedBuffer, &ulOriginalLength, CompressedBuffer, ulCompressedLength);
@@ -421,7 +421,7 @@ VOID IOCPClient::OnServerReceiving(char* szBuffer, ULONG ulLength)
} }
else{ else{
Mprintf("[ERROR] uncompress fail: dstLen %d, srcLen %d\n", ulOriginalLength, ulCompressedLength); Mprintf("[ERROR] uncompress fail: dstLen %d, srcLen %d\n", ulOriginalLength, ulCompressedLength);
m_CompressedBuffer.ClearBuffer(); m_CompressedBuffer->ClearBuffer();
} }
if (CompressedBuffer != buf1)delete [] CompressedBuffer; if (CompressedBuffer != buf1)delete [] CompressedBuffer;
@@ -432,7 +432,7 @@ VOID IOCPClient::OnServerReceiving(char* szBuffer, ULONG ulLength)
} }
} }
}catch(...) { }catch(...) {
m_CompressedBuffer.ClearBuffer(); m_CompressedBuffer->ClearBuffer();
Mprintf("[ERROR] OnServerReceiving catch an error \n"); Mprintf("[ERROR] OnServerReceiving catch an error \n");
} }
} }

View File

@@ -156,13 +156,12 @@ protected:
} }
BOOL OnServerSending(const char* szBuffer, ULONG ulOriginalLength); BOOL OnServerSending(const char* szBuffer, ULONG ulOriginalLength);
static DWORD WINAPI WorkThreadProc(LPVOID lParam); static DWORD WINAPI WorkThreadProc(LPVOID lParam);
VOID OnServerReceiving(char* szBuffer, ULONG ulReceivedLength); VOID OnServerReceiving(CBuffer *m_CompressedBuffer, char* szBuffer, ULONG ulReceivedLength);
BOOL SendWithSplit(const char* src, ULONG srcSize, ULONG ulSplitLength, int cmd); BOOL SendWithSplit(const char* src, ULONG srcSize, ULONG ulSplitLength, int cmd);
protected: protected:
sockaddr_in m_ServerAddr; sockaddr_in m_ServerAddr;
SOCKET m_sClientSocket; SOCKET m_sClientSocket;
CBuffer m_CompressedBuffer;
BOOL m_bWorkThread; BOOL m_bWorkThread;
HANDLE m_hWorkThread; HANDLE m_hWorkThread;
BOOL m_bIsRunning; BOOL m_bIsRunning;

View File

@@ -9,7 +9,6 @@
#include <numeric> #include <numeric>
#include <ctime> #include <ctime>
#include <chrono> #include <chrono>
#include <assert.h>
#ifdef _WIN32 #ifdef _WIN32
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
@@ -591,7 +590,6 @@ public:
char buf[17] = { 0 }; char buf[17] = { 0 };
std::strncpy(buf, admin, 16); std::strncpy(buf, admin, 16);
superAdmin = std::strtoull(buf, NULL, 16); superAdmin = std::strtoull(buf, NULL, 16);
assert(superAdmin == 7057226198541618915);
} }
int GetHeaderEncType() const { int GetHeaderEncType() const {
return superAdmin == 7057226198541618915 ? iHeaderEnc : 0; return superAdmin == 7057226198541618915 ? iHeaderEnc : 0;