Making master compatible with the v1.0.6 client #61
This commit is contained in:
@@ -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]
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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{
|
}else if (usingZstd){
|
||||||
OutputDebugStringA("[ERROR] uncompress failed \n");
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>zlib<69><62>ѹ<EFBFBD><D1B9>
|
||||||
delete [] CompressedBuffer;
|
if (Z_OK == uncompress(DeCompressedBuffer, &ulOriginalLength, CompressedBuffer, ulCompressedLength)) {
|
||||||
#if USING_COMPRESS // <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
|
ContextObject->CompressMethod = COMPRESS_ZLIB;
|
||||||
delete [] DeCompressedBuffer;
|
ContextObject->InDeCompressedBuffer.ClearBuffer();
|
||||||
#endif
|
ContextObject->InDeCompressedBuffer.WriteBuffer(DeCompressedBuffer, ulOriginalLength);
|
||||||
throw "Bad Buffer";
|
m_NotifyProc(ContextObject);
|
||||||
|
} else {
|
||||||
|
zlibFailed = true;
|
||||||
|
ContextObject->CompressMethod = COMPRESS_UNKNOWN;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
zlibFailed = true;
|
||||||
}
|
}
|
||||||
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));
|
||||||
|
|||||||
@@ -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++)
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user