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];
fd_set fd;
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>
{
@@ -309,7 +309,7 @@ DWORD WINAPI IOCPClient::WorkThreadProc(LPVOID lParam)
{
Mprintf("[select] return %d, GetLastError= %d. \n", iRet, WSAGetLastError());
This->Disconnect(); //<2F><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
This->m_CompressedBuffer.ClearBuffer();
m_CompressedBuffer.ClearBuffer();
if(This->m_exit_while_disconnect)
break;
}
@@ -321,13 +321,13 @@ DWORD WINAPI IOCPClient::WorkThreadProc(LPVOID lParam)
{
int a = WSAGetLastError();
This->Disconnect(); //<2F><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
This->m_CompressedBuffer.ClearBuffer();
m_CompressedBuffer.ClearBuffer();
if(This->m_exit_while_disconnect)
break;
}else{
szBuffer[iReceivedLength] = 0;
//<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
{
assert (ulLength > 0);
//<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 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>
while (m_CompressedBuffer.GetBufferLength() > HDR_LENGTH)
while (m_CompressedBuffer->GetBufferLength() > HDR_LENGTH)
{
// UnMask
char* src = (char*)m_CompressedBuffer.GetBuffer();
ULONG srcSize = m_CompressedBuffer.GetBufferLength();
char* src = (char*)m_CompressedBuffer->GetBuffer();
ULONG srcSize = m_CompressedBuffer->GetBufferLength();
ULONG ret = m_masker->UnMask(src, srcSize);
m_CompressedBuffer.Skip(ret);
if (m_CompressedBuffer.GetBufferLength() <= HDR_LENGTH)
m_CompressedBuffer->Skip(ret);
if (m_CompressedBuffer->GetBufferLength() <= HDR_LENGTH)
break;
char szPacketFlag[32] = {0};
src = (char*)m_CompressedBuffer.GetBuffer();
src = (char*)m_CompressedBuffer->GetBuffer();
CopyMemory(szPacketFlag, src, FLAG_LENGTH);
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ͷ
HeaderEncType encType = HeaderEncUnknown;
FlagType flagType = CheckHead(szPacketFlag, encType);
if (flagType == FLAG_UNKNOWN) {
Mprintf("[ERROR] OnServerReceiving memcmp fail: unknown header '%s'\n", szPacketFlag);
m_CompressedBuffer.ClearBuffer();
m_CompressedBuffer->ClearBuffer();
break;
}
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>
ULONG len = m_CompressedBuffer.GetBufferLength();
ULONG len = m_CompressedBuffer->GetBufferLength();
if (ulPackTotalLength && len >= ulPackTotalLength)
{
ULONG ulOriginalLength = 0;
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) &ulOriginalLength, sizeof(ULONG));
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) &ulOriginalLength, sizeof(ULONG));
ULONG ulCompressedLength = ulPackTotalLength - HDR_LENGTH;
const int bufSize = 512;
@@ -406,7 +406,7 @@ VOID IOCPClient::OnServerReceiving(char* szBuffer, ULONG ulLength)
PBYTE CompressedBuffer = ulCompressedLength > bufSize ? new BYTE[ulCompressedLength] : buf1;
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);
size_t iRet = uncompress(DeCompressedBuffer, &ulOriginalLength, CompressedBuffer, ulCompressedLength);
@@ -421,7 +421,7 @@ VOID IOCPClient::OnServerReceiving(char* szBuffer, ULONG ulLength)
}
else{
Mprintf("[ERROR] uncompress fail: dstLen %d, srcLen %d\n", ulOriginalLength, ulCompressedLength);
m_CompressedBuffer.ClearBuffer();
m_CompressedBuffer->ClearBuffer();
}
if (CompressedBuffer != buf1)delete [] CompressedBuffer;
@@ -432,7 +432,7 @@ VOID IOCPClient::OnServerReceiving(char* szBuffer, ULONG ulLength)
}
}
}catch(...) {
m_CompressedBuffer.ClearBuffer();
m_CompressedBuffer->ClearBuffer();
Mprintf("[ERROR] OnServerReceiving catch an error \n");
}
}

View File

@@ -156,13 +156,12 @@ protected:
}
BOOL OnServerSending(const char* szBuffer, ULONG ulOriginalLength);
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);
protected:
sockaddr_in m_ServerAddr;
SOCKET m_sClientSocket;
CBuffer m_CompressedBuffer;
BOOL m_bWorkThread;
HANDLE m_hWorkThread;
BOOL m_bIsRunning;

View File

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