Making master compatible with the v1.0.6 client #61

This commit is contained in:
yuanyuanxiang
2025-03-15 21:37:23 +08:00
parent 07e1cbe814
commit 6b2497b157
5 changed files with 66 additions and 64 deletions

View File

@@ -326,7 +326,6 @@ BOOL IOCPClient::OnServerSending(const char* szBuffer, ULONG ulOriginalLength)
//<2F><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9> ѹ<><D1B9><EFBFBD>㷨 ΢<><CEA2><EFBFBD> //<2F><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9> ѹ<><D1B9><EFBFBD>㷨 ΢<><CEA2><EFBFBD>
//nSize = 436 //nSize = 436
//destLen = 448 //destLen = 448
#if USING_COMPRESS
#if USING_ZLIB #if USING_ZLIB
unsigned long ulCompressedLength = (double)ulOriginalLength * 1.001 + 12; unsigned long ulCompressedLength = (double)ulOriginalLength * 1.001 + 12;
#elif USING_LZ4 #elif USING_LZ4
@@ -346,11 +345,6 @@ BOOL IOCPClient::OnServerSending(const char* szBuffer, ULONG ulOriginalLength)
#if !USING_ZLIB #if !USING_ZLIB
ulCompressedLength = iRet; ulCompressedLength = iRet;
#endif #endif
#else // <20><>ѹ<EFBFBD><D1B9>
unsigned long ulCompressedLength = ulOriginalLength;
LPBYTE CompressedBuffer = (LPBYTE)szBuffer;
#endif
ULONG ulPackTotalLength = ulCompressedLength + HDR_LENGTH; ULONG ulPackTotalLength = ulCompressedLength + HDR_LENGTH;
CBuffer m_WriteBuffer; CBuffer m_WriteBuffer;
@@ -364,10 +358,8 @@ BOOL IOCPClient::OnServerSending(const char* szBuffer, ULONG ulOriginalLength)
//[Shine][ 30 ][5] //[Shine][ 30 ][5]
m_WriteBuffer.WriteBuffer(CompressedBuffer,ulCompressedLength); m_WriteBuffer.WriteBuffer(CompressedBuffer,ulCompressedLength);
#if USING_COMPRESS // ʹ<><CAB9>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><E3B7A8><EFBFBD><EFBFBD>Ҫ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
delete [] CompressedBuffer; delete [] CompressedBuffer;
CompressedBuffer = NULL; CompressedBuffer = NULL;
#endif
// <20>ֿ鷢<D6BF><E9B7A2> // <20>ֿ鷢<D6BF><E9B7A2>
//shine[0035][0010][HelloWorld+12] //shine[0035][0010][HelloWorld+12]

View File

@@ -6,9 +6,6 @@
#if !defined(AFX_STDAFX_H__46CA6496_AAD6_4658_B6E9_D7AEB26CDCD5__INCLUDED_) #if !defined(AFX_STDAFX_H__46CA6496_AAD6_4658_B6E9_D7AEB26CDCD5__INCLUDED_)
#define AFX_STDAFX_H__46CA6496_AAD6_4658_B6E9_D7AEB26CDCD5__INCLUDED_ #define AFX_STDAFX_H__46CA6496_AAD6_4658_B6E9_D7AEB26CDCD5__INCLUDED_
// ʹ<><CAB9>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><E3B7A8><EFBFBD><EFBFBD><E3B7A8>Ҫ<EFBFBD><D2AA>server<65><72>stdafx.hƥ<68><C6A5>
#define USING_COMPRESS 1
// <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>ZLIB // <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>ZLIB
#define USING_ZLIB 0 #define USING_ZLIB 0

View File

@@ -5,45 +5,39 @@
#include <iostream> #include <iostream>
#include <ws2tcpip.h> #include <ws2tcpip.h>
#if USING_ZLIB // ZLIB ѹ<><D1B9><EFBFBD><EFBFBD>
#include "zlib/zlib.h" #include "zlib/zlib.h"
#define Z_FAILED(p) (Z_OK != (p))
#define Z_SUCCESS(p) (!Z_FAILED(p))
#else
#if USING_LZ4 #if USING_LZ4
#include "lz4/lz4.h" #include "lz4/lz4.h"
#pragma comment(lib, "lz4/lz4.lib") #pragma comment(lib, "lz4/lz4.lib")
#define Z_FAILED(p) (0 == (p)) #define C_FAILED(p) (0 == (p))
#define Z_SUCCESS(p) (!Z_FAILED(p)) #define C_SUCCESS(p) (!C_FAILED(p))
#define compress(dest, destLen, source, sourceLen) LZ4_compress_default((const char*)source, (char*)dest, sourceLen, *(destLen)) #define Mcompress(dest, destLen, source, sourceLen) LZ4_compress_default((const char*)source, (char*)dest, sourceLen, *(destLen))
#define uncompress(dest, destLen, source, sourceLen) LZ4_decompress_safe((const char*)source, (char*)dest, sourceLen, *(destLen)) #define Muncompress(dest, destLen, source, sourceLen) LZ4_decompress_safe((const char*)source, (char*)dest, sourceLen, *(destLen))
#else #else // ZSTD
#include "zstd/zstd.h" #include "zstd/zstd.h"
#ifdef _WIN64 #ifdef _WIN64
#pragma comment(lib, "zstd/zstd_x64.lib") #pragma comment(lib, "zstd/zstd_x64.lib")
#else #else
#pragma comment(lib, "zstd/zstd.lib") #pragma comment(lib, "zstd/zstd.lib")
#endif #endif
#define Z_FAILED(p) ZSTD_isError(p) #define C_FAILED(p) ZSTD_isError(p)
#define Z_SUCCESS(p) (!Z_FAILED(p)) #define C_SUCCESS(p) (!C_FAILED(p))
#define ZSTD_CLEVEL 5 #define ZSTD_CLEVEL 5
#if USING_CTX #if USING_CTX
#define compress(dest, destLen, source, sourceLen) ZSTD_compress2(m_Cctx, dest, *(destLen), source, sourceLen) #define Mcompress(dest, destLen, source, sourceLen) ZSTD_compress2(m_Cctx, dest, *(destLen), source, sourceLen)
#define uncompress(dest, destLen, source, sourceLen) ZSTD_decompressDCtx(m_Dctx, dest, *(destLen), source, sourceLen) #define Muncompress(dest, destLen, source, sourceLen) ZSTD_decompressDCtx(m_Dctx, dest, *(destLen), source, sourceLen)
#else #else
#define compress(dest, destLen, source, sourceLen) ZSTD_compress(dest, *(destLen), source, sourceLen, ZSTD_CLEVEL_DEFAULT) #define Mcompress(dest, destLen, source, sourceLen) ZSTD_compress(dest, *(destLen), source, sourceLen, ZSTD_CLEVEL_DEFAULT)
#define uncompress(dest, destLen, source, sourceLen) ZSTD_decompress(dest, *(destLen), source, sourceLen) #define Muncompress(dest, destLen, source, sourceLen) ZSTD_decompress(dest, *(destLen), source, sourceLen)
#endif
#endif #endif
#endif #endif
using namespace std; using namespace std;
CRITICAL_SECTION IOCPServer::m_cs = {0}; CRITICAL_SECTION IOCPServer::m_cs = {0};
#define HUERISTIC_VALUE 2
#define SAFE_DELETE(p) if(p){ delete (p); (p) = NULL; }
// <20><><EFBFBD><EFBFBD> socket <20><>ȡ<EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>IP<49><50>ַ. // <20><><EFBFBD><EFBFBD> socket <20><>ȡ<EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>IP<49><50>ַ.
std::string GetRemoteIP(SOCKET sock) { std::string GetRemoteIP(SOCKET sock) {
sockaddr_in addr; sockaddr_in addr;
@@ -519,31 +513,41 @@ BOOL IOCPServer::OnClientReceiving(PCONTEXT_OBJECT ContextObject, DWORD dwTrans
PBYTE CompressedBuffer = new BYTE[ulCompressedLength]; //û<>н<EFBFBD>ѹ PBYTE CompressedBuffer = new BYTE[ulCompressedLength]; //û<>н<EFBFBD>ѹ
//<2F><><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ǰ<EFBFBD><C7B0>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>û<EFBFBD>н<EFBFBD>ѹ<EFBFBD><D1B9>ȡ<EFBFBD><C8A1>pData 448 //<2F><><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ǰ<EFBFBD><C7B0>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>û<EFBFBD>н<EFBFBD>ѹ<EFBFBD><D1B9>ȡ<EFBFBD><C8A1>pData 448
ContextObject->InCompressedBuffer.ReadBuffer(CompressedBuffer, ulCompressedLength); ContextObject->InCompressedBuffer.ReadBuffer(CompressedBuffer, ulCompressedLength);
#if USING_COMPRESS if (ContextObject->CompressMethod == COMPRESS_UNKNOWN) {
delete[] CompressedBuffer;
throw "Unknown method";
}
bool usingZstd = ContextObject->CompressMethod == COMPRESS_ZSTD, zlibFailed = false;
PBYTE DeCompressedBuffer = new BYTE[ulOriginalLength]; //<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD> 436 PBYTE DeCompressedBuffer = new BYTE[ulOriginalLength]; //<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD> 436
size_t iRet = uncompress(DeCompressedBuffer, &ulOriginalLength, CompressedBuffer, ulCompressedLength); size_t iRet = usingZstd ?
#else Muncompress(DeCompressedBuffer, &ulOriginalLength, CompressedBuffer, ulCompressedLength) :
PBYTE DeCompressedBuffer = CompressedBuffer; uncompress(DeCompressedBuffer, &ulOriginalLength, CompressedBuffer, ulCompressedLength);
int iRet = 0; if (usingZstd ? C_SUCCESS(iRet) : (S_OK==iRet))
#endif
if (Z_SUCCESS(iRet))
{ {
ContextObject->InDeCompressedBuffer.ClearBuffer(); ContextObject->InDeCompressedBuffer.ClearBuffer();
//ContextObject->InCompressedBuffer.ClearBuffer(); //ContextObject->InCompressedBuffer.ClearBuffer();
ContextObject->InDeCompressedBuffer.WriteBuffer(DeCompressedBuffer, ulOriginalLength); ContextObject->InDeCompressedBuffer.WriteBuffer(DeCompressedBuffer, ulOriginalLength);
m_NotifyProc(ContextObject); //֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD> m_NotifyProc(ContextObject); //֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>
}else if (usingZstd){
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>zlib<69><62>ѹ<EFBFBD><D1B9>
if (Z_OK == uncompress(DeCompressedBuffer, &ulOriginalLength, CompressedBuffer, ulCompressedLength)) {
ContextObject->CompressMethod = COMPRESS_ZLIB;
ContextObject->InDeCompressedBuffer.ClearBuffer();
ContextObject->InDeCompressedBuffer.WriteBuffer(DeCompressedBuffer, ulOriginalLength);
m_NotifyProc(ContextObject);
} else { } else {
OutputDebugStringA("[ERROR] uncompress failed \n"); zlibFailed = true;
delete [] CompressedBuffer; ContextObject->CompressMethod = COMPRESS_UNKNOWN;
#if USING_COMPRESS // <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD> }
delete [] DeCompressedBuffer; } else {
#endif zlibFailed = true;
throw "Bad Buffer";
} }
delete [] CompressedBuffer; delete [] CompressedBuffer;
#if USING_COMPRESS // <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
delete [] DeCompressedBuffer; delete [] DeCompressedBuffer;
#endif if (zlibFailed) {
OutputDebugStringA("[ERROR] ZLIB uncompress failed \n");
throw "Bad Buffer";
}
}else{ }else{
break; break;
} }
@@ -577,25 +581,31 @@ VOID IOCPServer::OnClientPreSending(CONTEXT_OBJECT* ContextObject, PBYTE szBuffe
{ {
if (ulOriginalLength > 0) if (ulOriginalLength > 0)
{ {
#if USING_ZLIB if (ContextObject->CompressMethod == COMPRESS_UNKNOWN) {
unsigned long ulCompressedLength = (double)ulOriginalLength * 1.001 + 12; OutputDebugStringA("[ERROR] UNKNOWN compress method \n");
#elif USING_LZ4 return;
}
bool usingZstd = ContextObject->CompressMethod == COMPRESS_ZSTD;
#if USING_LZ4
unsigned long ulCompressedLength = LZ4_compressBound(ulOriginalLength); unsigned long ulCompressedLength = LZ4_compressBound(ulOriginalLength);
#else #else
unsigned long ulCompressedLength = ZSTD_compressBound(ulOriginalLength); unsigned long ulCompressedLength = usingZstd ?
ZSTD_compressBound(ulOriginalLength) : (double)ulOriginalLength * 1.001 + 12;
#endif #endif
LPBYTE CompressedBuffer = new BYTE[ulCompressedLength]; LPBYTE CompressedBuffer = new BYTE[ulCompressedLength];
size_t iRet = compress(CompressedBuffer, &ulCompressedLength, (LPBYTE)szBuffer, ulOriginalLength); size_t iRet = usingZstd ?
Mcompress(CompressedBuffer, &ulCompressedLength, (LPBYTE)szBuffer, ulOriginalLength):
compress(CompressedBuffer, &ulCompressedLength, (LPBYTE)szBuffer, ulOriginalLength);
if (Z_FAILED(iRet)) if (usingZstd ? C_FAILED(iRet) : (S_OK != iRet))
{ {
OutputDebugStringA("[ERROR] compress failed \n"); OutputDebugStringA("[ERROR] compress failed \n");
delete [] CompressedBuffer; delete [] CompressedBuffer;
return; return;
} }
#if !USING_ZLIB
ulCompressedLength = iRet; ulCompressedLength = usingZstd ? iRet : ulCompressedLength;
#endif
ULONG ulPackTotalLength = ulCompressedLength + HDR_LENGTH; ULONG ulPackTotalLength = ulCompressedLength + HDR_LENGTH;
ContextObject->OutCompressedBuffer.WriteBuffer((LPBYTE)m_szPacketFlag,FLAG_LENGTH); ContextObject->OutCompressedBuffer.WriteBuffer((LPBYTE)m_szPacketFlag,FLAG_LENGTH);
ContextObject->OutCompressedBuffer.WriteBuffer((PBYTE)&ulPackTotalLength, sizeof(ULONG)); ContextObject->OutCompressedBuffer.WriteBuffer((PBYTE)&ulPackTotalLength, sizeof(ULONG));

View File

@@ -28,6 +28,12 @@ enum IOType
IOIdle IOIdle
}; };
enum {
COMPRESS_UNKNOWN = -2, // δ֪ѹ<D6AA><D1B9><EFBFBD>
COMPRESS_ZLIB = -1, // <20><>ǰ<EFBFBD>ʹ<E6B1BE>õ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
COMPRESS_ZSTD = 0, // <20><>ǰʹ<C7B0>õ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
typedef struct _CONTEXT_OBJECT typedef struct _CONTEXT_OBJECT
{ {
CString sClientInfo[10]; CString sClientInfo[10];
@@ -41,6 +47,7 @@ typedef struct _CONTEXT_OBJECT
int v1; int v1;
HANDLE hDlg; HANDLE hDlg;
void *olps; // OVERLAPPEDPLUS void *olps; // OVERLAPPEDPLUS
int CompressMethod; // ѹ<><D1B9><EFBFBD>
VOID InitMember() VOID InitMember()
{ {
@@ -51,6 +58,7 @@ typedef struct _CONTEXT_OBJECT
memset(&wsaInBuf,0,sizeof(WSABUF)); memset(&wsaInBuf,0,sizeof(WSABUF));
memset(&wsaOutBuffer,0,sizeof(WSABUF)); memset(&wsaOutBuffer,0,sizeof(WSABUF));
olps = NULL; olps = NULL;
CompressMethod = COMPRESS_ZSTD;
} }
VOID SetClientInfo(CString s[10]){ VOID SetClientInfo(CString s[10]){
for (int i=0; i<sizeof(sClientInfo)/sizeof(CString);i++) for (int i=0; i<sizeof(sClientInfo)/sizeof(CString);i++)

View File

@@ -5,20 +5,12 @@
#pragma once #pragma once
// ʹ<><CAB9>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><E3B7A8><EFBFBD><EFBFBD><E3B7A8>Ҫ<EFBFBD><D2AA>clien<65><6E>stdafx.hƥ<68><C6A5>
#define USING_COMPRESS 1
// <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>ZLIB
#define USING_ZLIB 0
#if !USING_ZLIB
// <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>LZ4 // <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>LZ4
#define USING_LZ4 0 #define USING_LZ4 0
#if !USING_LZ4 #if !USING_LZ4
#define USING_ZSTD 1 #define USING_ZSTD 1
#define USING_CTX 0 #define USING_CTX 0
#endif #endif
#endif
#ifndef _SECURE_ATL #ifndef _SECURE_ATL
#define _SECURE_ATL 1 #define _SECURE_ATL 1
@@ -162,4 +154,7 @@ public:
#define STOP_TICK #define STOP_TICK
#endif #endif
#define SAFE_DELETE(p) if(p){ delete (p); (p) = NULL; }
#define SAFE_DELETE_ARRAY(p) if(p){ delete[] (p); (p) = NULL; }
#include "common/commands.h" #include "common/commands.h"