IOCPClient: Replace CBuffer as local variable
This commit is contained in:
@@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user