Making master compatible with the v1.0.6 client #61
This commit is contained in:
@@ -5,45 +5,39 @@
|
||||
#include <iostream>
|
||||
#include <ws2tcpip.h>
|
||||
|
||||
#if USING_ZLIB
|
||||
// ZLIB ѹ<><D1B9><EFBFBD><EFBFBD>
|
||||
#include "zlib/zlib.h"
|
||||
#define Z_FAILED(p) (Z_OK != (p))
|
||||
#define Z_SUCCESS(p) (!Z_FAILED(p))
|
||||
#else
|
||||
|
||||
#if USING_LZ4
|
||||
#include "lz4/lz4.h"
|
||||
#pragma comment(lib, "lz4/lz4.lib")
|
||||
#define Z_FAILED(p) (0 == (p))
|
||||
#define Z_SUCCESS(p) (!Z_FAILED(p))
|
||||
#define compress(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))
|
||||
#else
|
||||
#define C_FAILED(p) (0 == (p))
|
||||
#define C_SUCCESS(p) (!C_FAILED(p))
|
||||
#define Mcompress(dest, destLen, source, sourceLen) LZ4_compress_default((const char*)source, (char*)dest, sourceLen, *(destLen))
|
||||
#define Muncompress(dest, destLen, source, sourceLen) LZ4_decompress_safe((const char*)source, (char*)dest, sourceLen, *(destLen))
|
||||
#else // ZSTD
|
||||
#include "zstd/zstd.h"
|
||||
#ifdef _WIN64
|
||||
#pragma comment(lib, "zstd/zstd_x64.lib")
|
||||
#else
|
||||
#pragma comment(lib, "zstd/zstd.lib")
|
||||
#endif
|
||||
#define Z_FAILED(p) ZSTD_isError(p)
|
||||
#define Z_SUCCESS(p) (!Z_FAILED(p))
|
||||
#define C_FAILED(p) ZSTD_isError(p)
|
||||
#define C_SUCCESS(p) (!C_FAILED(p))
|
||||
#define ZSTD_CLEVEL 5
|
||||
#if USING_CTX
|
||||
#define compress(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 Mcompress(dest, destLen, source, sourceLen) ZSTD_compress2(m_Cctx, dest, *(destLen), source, sourceLen)
|
||||
#define Muncompress(dest, destLen, source, sourceLen) ZSTD_decompressDCtx(m_Dctx, dest, *(destLen), source, sourceLen)
|
||||
#else
|
||||
#define compress(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)
|
||||
#endif
|
||||
#define Mcompress(dest, destLen, source, sourceLen) ZSTD_compress(dest, *(destLen), source, sourceLen, ZSTD_CLEVEL_DEFAULT)
|
||||
#define Muncompress(dest, destLen, source, sourceLen) ZSTD_decompress(dest, *(destLen), source, sourceLen)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
using namespace std;
|
||||
|
||||
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>ַ.
|
||||
std::string GetRemoteIP(SOCKET sock) {
|
||||
sockaddr_in addr;
|
||||
@@ -519,31 +513,41 @@ BOOL IOCPServer::OnClientReceiving(PCONTEXT_OBJECT ContextObject, DWORD dwTrans
|
||||
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
|
||||
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
|
||||
size_t iRet = uncompress(DeCompressedBuffer, &ulOriginalLength, CompressedBuffer, ulCompressedLength);
|
||||
#else
|
||||
PBYTE DeCompressedBuffer = CompressedBuffer;
|
||||
int iRet = 0;
|
||||
#endif
|
||||
if (Z_SUCCESS(iRet))
|
||||
size_t iRet = usingZstd ?
|
||||
Muncompress(DeCompressedBuffer, &ulOriginalLength, CompressedBuffer, ulCompressedLength) :
|
||||
uncompress(DeCompressedBuffer, &ulOriginalLength, CompressedBuffer, ulCompressedLength);
|
||||
if (usingZstd ? C_SUCCESS(iRet) : (S_OK==iRet))
|
||||
{
|
||||
ContextObject->InDeCompressedBuffer.ClearBuffer();
|
||||
//ContextObject->InCompressedBuffer.ClearBuffer();
|
||||
ContextObject->InDeCompressedBuffer.WriteBuffer(DeCompressedBuffer, ulOriginalLength);
|
||||
m_NotifyProc(ContextObject); //֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>
|
||||
}else{
|
||||
OutputDebugStringA("[ERROR] uncompress failed \n");
|
||||
delete [] CompressedBuffer;
|
||||
#if USING_COMPRESS // <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
||||
delete [] DeCompressedBuffer;
|
||||
#endif
|
||||
throw "Bad Buffer";
|
||||
}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 {
|
||||
zlibFailed = true;
|
||||
ContextObject->CompressMethod = COMPRESS_UNKNOWN;
|
||||
}
|
||||
} else {
|
||||
zlibFailed = true;
|
||||
}
|
||||
delete [] CompressedBuffer;
|
||||
#if USING_COMPRESS // <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
||||
delete [] DeCompressedBuffer;
|
||||
#endif
|
||||
if (zlibFailed) {
|
||||
OutputDebugStringA("[ERROR] ZLIB uncompress failed \n");
|
||||
throw "Bad Buffer";
|
||||
}
|
||||
}else{
|
||||
break;
|
||||
}
|
||||
@@ -577,25 +581,31 @@ VOID IOCPServer::OnClientPreSending(CONTEXT_OBJECT* ContextObject, PBYTE szBuffe
|
||||
{
|
||||
if (ulOriginalLength > 0)
|
||||
{
|
||||
#if USING_ZLIB
|
||||
unsigned long ulCompressedLength = (double)ulOriginalLength * 1.001 + 12;
|
||||
#elif USING_LZ4
|
||||
if (ContextObject->CompressMethod == COMPRESS_UNKNOWN) {
|
||||
OutputDebugStringA("[ERROR] UNKNOWN compress method \n");
|
||||
return;
|
||||
}
|
||||
bool usingZstd = ContextObject->CompressMethod == COMPRESS_ZSTD;
|
||||
#if USING_LZ4
|
||||
unsigned long ulCompressedLength = LZ4_compressBound(ulOriginalLength);
|
||||
#else
|
||||
unsigned long ulCompressedLength = ZSTD_compressBound(ulOriginalLength);
|
||||
unsigned long ulCompressedLength = usingZstd ?
|
||||
ZSTD_compressBound(ulOriginalLength) : (double)ulOriginalLength * 1.001 + 12;
|
||||
#endif
|
||||
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");
|
||||
delete [] CompressedBuffer;
|
||||
return;
|
||||
}
|
||||
#if !USING_ZLIB
|
||||
ulCompressedLength = iRet;
|
||||
#endif
|
||||
|
||||
ulCompressedLength = usingZstd ? iRet : ulCompressedLength;
|
||||
|
||||
ULONG ulPackTotalLength = ulCompressedLength + HDR_LENGTH;
|
||||
ContextObject->OutCompressedBuffer.WriteBuffer((LPBYTE)m_szPacketFlag,FLAG_LENGTH);
|
||||
ContextObject->OutCompressedBuffer.WriteBuffer((PBYTE)&ulPackTotalLength, sizeof(ULONG));
|
||||
|
||||
@@ -28,6 +28,12 @@ enum IOType
|
||||
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
|
||||
{
|
||||
CString sClientInfo[10];
|
||||
@@ -41,6 +47,7 @@ typedef struct _CONTEXT_OBJECT
|
||||
int v1;
|
||||
HANDLE hDlg;
|
||||
void *olps; // OVERLAPPEDPLUS
|
||||
int CompressMethod; // ѹ<><D1B9><EFBFBD>㷨
|
||||
|
||||
VOID InitMember()
|
||||
{
|
||||
@@ -51,6 +58,7 @@ typedef struct _CONTEXT_OBJECT
|
||||
memset(&wsaInBuf,0,sizeof(WSABUF));
|
||||
memset(&wsaOutBuffer,0,sizeof(WSABUF));
|
||||
olps = NULL;
|
||||
CompressMethod = COMPRESS_ZSTD;
|
||||
}
|
||||
VOID SetClientInfo(CString s[10]){
|
||||
for (int i=0; i<sizeof(sClientInfo)/sizeof(CString);i++)
|
||||
|
||||
@@ -5,20 +5,12 @@
|
||||
|
||||
#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
|
||||
#define USING_LZ4 0
|
||||
#if !USING_LZ4
|
||||
#define USING_ZSTD 1
|
||||
#define USING_CTX 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _SECURE_ATL
|
||||
#define _SECURE_ATL 1
|
||||
@@ -162,4 +154,7 @@ public:
|
||||
#define STOP_TICK
|
||||
#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"
|
||||
|
||||
Reference in New Issue
Block a user