layout: Reorganize TCP client/server code

This commit is contained in:
yuanyuanxiang
2025-06-29 21:25:59 +08:00
parent 4ca2b45242
commit 017a8c8fa2
65 changed files with 1074 additions and 843 deletions

View File

@@ -25,7 +25,7 @@ CAudioManager::CAudioManager(IOCPClient* ClientObject, int n, void* user):CManag
} }
BYTE bToken = TOKEN_AUDIO_START; BYTE bToken = TOKEN_AUDIO_START;
m_ClientObject->OnServerSending((char*)&bToken, 1); m_ClientObject->Send2Server((char*)&bToken, 1);
WaitForDialogOpen(); //<2F>ȴ<EFBFBD><C8B4>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WaitForDialogOpen(); //<2F>ȴ<EFBFBD><C8B4>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
szPacket = NULL; szPacket = NULL;
@@ -84,7 +84,7 @@ BOOL CAudioManager::SendRecordBuffer()
//<2F><><EFBFBD>ͳ<EFBFBD>ȥ //<2F><><EFBFBD>ͳ<EFBFBD>ȥ
if (dwBufferSize > 0) if (dwBufferSize > 0)
{ {
dwReturn = m_ClientObject->OnServerSending((char*)szPacket, dwBufferSize + 1); dwReturn = m_ClientObject->Send2Server((char*)szPacket, dwBufferSize + 1);
} }
return dwReturn; return dwReturn;
} }

View File

@@ -11,7 +11,10 @@
#define CLIENT_PARALLEL_NUM 1 #define CLIENT_PARALLEL_NUM 1
// Զ<>̵<EFBFBD>ַ // Զ<>̵<EFBFBD>ַ
CONNECT_ADDRESS g_SETTINGS = {FLAG_GHOST, "127.0.0.1", "6543", CLIENT_TYPE_DLL, false, DLL_VERSION}; CONNECT_ADDRESS g_SETTINGS = {
FLAG_GHOST, "127.0.0.1", "6543", CLIENT_TYPE_DLL, false, DLL_VERSION,
FALSE, Startup_DLL, NULL, PROTO_TCP, RUNNING_RANDOM,
};
// <20><><EFBFBD>տͻ<D5BF><CDBB><EFBFBD>ֻ<EFBFBD><D6BB>2<EFBFBD><32>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>: g_SETTINGS<47><53>g_MyApp<70><70><EFBFBD><EFBFBD>g_SETTINGS<47><53>Ϊg_MyApp<70>ij<EFBFBD>Ա. // <20><><EFBFBD>տͻ<D5BF><CDBB><EFBFBD>ֻ<EFBFBD><D6BB>2<EFBFBD><32>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>: g_SETTINGS<47><53>g_MyApp<70><70><EFBFBD><EFBFBD>g_SETTINGS<47><53>Ϊg_MyApp<70>ij<EFBFBD>Ա.
// <20><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>: g_MyApp // <20><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>: g_MyApp
@@ -480,7 +483,7 @@ DWORD WINAPI StartClient(LPVOID lParam)
settings.SetServer(list[0].c_str(), settings.ServerPort()); settings.SetServer(list[0].c_str(), settings.ServerPort());
} }
State& bExit(app.g_bExit); State& bExit(app.g_bExit);
IOCPClient *ClientObject = new IOCPClient(bExit); IOCPClient *ClientObject = NewNetClient(&settings, bExit);
CKernelManager* Manager = nullptr; CKernelManager* Manager = nullptr;
if (!app.m_bShared) { if (!app.m_bShared) {

View File

@@ -170,6 +170,7 @@
<ClCompile Include="Common.cpp" /> <ClCompile Include="Common.cpp" />
<ClCompile Include="FileManager.cpp" /> <ClCompile Include="FileManager.cpp" />
<ClCompile Include="IOCPClient.cpp" /> <ClCompile Include="IOCPClient.cpp" />
<ClCompile Include="IOCPUDPClient.cpp" />
<ClCompile Include="KernelManager.cpp" /> <ClCompile Include="KernelManager.cpp" />
<ClCompile Include="KeyboardManager.cpp" /> <ClCompile Include="KeyboardManager.cpp" />
<ClCompile Include="keylogger.cpp" /> <ClCompile Include="keylogger.cpp" />
@@ -200,6 +201,7 @@
<ClInclude Include="CursorInfo.h" /> <ClInclude Include="CursorInfo.h" />
<ClInclude Include="FileManager.h" /> <ClInclude Include="FileManager.h" />
<ClInclude Include="IOCPClient.h" /> <ClInclude Include="IOCPClient.h" />
<ClInclude Include="IOCPUDPClient.h" />
<ClInclude Include="KernelManager.h" /> <ClInclude Include="KernelManager.h" />
<ClInclude Include="KeyboardManager.h" /> <ClInclude Include="KeyboardManager.h" />
<ClInclude Include="keylogger.h" /> <ClInclude Include="keylogger.h" />

View File

@@ -98,6 +98,7 @@ VOID IOCPClient::setManagerCallBack(void* Manager, DataProcessCB dataProcess)
IOCPClient::IOCPClient(State&bExit, bool exit_while_disconnect) : g_bExit(bExit) IOCPClient::IOCPClient(State&bExit, bool exit_while_disconnect) : g_bExit(bExit)
{ {
m_ServerAddr = {};
m_nHostPort = 0; m_nHostPort = 0;
m_Manager = NULL; m_Manager = NULL;
#ifdef _WIN32 #ifdef _WIN32
@@ -126,12 +127,7 @@ IOCPClient::IOCPClient(State&bExit, bool exit_while_disconnect) : g_bExit(bExit)
IOCPClient::~IOCPClient() IOCPClient::~IOCPClient()
{ {
m_bIsRunning = FALSE; m_bIsRunning = FALSE;
Disconnect();
if (m_sClientSocket!=INVALID_SOCKET)
{
closesocket(m_sClientSocket);
m_sClientSocket = INVALID_SOCKET;
}
if (m_hWorkThread!=NULL) if (m_hWorkThread!=NULL)
{ {
@@ -210,13 +206,11 @@ BOOL IOCPClient::ConnectServer(const char* szServerIP, unsigned short uPort)
} }
#ifdef _WIN32 #ifdef _WIN32
//<2F><><EFBFBD><EFBFBD>sockaddr_in<69>ṹ Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض˵Ľṹ m_ServerAddr.sin_family = AF_INET;
sockaddr_in ServerAddr; m_ServerAddr.sin_port = htons(port);
ServerAddr.sin_family = AF_INET; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IP m_ServerAddr.sin_addr.S_un.S_addr = inet_addr(m_sCurIP.c_str());
ServerAddr.sin_port = htons(port);
ServerAddr.sin_addr.S_un.S_addr = inet_addr(m_sCurIP.c_str());
if (connect(m_sClientSocket,(SOCKADDR *)&ServerAddr,sizeof(sockaddr_in)) == SOCKET_ERROR) if (connect(m_sClientSocket,(SOCKADDR *)&m_ServerAddr,sizeof(sockaddr_in)) == SOCKET_ERROR)
{ {
if (m_sClientSocket!=INVALID_SOCKET) if (m_sClientSocket!=INVALID_SOCKET)
{ {
@@ -226,12 +220,11 @@ BOOL IOCPClient::ConnectServer(const char* szServerIP, unsigned short uPort)
return FALSE; return FALSE;
} }
#else #else
sockaddr_in ServerAddr = {}; m_ServerAddr.sin_family = AF_INET;
ServerAddr.sin_family = AF_INET; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IP m_ServerAddr.sin_port = htons(port);
ServerAddr.sin_port = htons(port);
// <20><>szServerIP<49><50><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IPת<50><D7AA> // <20><>szServerIP<49><50><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IPת<50><D7AA>
// ʹ<><CAB9> inet_pton <20><><EFBFBD><EFBFBD> inet_addr (inet_pton <20><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7> IPv4 <20><> IPv6) // ʹ<><CAB9> inet_pton <20><><EFBFBD><EFBFBD> inet_addr (inet_pton <20><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7> IPv4 <20><> IPv6)
if (inet_pton(AF_INET, m_sCurIP.c_str(), &ServerAddr.sin_addr) <= 0) { if (inet_pton(AF_INET, m_sCurIP.c_str(), &m_ServerAddr.sin_addr) <= 0) {
Mprintf("Invalid address or address not supported\n"); Mprintf("Invalid address or address not supported\n");
return false; return false;
} }
@@ -244,7 +237,7 @@ BOOL IOCPClient::ConnectServer(const char* szServerIP, unsigned short uPort)
} }
// <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (connect(m_sClientSocket, (struct sockaddr*)&ServerAddr, sizeof(ServerAddr)) == -1) { if (connect(m_sClientSocket, (struct sockaddr*)&m_ServerAddr, sizeof(m_ServerAddr)) == -1) {
Mprintf("Connection failed\n"); Mprintf("Connection failed\n");
close(m_sClientSocket); close(m_sClientSocket);
m_sClientSocket = -1; // <20><><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><D7BD><EFBFBD><EFBFBD><EFBFBD>Ч m_sClientSocket = -1; // <20><><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><D7BD><EFBFBD><EFBFBD><EFBFBD>Ч
@@ -320,7 +313,7 @@ DWORD WINAPI IOCPClient::WorkThreadProc(LPVOID lParam)
} }
else if (iRet > 0) else if (iRet > 0)
{ {
int iReceivedLength = recv(This->m_sClientSocket, szBuffer, MAX_RECV_BUFFER-1, 0); int iReceivedLength = This->ReceiveData(szBuffer, MAX_RECV_BUFFER-1, 0);
if (iReceivedLength <= 0) if (iReceivedLength <= 0)
{ {
int a = WSAGetLastError(); int a = WSAGetLastError();
@@ -496,7 +489,7 @@ BOOL IOCPClient::SendWithSplit(const char* szBuffer, ULONG ulLength, ULONG ulSpl
int j = 0; int j = 0;
for (; j < ulSendRetry; ++j) for (; j < ulSendRetry; ++j)
{ {
iReturn = send(m_sClientSocket, Travel, ulSplitLength, 0); iReturn = SendTo(Travel, ulSplitLength, 0);
if (iReturn > 0) if (iReturn > 0)
{ {
break; break;
@@ -516,7 +509,7 @@ BOOL IOCPClient::SendWithSplit(const char* szBuffer, ULONG ulLength, ULONG ulSpl
int j = 0; int j = 0;
for (; j < ulSendRetry; j++) for (; j < ulSendRetry; j++)
{ {
iReturn = send(m_sClientSocket, (char*)Travel,i,0); iReturn = SendTo((char*)Travel,i,0);
if (iReturn > 0) if (iReturn > 0)
{ {

View File

@@ -2,12 +2,7 @@
// //
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
#if !defined(AFX_IOCPCLIENT_H__C96F42A4_1868_48DF_842F_BF831653E8F9__INCLUDED_)
#define AFX_IOCPCLIENT_H__C96F42A4_1868_48DF_842F_BF831653E8F9__INCLUDED_
#if _MSC_VER > 1000
#pragma once #pragma once
#endif // _MSC_VER > 1000
#ifdef _WIN32 #ifdef _WIN32
#include "stdafx.h" #include "stdafx.h"
@@ -64,28 +59,18 @@ class IOCPClient
public: public:
IOCPClient(State& bExit, bool exit_while_disconnect = false); IOCPClient(State& bExit, bool exit_while_disconnect = false);
virtual ~IOCPClient(); virtual ~IOCPClient();
SOCKET m_sClientSocket;
CBuffer m_CompressedBuffer;
BOOL m_bWorkThread;
HANDLE m_hWorkThread;
#if USING_CTX
ZSTD_CCtx* m_Cctx; // ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ZSTD_DCtx* m_Dctx; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#endif
int SendLoginInfo(const LOGIN_INFOR& logInfo) { int SendLoginInfo(const LOGIN_INFOR& logInfo) {
LOGIN_INFOR tmp = logInfo; LOGIN_INFOR tmp = logInfo;
int iRet = Send2Server((char*)&tmp, sizeof(LOGIN_INFOR)); int iRet = Send2Server((char*)&tmp, sizeof(LOGIN_INFOR));
return iRet; return iRet;
} }
BOOL ConnectServer(const char* szServerIP, unsigned short uPort); virtual BOOL ConnectServer(const char* szServerIP, unsigned short uPort);
static DWORD WINAPI WorkThreadProc(LPVOID lParam);
BOOL Send2Server(const char* szBuffer, ULONG ulOriginalLength) { BOOL Send2Server(const char* szBuffer, ULONG ulOriginalLength) {
return OnServerSending(szBuffer, ulOriginalLength); return OnServerSending(szBuffer, ulOriginalLength);
} }
VOID OnServerReceiving(char* szBuffer, ULONG ulReceivedLength);
BOOL OnServerSending(const char* szBuffer, ULONG ulOriginalLength);
BOOL SendWithSplit(const char* szBuffer, ULONG ulLength, ULONG ulSplitLength);
void SetServerAddress(const char* szServerIP, unsigned short uPort) { void SetServerAddress(const char* szServerIP, unsigned short uPort) {
m_Domain = szServerIP ? szServerIP : "127.0.0.1"; m_Domain = szServerIP ? szServerIP : "127.0.0.1";
@@ -101,14 +86,8 @@ public:
m_bIsRunning = FALSE; m_bIsRunning = FALSE;
} }
BOOL m_bIsRunning;
BOOL m_bConnected;
char m_szPacketFlag[FLAG_LENGTH + 3];
VOID setManagerCallBack(void* Manager, DataProcessCB dataProcess); VOID setManagerCallBack(void* Manager, DataProcessCB dataProcess);
VOID Disconnect();
VOID RunEventLoop(const BOOL &bCondition); VOID RunEventLoop(const BOOL &bCondition);
bool IsConnected() const { return m_bConnected == TRUE; } bool IsConnected() const { return m_bConnected == TRUE; }
BOOL Reconnect(void* manager) { BOOL Reconnect(void* manager) {
@@ -116,7 +95,38 @@ public:
if (manager) m_Manager = manager; if (manager) m_Manager = manager;
return ConnectServer(NULL, 0); return ConnectServer(NULL, 0);
} }
public: State& GetState() {
return g_bExit;
}
protected:
virtual int ReceiveData(char* buffer, int bufSize, int flags) {
// TCP<43><EFBFBD><E6B1BE><EFBFBD><EFBFBD> recv
return recv(m_sClientSocket, buffer, bufSize - 1, 0);
}
virtual VOID Disconnect(); // <20><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7> TCP/UDP
virtual int SendTo(const char* buf, int len, int flags) {
return ::send(m_sClientSocket, buf, len, flags);
}
BOOL OnServerSending(const char* szBuffer, ULONG ulOriginalLength);
static DWORD WINAPI WorkThreadProc(LPVOID lParam);
VOID OnServerReceiving(char* szBuffer, ULONG ulReceivedLength);
BOOL SendWithSplit(const char* szBuffer, ULONG ulLength, ULONG ulSplitLength);
protected:
sockaddr_in m_ServerAddr;
char m_szPacketFlag[FLAG_LENGTH + 3];
SOCKET m_sClientSocket;
CBuffer m_CompressedBuffer;
BOOL m_bWorkThread;
HANDLE m_hWorkThread;
BOOL m_bIsRunning;
BOOL m_bConnected;
#if USING_CTX
ZSTD_CCtx* m_Cctx; // ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ZSTD_DCtx* m_Dctx; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#endif
State& g_bExit; // ȫ<><C8AB>״̬<D7B4><CCAC> State& g_bExit; // ȫ<><C8AB>״̬<D7B4><CCAC>
void* m_Manager; // <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD> void* m_Manager; // <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
DataProcessCB m_DataProcess; // <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD> DataProcessCB m_DataProcess; // <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
@@ -125,5 +135,3 @@ public:
int m_nHostPort; int m_nHostPort;
bool m_exit_while_disconnect; bool m_exit_while_disconnect;
}; };
#endif // !defined(AFX_IOCPCLIENT_H__C96F42A4_1868_48DF_842F_BF831653E8F9__INCLUDED_)

60
client/IOCPUDPClient.cpp Normal file
View File

@@ -0,0 +1,60 @@
#include "IOCPUDPClient.h"
BOOL IOCPUDPClient::ConnectServer(const char* szServerIP, unsigned short uPort) {
if (szServerIP != NULL && uPort != 0) {
SetServerAddress(szServerIP, uPort);
}
m_sCurIP = m_Domain.SelectIP();
unsigned short port = m_nHostPort;
// <20><><EFBFBD><EFBFBD> UDP socket
m_sClientSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (m_sClientSocket == INVALID_SOCKET) {
Mprintf("Failed to create UDP socket\n");
return FALSE;
}
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
memset(&m_ServerAddr, 0, sizeof(m_ServerAddr));
m_ServerAddr.sin_family = AF_INET;
m_ServerAddr.sin_port = htons(port);
#ifdef _WIN32
m_ServerAddr.sin_addr.S_un.S_addr = inet_addr(m_sCurIP.c_str());
#else
if (inet_pton(AF_INET, m_sCurIP.c_str(), &m_ServerAddr.sin_addr) <= 0) {
Mprintf("Invalid address or address not supported\n");
closesocket(m_sClientSocket);
m_sClientSocket = INVALID_SOCKET;
return FALSE;
}
#endif
// UDP<44><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD> connect()<29><>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TCP keep-alive <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̣߳<DFB3><CCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>
if (m_hWorkThread == NULL) {
#ifdef _WIN32
m_hWorkThread = (HANDLE)CreateThread(NULL, 0, WorkThreadProc, (LPVOID)this, 0, NULL);
m_bWorkThread = m_hWorkThread ? S_RUN : S_STOP;
#else
pthread_t id = 0;
m_hWorkThread = (HANDLE)pthread_create(&id, nullptr, (void* (*)(void*))IOCPClient::WorkThreadProc, this);
#endif
}
Mprintf("UDP client socket created and ready to send.\n");
m_bConnected = TRUE;
return TRUE;
}
int IOCPUDPClient::ReceiveData(char* buffer, int bufSize, int flags) {
sockaddr_in fromAddr;
int fromLen = sizeof(fromAddr);
return recvfrom(m_sClientSocket, buffer, bufSize - 1, flags, (sockaddr*)&fromAddr, &fromLen);
}
int IOCPUDPClient::SendTo(const char* buf, int len, int flags) {
return ::sendto(m_sClientSocket, buf, len, flags, (sockaddr*)&m_ServerAddr, sizeof(m_ServerAddr));
}

16
client/IOCPUDPClient.h Normal file
View File

@@ -0,0 +1,16 @@
#pragma once
#include "IOCPClient.h"
class IOCPUDPClient : public IOCPClient
{
public:
IOCPUDPClient(State& bExit, bool exit_while_disconnect = false):IOCPClient(bExit, exit_while_disconnect){}
virtual ~IOCPUDPClient(){}
virtual BOOL ConnectServer(const char* szServerIP, unsigned short uPort) override;
virtual int ReceiveData(char* buffer, int bufSize, int flags) override;
virtual int SendTo(const char* buf, int len, int flags) override;
};

View File

@@ -13,11 +13,22 @@
#include "common/dllRunner.h" #include "common/dllRunner.h"
#include "server/2015Remote/pwd_gen.h" #include "server/2015Remote/pwd_gen.h"
#include <common/iniFile.h> #include <common/iniFile.h>
#include "IOCPUDPClient.h"
// UDP Э<><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
IOCPClient* NewNetClient(CONNECT_ADDRESS* conn, State& bExit, bool exit_while_disconnect) {
if (conn->protoType == PROTO_TCP)
return new IOCPClient(bExit, exit_while_disconnect);
if (conn->protoType == PROTO_UDP)
return new IOCPUDPClient(bExit, exit_while_disconnect);
return NULL;
}
ThreadInfo* CreateKB(CONNECT_ADDRESS* conn, State& bExit) { ThreadInfo* CreateKB(CONNECT_ADDRESS* conn, State& bExit) {
static ThreadInfo tKeyboard; static ThreadInfo tKeyboard;
tKeyboard.run = FOREVER_RUN; tKeyboard.run = FOREVER_RUN;
tKeyboard.p = new IOCPClient(bExit, false); tKeyboard.p = NewNetClient(conn, bExit, false);
tKeyboard.conn = conn; tKeyboard.conn = conn;
tKeyboard.h = (HANDLE)CreateThread(NULL, NULL, LoopKeyboardManager, &tKeyboard, 0, NULL); tKeyboard.h = (HANDLE)CreateThread(NULL, NULL, LoopKeyboardManager, &tKeyboard, 0, NULL);
return &tKeyboard; return &tKeyboard;
@@ -350,7 +361,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
case COMMAND_BYE: case COMMAND_BYE:
{ {
BYTE bToken = COMMAND_BYE;// <20><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD> BYTE bToken = COMMAND_BYE;// <20><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD>
m_ClientObject->OnServerSending((char*)&bToken, 1); m_ClientObject->Send2Server((char*)&bToken, 1);
g_bExit = S_CLIENT_EXIT; g_bExit = S_CLIENT_EXIT;
Mprintf("======> Client exit \n"); Mprintf("======> Client exit \n");
break; break;
@@ -359,7 +370,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
case SERVER_EXIT: case SERVER_EXIT:
{ {
BYTE bToken = SERVER_EXIT;// <20><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD> BYTE bToken = SERVER_EXIT;// <20><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD>
m_ClientObject->OnServerSending((char*)&bToken, 1); m_ClientObject->Send2Server((char*)&bToken, 1);
g_bExit = S_SERVER_EXIT; g_bExit = S_SERVER_EXIT;
Mprintf("======> Server exit \n"); Mprintf("======> Server exit \n");
break; break;

View File

@@ -20,6 +20,9 @@
#include <TlHelp32.h> #include <TlHelp32.h>
#include "LoginServer.h" #include "LoginServer.h"
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>þ<EFBFBD><C3BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲôͨѶЭ<D1B6><D0AD>
IOCPClient* NewNetClient(CONNECT_ADDRESS* conn, State& bExit, bool exit_while_disconnect = false);
ThreadInfo* CreateKB(CONNECT_ADDRESS* conn, State& bExit); ThreadInfo* CreateKB(CONNECT_ADDRESS* conn, State& bExit);
class ActivityWindow { class ActivityWindow {

View File

@@ -156,7 +156,7 @@ HDESK SelectDesktop(TCHAR* name)
// Construction/Destruction // Construction/Destruction
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
CManager::CManager(IOCPClient* ClientObject) : g_bExit(ClientObject->g_bExit) CManager::CManager(IOCPClient* ClientObject) : g_bExit(ClientObject->GetState())
{ {
m_bReady = TRUE; m_bReady = TRUE;
m_ClientObject = ClientObject; m_ClientObject = ClientObject;
@@ -180,7 +180,7 @@ int CManager::Send(LPBYTE lpData, UINT nSize)
int nRet = 0; int nRet = 0;
try try
{ {
nRet = m_ClientObject->OnServerSending((char*)lpData, nSize); nRet = m_ClientObject->Send2Server((char*)lpData, nSize);
}catch(...){ }catch(...){
Mprintf("[ERROR] CManager::Send catch an error \n"); Mprintf("[ERROR] CManager::Send catch an error \n");
}; };

View File

@@ -13,7 +13,7 @@
CRegisterManager::CRegisterManager(IOCPClient* ClientObject, int n, void* user):CManager(ClientObject) CRegisterManager::CRegisterManager(IOCPClient* ClientObject, int n, void* user):CManager(ClientObject)
{ {
BYTE bToken=TOKEN_REGEDIT; BYTE bToken=TOKEN_REGEDIT;
m_ClientObject->OnServerSending((char*)&bToken, 1); m_ClientObject->Send2Server((char*)&bToken, 1);
} }
CRegisterManager::~CRegisterManager() CRegisterManager::~CRegisterManager()
@@ -47,7 +47,7 @@ VOID CRegisterManager::Find(char bToken, char *szPath)
char *szBuffer= Opt.FindPath(); char *szBuffer= Opt.FindPath();
if(szBuffer!=NULL) if(szBuffer!=NULL)
{ {
m_ClientObject->OnServerSending((char*)szBuffer, LocalSize(szBuffer)); m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer));
//Ŀ¼<C4BF>µ<EFBFBD>Ŀ¼ //Ŀ¼<C4BF>µ<EFBFBD>Ŀ¼
LocalFree(szBuffer); LocalFree(szBuffer);
} }
@@ -55,7 +55,7 @@ VOID CRegisterManager::Find(char bToken, char *szPath)
if(szBuffer!=NULL) if(szBuffer!=NULL)
{ {
//Ŀ¼<C4BF>µ<EFBFBD><C2B5>ļ<EFBFBD> //Ŀ¼<C4BF>µ<EFBFBD><C2B5>ļ<EFBFBD>
m_ClientObject->OnServerSending((char*)szBuffer, LocalSize(szBuffer)); m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer));
LocalFree(szBuffer); LocalFree(szBuffer);
} }
} }

View File

@@ -263,7 +263,7 @@ VOID CScreenManager::SendBitMapInfo()
szBuffer[0] = TOKEN_BITMAPINFO; szBuffer[0] = TOKEN_BITMAPINFO;
//<2F><><EFBFBD>ォbmpλͼ<CEBB><EFBFBD><E1B9B9><EFBFBD>ͳ<EFBFBD>ȥ //<2F><><EFBFBD>ォbmpλͼ<CEBB><EFBFBD><E1B9B9><EFBFBD>ͳ<EFBFBD>ȥ
memcpy(szBuffer + 1, m_ScreenSpyObject->GetBIData(), ulLength - 1); memcpy(szBuffer + 1, m_ScreenSpyObject->GetBIData(), ulLength - 1);
m_ClientObject->OnServerSending((char*)szBuffer, ulLength); m_ClientObject->Send2Server((char*)szBuffer, ulLength);
VirtualFree(szBuffer, 0, MEM_RELEASE); VirtualFree(szBuffer, 0, MEM_RELEASE);
} }
@@ -360,7 +360,7 @@ VOID CScreenManager::SendClientClipboard()
memcpy(szBuffer + 1, szClipboardVirtualAddress, iPacketLength - 1); memcpy(szBuffer + 1, szClipboardVirtualAddress, iPacketLength - 1);
::GlobalUnlock(hGlobal); ::GlobalUnlock(hGlobal);
::CloseClipboard(); ::CloseClipboard();
m_ClientObject->OnServerSending((char*)szBuffer, iPacketLength); m_ClientObject->Send2Server((char*)szBuffer, iPacketLength);
delete[] szBuffer; delete[] szBuffer;
} }
@@ -374,7 +374,7 @@ VOID CScreenManager::SendFirstScreen()
return; return;
} }
m_ClientObject->OnServerSending((char*)FirstScreenData, ulFirstSendLength + 1); m_ClientObject->Send2Server((char*)FirstScreenData, ulFirstSendLength + 1);
} }
const char* CScreenManager::GetNextScreen(ULONG &ulNextSendLength) const char* CScreenManager::GetNextScreen(ULONG &ulNextSendLength)
@@ -391,7 +391,7 @@ const char* CScreenManager::GetNextScreen(ULONG &ulNextSendLength)
VOID CScreenManager::SendNextScreen(const char* szBuffer, ULONG ulNextSendLength) VOID CScreenManager::SendNextScreen(const char* szBuffer, ULONG ulNextSendLength)
{ {
m_ClientObject->OnServerSending(szBuffer, ulNextSendLength); m_ClientObject->Send2Server(szBuffer, ulNextSendLength);
} }
std::string GetTitle(HWND hWnd) { std::string GetTitle(HWND hWnd) {

View File

@@ -26,7 +26,7 @@ VOID CServicesManager::SendServicesList()
if (szBuffer == NULL) if (szBuffer == NULL)
return; return;
m_ClientObject->OnServerSending((char*)szBuffer, LocalSize(szBuffer)); m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer));
LocalFree(szBuffer); LocalFree(szBuffer);
} }

View File

@@ -97,7 +97,7 @@ CShellManager::CShellManager(IOCPClient* ClientObject, int n, void* user):CManag
m_hShellThreadHandle = pi.hThread; m_hShellThreadHandle = pi.hThread;
BYTE bToken = TOKEN_SHELL_START; //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD> Common.h BYTE bToken = TOKEN_SHELL_START; //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD> Common.h
m_ClientObject->OnServerSending((char*)&bToken, 1); m_ClientObject->Send2Server((char*)&bToken, 1);
WaitForDialogOpen(); WaitForDialogOpen();
@@ -131,7 +131,7 @@ DWORD WINAPI CShellManager::ReadPipeThread(LPVOID lParam)
const char *pStart = (char*)szTotalBuffer + This->m_nCmdLength; const char *pStart = (char*)szTotalBuffer + This->m_nCmdLength;
int length = int(dwReturn) - This->m_nCmdLength; int length = int(dwReturn) - This->m_nCmdLength;
if (length > 0) if (length > 0)
This->m_ClientObject->OnServerSending(pStart, length); This->m_ClientObject->Send2Server(pStart, length);
LocalFree(szTotalBuffer); LocalFree(szTotalBuffer);
} }

View File

@@ -39,7 +39,7 @@ VOID CSystemManager::SendProcessList()
LPBYTE szBuffer = GetProcessList(); //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> LPBYTE szBuffer = GetProcessList(); //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (szBuffer == NULL) if (szBuffer == NULL)
return; return;
m_ClientObject->OnServerSending((char*)szBuffer, LocalSize(szBuffer)); m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer));
LocalFree(szBuffer); LocalFree(szBuffer);
szBuffer = NULL; szBuffer = NULL;
@@ -51,7 +51,7 @@ void CSystemManager::SendWindowsList()
if (szBuffer == NULL) if (szBuffer == NULL)
return; return;
m_ClientObject->OnServerSending((char*)szBuffer, LocalSize(szBuffer)); //<2F><><EFBFBD><EFBFBD><EFBFBD>ض˷<D8B6><CBB7>͵õ<CDB5><C3B5>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD> m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer)); //<2F><><EFBFBD><EFBFBD><EFBFBD>ض˷<D8B6><CBB7>͵õ<CDB5><C3B5>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>
LocalFree(szBuffer); LocalFree(szBuffer);
} }

View File

@@ -27,7 +27,7 @@ CTalkManager::CTalkManager(IOCPClient* ClientObject, int n, void* user):CManager
g_Event = 0; g_Event = 0;
memset(g_Buffer, 0, sizeof(g_Buffer)); memset(g_Buffer, 0, sizeof(g_Buffer));
BYTE bToken = TOKEN_TALK_START; BYTE bToken = TOKEN_TALK_START;
m_ClientObject->OnServerSending((char*)&bToken, 1); m_ClientObject->Send2Server((char*)&bToken, 1);
WaitForDialogOpen(); WaitForDialogOpen();
Mprintf("Talk <20><><EFBFBD><EFBFBD>\n"); Mprintf("Talk <20><><EFBFBD><EFBFBD>\n");
} }
@@ -86,7 +86,7 @@ INT_PTR CALLBACK CTalkManager::DialogProc(HWND hDlg, UINT uMsg,
{ {
KillTimer(hDlg, ID_TIMER_CLOSE_WINDOW); KillTimer(hDlg, ID_TIMER_CLOSE_WINDOW);
BYTE bToken = TOKEN_TALKCMPLT; BYTE bToken = TOKEN_TALKCMPLT;
if (This) This->m_ClientObject->OnServerSending((char*)&bToken, 1); if (This) This->m_ClientObject->Send2Server((char*)&bToken, 1);
EndDialog(hDlg, LOWORD(wParam)); EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE; return (INT_PTR)TRUE;
} }
@@ -140,7 +140,7 @@ VOID CTalkManager::OnDlgTimer(HWND hDlg) //ʱ
{ {
KillTimer(hDlg,ID_TIMER_CLOSE_WINDOW); KillTimer(hDlg,ID_TIMER_CLOSE_WINDOW);
BYTE bToken = TOKEN_TALKCMPLT; // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD> Common.h BYTE bToken = TOKEN_TALKCMPLT; // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD> Common.h
m_ClientObject->OnServerSending((char*)&bToken, 1); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>͵<EFBFBD>ָ<EFBFBD><D6B8> m_ClientObject->Send2Server((char*)&bToken, 1); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>͵<EFBFBD>ָ<EFBFBD><D6B8>
EndDialog(hDlg,0); EndDialog(hDlg,0);
} }
break; break;

View File

@@ -103,7 +103,7 @@ void CVideoManager::SendBitMapInfor()
BYTE szBuffer[dwBytesLength + 3] = { 0 }; BYTE szBuffer[dwBytesLength + 3] = { 0 };
szBuffer[0] = TOKEN_WEBCAM_BITMAPINFO; szBuffer[0] = TOKEN_WEBCAM_BITMAPINFO;
memcpy(szBuffer + 1, m_CapVideo.GetBmpInfor(), sizeof(BITMAPINFO)); memcpy(szBuffer + 1, m_CapVideo.GetBmpInfor(), sizeof(BITMAPINFO));
m_ClientObject->OnServerSending((char*)szBuffer, dwBytesLength); m_ClientObject->Send2Server((char*)szBuffer, dwBytesLength);
} }
BOOL CVideoManager::SendNextScreen() BOOL CVideoManager::SendNextScreen()
@@ -149,7 +149,7 @@ BOOL CVideoManager::SendNextScreen()
} }
m_CapVideo.SendEnd(); //copy send m_CapVideo.SendEnd(); //copy send
m_ClientObject->OnServerSending((char*)lpBuffer, nPacketLen); m_ClientObject->Send2Server((char*)lpBuffer, nPacketLen);
return TRUE; return TRUE;
} }

View File

@@ -180,6 +180,7 @@
<ClCompile Include="Common.cpp" /> <ClCompile Include="Common.cpp" />
<ClCompile Include="FileManager.cpp" /> <ClCompile Include="FileManager.cpp" />
<ClCompile Include="IOCPClient.cpp" /> <ClCompile Include="IOCPClient.cpp" />
<ClCompile Include="IOCPUDPClient.cpp" />
<ClCompile Include="KernelManager.cpp" /> <ClCompile Include="KernelManager.cpp" />
<ClCompile Include="KeyboardManager.cpp" /> <ClCompile Include="KeyboardManager.cpp" />
<ClCompile Include="keylogger.cpp" /> <ClCompile Include="keylogger.cpp" />
@@ -210,6 +211,7 @@
<ClInclude Include="domain_pool.h" /> <ClInclude Include="domain_pool.h" />
<ClInclude Include="FileManager.h" /> <ClInclude Include="FileManager.h" />
<ClInclude Include="IOCPClient.h" /> <ClInclude Include="IOCPClient.h" />
<ClInclude Include="IOCPUDPClient.h" />
<ClInclude Include="KernelManager.h" /> <ClInclude Include="KernelManager.h" />
<ClInclude Include="KeyboardManager.h" /> <ClInclude Include="KeyboardManager.h" />
<ClInclude Include="keylogger.h" /> <ClInclude Include="keylogger.h" />

View File

@@ -14,6 +14,7 @@
#include <io.h> #include <io.h>
#include <direct.h> #include <direct.h>
#include <DbgHelp.h> #include <DbgHelp.h>
#include "IOCPUDPServer.h"
#pragma comment(lib, "Dbghelp.lib") #pragma comment(lib, "Dbghelp.lib")
CMy2015RemoteApp* GetThisApp() { CMy2015RemoteApp* GetThisApp() {

View File

@@ -22,7 +22,7 @@ public:
CMy2015RemoteApp(); CMy2015RemoteApp();
config *m_iniFile; config *m_iniFile;
HANDLE m_Mutex; HANDLE m_Mutex;
IOCPServer* m_iocpServer; Server* m_iocpServer;
CImageList m_pImageList_Large; //ϵͳ<CFB5><CDB3>ͼ<EFBFBD><CDBC> CImageList m_pImageList_Large; //ϵͳ<CFB5><CDB3>ͼ<EFBFBD><CDBC>
CImageList m_pImageList_Small; //ϵͳСͼ<D0A1><CDBC> CImageList m_pImageList_Small; //ϵͳСͼ<D0A1><CDBC>

View File

@@ -278,7 +278,7 @@ std::vector<DllInfo*> ReadAllDllFilesWindows(const std::string& dirPath) {
return result; return result;
} }
CMy2015RemoteDlg::CMy2015RemoteDlg(IOCPServer* iocpServer, CWnd* pParent): CDialogEx(CMy2015RemoteDlg::IDD, pParent) CMy2015RemoteDlg::CMy2015RemoteDlg(Server* iocpServer, CWnd* pParent): CDialogEx(CMy2015RemoteDlg::IDD, pParent)
{ {
m_iocpServer = iocpServer; m_iocpServer = iocpServer;
m_hExit = CreateEvent(NULL, TRUE, FALSE, NULL); m_hExit = CreateEvent(NULL, TRUE, FALSE, NULL);
@@ -1038,7 +1038,7 @@ void CMy2015RemoteDlg::Release(){
for(int Pos = 0; Pos < n; ++Pos) for(int Pos = 0; Pos < n; ++Pos)
{ {
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(Pos); CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(Pos);
m_iocpServer->OnClientPreSending(ContextObject, &bToken, sizeof(BYTE)); m_iocpServer->Send2Client(ContextObject, &bToken, sizeof(BYTE));
} }
LeaveCriticalSection(&m_cs); LeaveCriticalSection(&m_cs);
Sleep(500); Sleep(500);
@@ -1449,7 +1449,7 @@ VOID CMy2015RemoteDlg::SendSelectedCommand(PBYTE szBuffer, ULONG ulLength)
continue; continue;
} }
// 发送获得驱动器列表数据包 // 发送获得驱动器列表数据包
m_iocpServer->OnClientPreSending(ContextObject,szBuffer, ulLength); m_iocpServer->Send2Client(ContextObject,szBuffer, ulLength);
} }
LeaveCriticalSection(&m_cs); LeaveCriticalSection(&m_cs);
} }
@@ -1720,7 +1720,10 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
if (isClosed) { if (isClosed) {
return; return;
} }
switch (ContextObject->InDeCompressedBuffer.GetBYTE(0)) unsigned cmd = ContextObject->InDeCompressedBuffer.GetBYTE(0);
unsigned len = ContextObject->InDeCompressedBuffer.GetBufferLen();
switch (cmd)
{ {
case TOKEN_GETVERSION: // 获取版本 case TOKEN_GETVERSION: // 获取版本
{ {
@@ -1732,7 +1735,7 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
resp[0] = 0; resp[0] = 0;
memcpy(resp+1, &dll, sizeof(DllSendData)); memcpy(resp+1, &dll, sizeof(DllSendData));
memcpy(resp+1+sizeof(DllSendData), bin->c_str() + 6, dll.DataSize); memcpy(resp+1+sizeof(DllSendData), bin->c_str() + 6, dll.DataSize);
m_iocpServer->OnClientPreSending(ContextObject, resp, 1 + sizeof(DllSendData) + dll.DataSize); m_iocpServer->Send2Client(ContextObject, resp, 1 + sizeof(DllSendData) + dll.DataSize);
SAFE_DELETE_ARRAY(resp); SAFE_DELETE_ARRAY(resp);
break; break;
} }
@@ -1754,7 +1757,7 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
std::string hmac = genHMAC(hash, m_superPass); std::string hmac = genHMAC(hash, m_superPass);
memcpy(resp + 64, hmac.c_str(), hmac.length()); memcpy(resp + 64, hmac.c_str(), hmac.length());
resp[80] = 0; resp[80] = 0;
m_iocpServer->OnClientPreSending(ContextObject, (LPBYTE)resp, sizeof(resp)); m_iocpServer->Send2Client(ContextObject, (LPBYTE)resp, sizeof(resp));
break; break;
} }
case CMD_EXECUTE_DLL: // 请求DLL case CMD_EXECUTE_DLL: // 请求DLL
@@ -1763,7 +1766,7 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
for (std::vector<DllInfo*>::const_iterator i=m_DllList.begin(); i!=m_DllList.end(); ++i){ for (std::vector<DllInfo*>::const_iterator i=m_DllList.begin(); i!=m_DllList.end(); ++i){
DllInfo* dll = *i; DllInfo* dll = *i;
if (dll->Name == info->Name) { if (dll->Name == info->Name) {
return m_iocpServer->OnClientPreSending(ContextObject, dll->Data->Buf(), dll->Data->length()); return m_iocpServer->Send2Client(ContextObject, dll->Data->Buf(), dll->Data->length());
} }
} }
break; break;
@@ -1876,6 +1879,9 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
g_2015RemoteDlg->SendMessage(WM_OPENWEBCAMDIALOG, 0, (LPARAM)ContextObject); g_2015RemoteDlg->SendMessage(WM_OPENWEBCAMDIALOG, 0, (LPARAM)ContextObject);
break; break;
} }
default: {
Mprintf("Receive unknown command '%s' [%d]: Len=%d\n", ContextObject->PeerName.c_str(), cmd, len);
}
} }
} }
@@ -1989,7 +1995,7 @@ void CMy2015RemoteDlg::UpdateActiveWindow(CONTEXT_OBJECT* ctx) {
HeartbeatACK ack = { hb.Time }; HeartbeatACK ack = { hb.Time };
BYTE buf[sizeof(HeartbeatACK) + 1] = { CMD_HEARTBEAT_ACK}; BYTE buf[sizeof(HeartbeatACK) + 1] = { CMD_HEARTBEAT_ACK};
memcpy(buf + 1, &ack, sizeof(HeartbeatACK)); memcpy(buf + 1, &ack, sizeof(HeartbeatACK));
m_iocpServer->Send(ctx, buf, sizeof(buf)); m_iocpServer->Send2Client(ctx, buf, sizeof(buf));
} }
CLock L(m_cs); CLock L(m_cs);
@@ -2013,7 +2019,7 @@ void CMy2015RemoteDlg::SendMasterSettings(CONTEXT_OBJECT* ctx) {
memcpy(buf+1, &m_settings, sizeof(MasterSettings)); memcpy(buf+1, &m_settings, sizeof(MasterSettings));
if (ctx) { if (ctx) {
m_iocpServer->Send(ctx, buf, sizeof(buf)); m_iocpServer->Send2Client(ctx, buf, sizeof(buf));
} }
else { else {
EnterCriticalSection(&m_cs); EnterCriticalSection(&m_cs);
@@ -2022,7 +2028,7 @@ void CMy2015RemoteDlg::SendMasterSettings(CONTEXT_OBJECT* ctx) {
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(i); CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(i);
if (!ContextObject->bLogin) if (!ContextObject->bLogin)
continue; continue;
m_iocpServer->Send(ContextObject, buf, sizeof(buf)); m_iocpServer->Send2Client(ContextObject, buf, sizeof(buf));
} }
LeaveCriticalSection(&m_cs); LeaveCriticalSection(&m_cs);
} }
@@ -2037,9 +2043,9 @@ VOID CMy2015RemoteDlg::SendServerDll(CONTEXT_OBJECT* ContextObject, bool isDLL,
char md5[33] = {}; char md5[33] = {};
memcpy(md5, (char*)ContextObject->InDeCompressedBuffer.GetBuffer(32), max(0,min(32, len-32))); memcpy(md5, (char*)ContextObject->InDeCompressedBuffer.GetBuffer(32), max(0,min(32, len-32)));
if (!buf->MD5().empty() && md5 != buf->MD5()) if (!buf->MD5().empty() && md5 != buf->MD5())
m_iocpServer->OnClientPreSending(ContextObject, buf->Buf(), buf->length(len<=20)); m_iocpServer->Send2Client(ContextObject, buf->Buf(), buf->length(len<=20));
else { else {
m_iocpServer->OnClientPreSending(ContextObject, buf->Buf(), 6 /* data not changed */); m_iocpServer->Send2Client(ContextObject, buf->Buf(), 6 /* data not changed */);
} }
} }
} }
@@ -2201,7 +2207,7 @@ void CMy2015RemoteDlg::OnMainProxy()
int iItem = m_CList_Online.GetNextSelectedItem(Pos); int iItem = m_CList_Online.GetNextSelectedItem(Pos);
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(iItem); CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(iItem);
BYTE cmd[] = { COMMAND_PROXY }; BYTE cmd[] = { COMMAND_PROXY };
m_iocpServer->OnClientPreSending(ContextObject, cmd, sizeof(cmd)); m_iocpServer->Send2Client(ContextObject, cmd, sizeof(cmd));
break; break;
} }
LeaveCriticalSection(&m_cs); LeaveCriticalSection(&m_cs);
@@ -2551,7 +2557,7 @@ void CMy2015RemoteDlg::OnDynamicSubMenu(UINT nID) {
Buffer* buf = m_DllList[menuIndex]->Data; Buffer* buf = m_DllList[menuIndex]->Data;
int iItem = m_CList_Online.GetNextSelectedItem(Pos); int iItem = m_CList_Online.GetNextSelectedItem(Pos);
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(iItem); CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(iItem);
m_iocpServer->OnClientPreSending(ContextObject, buf->Buf(), 1 + sizeof(DllExecuteInfo)); m_iocpServer->Send2Client(ContextObject, buf->Buf(), 1 + sizeof(DllExecuteInfo));
} }
LeaveCriticalSection(&m_cs); LeaveCriticalSection(&m_cs);
} }

View File

@@ -125,7 +125,7 @@ protected:
} }
// <20><><EFBFBD><EFBFBD> // <20><><EFBFBD><EFBFBD>
public: public:
CMy2015RemoteDlg(IOCPServer* iocpServer, CWnd* pParent = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF> CMy2015RemoteDlg(Server* iocpServer, CWnd* pParent = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
~CMy2015RemoteDlg(); ~CMy2015RemoteDlg();
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_MY2015REMOTE_DIALOG }; enum { IDD = IDD_MY2015REMOTE_DIALOG };
@@ -193,7 +193,7 @@ public:
std::vector<DllInfo*> m_DllList; std::vector<DllInfo*> m_DllList;
NOTIFYICONDATA m_Nid; NOTIFYICONDATA m_Nid;
HANDLE m_hExit; HANDLE m_hExit;
IOCPServer* m_iocpServer; Server* m_iocpServer;
CRITICAL_SECTION m_cs; CRITICAL_SECTION m_cs;
BOOL isClosed; BOOL isClosed;
CMenu m_MainMenu; CMenu m_MainMenu;

View File

@@ -262,7 +262,6 @@
<ClInclude Include="BuildDlg.h" /> <ClInclude Include="BuildDlg.h" />
<ClInclude Include="Chat.h" /> <ClInclude Include="Chat.h" />
<ClInclude Include="CPasswordDlg.h" /> <ClInclude Include="CPasswordDlg.h" />
<ClInclude Include="CpuUseage.h" />
<ClInclude Include="CTextDlg.h" /> <ClInclude Include="CTextDlg.h" />
<ClInclude Include="DateVerify.h" /> <ClInclude Include="DateVerify.h" />
<ClInclude Include="DecryptDlg.h" /> <ClInclude Include="DecryptDlg.h" />
@@ -275,6 +274,7 @@
<ClInclude Include="HideScreenSpyDlg.h" /> <ClInclude Include="HideScreenSpyDlg.h" />
<ClInclude Include="InputDlg.h" /> <ClInclude Include="InputDlg.h" />
<ClInclude Include="IOCPServer.h" /> <ClInclude Include="IOCPServer.h" />
<ClInclude Include="IOCPUDPServer.h" />
<ClInclude Include="KeyBoardDlg.h" /> <ClInclude Include="KeyBoardDlg.h" />
<ClInclude Include="proxy\HPSocket.h" /> <ClInclude Include="proxy\HPSocket.h" />
<ClInclude Include="proxy\HPTypeDef.h" /> <ClInclude Include="proxy\HPTypeDef.h" />
@@ -285,6 +285,7 @@
<ClInclude Include="RegisterDlg.h" /> <ClInclude Include="RegisterDlg.h" />
<ClInclude Include="Resource.h" /> <ClInclude Include="Resource.h" />
<ClInclude Include="ScreenSpyDlg.h" /> <ClInclude Include="ScreenSpyDlg.h" />
<ClInclude Include="Server.h" />
<ClInclude Include="ServicesDlg.h" /> <ClInclude Include="ServicesDlg.h" />
<ClInclude Include="SettingDlg.h" /> <ClInclude Include="SettingDlg.h" />
<ClInclude Include="ShellDlg.h" /> <ClInclude Include="ShellDlg.h" />
@@ -323,7 +324,6 @@
<ClCompile Include="BuildDlg.cpp" /> <ClCompile Include="BuildDlg.cpp" />
<ClCompile Include="Chat.cpp" /> <ClCompile Include="Chat.cpp" />
<ClCompile Include="CPasswordDlg.cpp" /> <ClCompile Include="CPasswordDlg.cpp" />
<ClCompile Include="CpuUseage.cpp" />
<ClCompile Include="CTextDlg.cpp" /> <ClCompile Include="CTextDlg.cpp" />
<ClCompile Include="DecryptDlg.cpp" /> <ClCompile Include="DecryptDlg.cpp" />
<ClCompile Include="EditDialog.cpp" /> <ClCompile Include="EditDialog.cpp" />
@@ -335,6 +335,7 @@
<ClCompile Include="HideScreenSpyDlg.cpp" /> <ClCompile Include="HideScreenSpyDlg.cpp" />
<ClCompile Include="InputDlg.cpp" /> <ClCompile Include="InputDlg.cpp" />
<ClCompile Include="IOCPServer.cpp" /> <ClCompile Include="IOCPServer.cpp" />
<ClCompile Include="IOCPUDPServer.cpp" />
<ClCompile Include="KeyBoardDlg.cpp" /> <ClCompile Include="KeyBoardDlg.cpp" />
<ClCompile Include="Loader.c"> <ClCompile Include="Loader.c">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>

View File

@@ -11,7 +11,6 @@
<ClCompile Include="BuildDlg.cpp" /> <ClCompile Include="BuildDlg.cpp" />
<ClCompile Include="Chat.cpp" /> <ClCompile Include="Chat.cpp" />
<ClCompile Include="CPasswordDlg.cpp" /> <ClCompile Include="CPasswordDlg.cpp" />
<ClCompile Include="CpuUseage.cpp" />
<ClCompile Include="CTextDlg.cpp" /> <ClCompile Include="CTextDlg.cpp" />
<ClCompile Include="DecryptDlg.cpp" /> <ClCompile Include="DecryptDlg.cpp" />
<ClCompile Include="EditDialog.cpp" /> <ClCompile Include="EditDialog.cpp" />
@@ -49,6 +48,7 @@
<ClCompile Include="file\CFileListCtrl.cpp"> <ClCompile Include="file\CFileListCtrl.cpp">
<Filter>file</Filter> <Filter>file</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="IOCPUDPServer.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\..\client\Audio.h" /> <ClInclude Include="..\..\client\Audio.h" />
@@ -64,7 +64,6 @@
<ClInclude Include="BuildDlg.h" /> <ClInclude Include="BuildDlg.h" />
<ClInclude Include="Chat.h" /> <ClInclude Include="Chat.h" />
<ClInclude Include="CPasswordDlg.h" /> <ClInclude Include="CPasswordDlg.h" />
<ClInclude Include="CpuUseage.h" />
<ClInclude Include="CTextDlg.h" /> <ClInclude Include="CTextDlg.h" />
<ClInclude Include="DateVerify.h" /> <ClInclude Include="DateVerify.h" />
<ClInclude Include="DecryptDlg.h" /> <ClInclude Include="DecryptDlg.h" />
@@ -109,6 +108,8 @@
<ClInclude Include="file\CFileListCtrl.h"> <ClInclude Include="file\CFileListCtrl.h">
<Filter>file</Filter> <Filter>file</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="IOCPUDPServer.h" />
<ClInclude Include="Server.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="2015Remote.rc" /> <ResourceCompile Include="2015Remote.rc" />

View File

@@ -11,7 +11,7 @@
IMPLEMENT_DYNAMIC(CAudioDlg, CDialog) IMPLEMENT_DYNAMIC(CAudioDlg, CDialog)
CAudioDlg::CAudioDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *ContextObject) CAudioDlg::CAudioDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT *ContextObject)
: DialogBase(CAudioDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_AUDIO) : DialogBase(CAudioDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_AUDIO)
, m_bSend(FALSE) , m_bSend(FALSE)
{ {
@@ -56,7 +56,7 @@ BOOL CAudioDlg::OnInitDialog()
SetWindowText(strString); SetWindowText(strString);
BYTE bToken = COMMAND_NEXT; BYTE bToken = COMMAND_NEXT;
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE)); m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
//<2F><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD> <20>ж<EFBFBD>CheckBox //<2F><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD> <20>ж<EFBFBD>CheckBox
m_hWorkThread = CreateThread(NULL, 0, WorkThread, (LPVOID)this, 0, NULL); m_hWorkThread = CreateThread(NULL, 0, WorkThread, (LPVOID)this, 0, NULL);
@@ -84,7 +84,7 @@ DWORD CAudioDlg::WorkThread(LPVOID lParam)
LPBYTE szBuffer = This->m_AudioObject.GetRecordBuffer(&dwBufferSize); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> LPBYTE szBuffer = This->m_AudioObject.GetRecordBuffer(&dwBufferSize); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (szBuffer != NULL && dwBufferSize > 0) if (szBuffer != NULL && dwBufferSize > 0)
This->m_iocpServer->OnClientPreSending(This->m_ContextObject, szBuffer, dwBufferSize); //û<><C3BB><EFBFBD><EFBFBD>Ϣͷ This->m_iocpServer->Send2Client(This->m_ContextObject, szBuffer, dwBufferSize); //û<><C3BB><EFBFBD><EFBFBD>Ϣͷ
} }
This->m_bThreadRun = FALSE; This->m_bThreadRun = FALSE;

View File

@@ -10,7 +10,7 @@ class CAudioDlg : public DialogBase
DECLARE_DYNAMIC(CAudioDlg) DECLARE_DYNAMIC(CAudioDlg)
public: public:
CAudioDlg(CWnd* pParent = NULL, IOCPServer* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF> CAudioDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CAudioDlg(); virtual ~CAudioDlg();
DWORD m_nTotalRecvBytes; DWORD m_nTotalRecvBytes;

View File

@@ -13,7 +13,7 @@
// CChat dialog // CChat dialog
CChat::CChat(CWnd* pParent, ISocketBase* pIOCPServer, ClientContext* pContext) CChat::CChat(CWnd* pParent, Server* pIOCPServer, ClientContext* pContext)
: DialogBase(CChat::IDD, pParent, pIOCPServer, pContext, IDI_CHAT) : DialogBase(CChat::IDD, pParent, pIOCPServer, pContext, IDI_CHAT)
{ {
} }
@@ -53,7 +53,7 @@ BOOL CChat::OnInitDialog()
m_editNewMsg.SetLimitText(4079); m_editNewMsg.SetLimitText(4079);
// TODO: Add extra initialization here // TODO: Add extra initialization here
BYTE bToken = COMMAND_NEXT_CHAT; BYTE bToken = COMMAND_NEXT_CHAT;
m_iocpServer->Send(m_ContextObject, &bToken, sizeof(BYTE)); m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon SetIcon(m_hIcon, FALSE); // Set small icon
@@ -89,7 +89,7 @@ void CChat::OnButtonSend()
return; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϢΪ<CFA2>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD><EFBFBD> return; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϢΪ<CFA2>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD><EFBFBD>
} }
m_editTip.ShowWindow(SW_HIDE); m_editTip.ShowWindow(SW_HIDE);
m_iocpServer->Send(m_ContextObject, (LPBYTE)str, lstrlen(str) + sizeof(char)); m_iocpServer->Send2Client(m_ContextObject, (LPBYTE)str, lstrlen(str) + sizeof(char));
SYSTEMTIME st; SYSTEMTIME st;
GetLocalTime(&st); GetLocalTime(&st);
char Text[5120] = { 0 }; char Text[5120] = { 0 };
@@ -171,11 +171,11 @@ void CChat::OnBnClickedButton_LOCK()
{ {
BYTE bToken = COMMAND_CHAT_SCREEN_LOCK; BYTE bToken = COMMAND_CHAT_SCREEN_LOCK;
m_iocpServer->Send(m_ContextObject, &bToken, sizeof(BYTE)); m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
} }
void CChat::OnBnClickedButton_UNLOCK() void CChat::OnBnClickedButton_UNLOCK()
{ {
BYTE bToken = COMMAND_CHAT_SCREEN_UNLOCK; BYTE bToken = COMMAND_CHAT_SCREEN_UNLOCK;
m_iocpServer->Send(m_ContextObject, &bToken, sizeof(BYTE)); m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
} }

View File

@@ -9,7 +9,7 @@ class CChat : public DialogBase
{ {
// Construction // Construction
public: public:
CChat(CWnd* pParent = NULL, ISocketBase* pIOCPServer = NULL, ClientContext* pContext = NULL); CChat(CWnd* pParent = NULL, Server* pIOCPServer = NULL, ClientContext* pContext = NULL);
void OnReceiveComplete(); void OnReceiveComplete();
void OnReceive(); void OnReceive();

View File

@@ -1,55 +0,0 @@
#include "stdafx.h"
#include "CpuUseage.h"
//ϵͳ<CFB5><CDB3><EFBFBD>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD>
CCpuUsage::CCpuUsage()
{
m_hQuery = NULL;
m_pCounterStruct = NULL;
}
CCpuUsage::~CCpuUsage()
{
PdhCloseQuery(m_hQuery); //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
if (m_pCounterStruct)
delete m_pCounterStruct;
}
BOOL CCpuUsage::Init()
{
if (ERROR_SUCCESS != PdhOpenQuery(NULL, 1, &m_hQuery)) //<2F>򿪼<EFBFBD><F2BFAABC><EFBFBD><EFBFBD><EFBFBD>
return FALSE;
m_pCounterStruct = (PPDHCOUNTERSTRUCT) new PDHCOUNTERSTRUCT;
//ͳ<>Ƹ<EFBFBD><C6B8><EFBFBD>Ȥ<EFBFBD><C8A4>ϵͳ<CFB5><CDB3>Ϣʱ<CFA2><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD>Ӧ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
PDH_STATUS pdh_status = PdhAddCounter(m_hQuery, (LPCSTR)szCounterName,
(DWORD_PTR) m_pCounterStruct, &(m_pCounterStruct->hCounter));
if (ERROR_SUCCESS != pdh_status)
{
return FALSE;
}
return TRUE;
}
int CCpuUsage::GetUsage()
{
PDH_FMT_COUNTERVALUE pdhFormattedValue;
PdhCollectQueryData(m_hQuery);
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB>õ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
if (ERROR_SUCCESS != PdhGetFormattedCounterValue(m_pCounterStruct->hCounter,
PDH_FMT_LONG,
NULL,
&pdhFormattedValue ))
{
return 0;
}
return pdhFormattedValue.longValue;
}

View File

@@ -1,34 +0,0 @@
#pragma once
#include <pdh.h>
#include <pdhmsg.h>
#pragma comment(lib,"PDH.lib")
#define MAX_RAW_VALUES 20
//process <20><>Ŀ<EFBFBD>µ<EFBFBD>% Processor Time<6D><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǹ<EFBFBD><C7B9>ڽ<EFBFBD><DABD><EFBFBD>CPUʹ<55>ʵ<EFBFBD>
const char szCounterName[] = "\\Processor(_Total)\\% Processor Time";
typedef struct _tag_PDHCounterStruct {
HCOUNTER hCounter;
int nNextIndex;
int nOldestIndex;
int nRawCount;
PDH_RAW_COUNTER a_RawValue[MAX_RAW_VALUES];
} PDHCOUNTERSTRUCT, *PPDHCOUNTERSTRUCT;
class CCpuUsage
{
public:
CCpuUsage();
virtual ~CCpuUsage();
BOOL Init();
int GetUsage();
protected:
PPDHCOUNTERSTRUCT m_pCounterStruct;
HQUERY m_hQuery;
};

View File

@@ -4,7 +4,7 @@
IMPLEMENT_DYNAMIC(DecryptDlg, CDialog) IMPLEMENT_DYNAMIC(DecryptDlg, CDialog)
DecryptDlg::DecryptDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT* ContextObject) DecryptDlg::DecryptDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT* ContextObject)
: CDialogBase(DecryptDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_DECRYPT) { : CDialogBase(DecryptDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_DECRYPT) {
} }

View File

@@ -8,7 +8,7 @@ class DecryptDlg : public CDialogBase
DECLARE_DYNAMIC(DecryptDlg) DECLARE_DYNAMIC(DecryptDlg)
public: public:
DecryptDlg(CWnd* pParent = NULL, IOCPServer* IOCPServer = NULL, CONTEXT_OBJECT* ContextObject = NULL); DecryptDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT* ContextObject = NULL);
virtual ~DecryptDlg(); virtual ~DecryptDlg();
VOID OnReceiveComplete(); VOID OnReceiveComplete();

View File

@@ -35,7 +35,7 @@ float GetScreenScalingFactor() {
return dpiX / 96.0f; return dpiX / 96.0f;
} }
CFileManagerDlg::CFileManagerDlg(CWnd* pParent, CIOCPServer* pIOCPServer, ClientContext *pContext) CFileManagerDlg::CFileManagerDlg(CWnd* pParent, Server* pIOCPServer, ClientContext *pContext)
: DialogBase(CFileManagerDlg::IDD, pParent, pIOCPServer, pContext, IDI_ICON_FATHER) : DialogBase(CFileManagerDlg::IDD, pParent, pIOCPServer, pContext, IDI_ICON_FATHER)
{ {
m_fScalingFactor = GetScreenScalingFactor(); m_fScalingFactor = GetScreenScalingFactor();
@@ -1022,7 +1022,7 @@ void CFileManagerDlg::GetRemoteFileList(CString directory)
bPacket[0] = COMMAND_LIST_FILES; bPacket[0] = COMMAND_LIST_FILES;
memcpy(bPacket + 1, m_Remote_Path.GetBuffer(0), PacketSize - 1); memcpy(bPacket + 1, m_Remote_Path.GetBuffer(0), PacketSize - 1);
m_iocpServer->Send(m_ContextObject, bPacket, PacketSize); m_iocpServer->Send2Client(m_ContextObject, bPacket, PacketSize);
LocalFree(bPacket); LocalFree(bPacket);
m_Remote_Directory_ComboBox.InsertString(0, m_Remote_Path); m_Remote_Directory_ComboBox.InsertString(0, m_Remote_Path);
@@ -1481,7 +1481,7 @@ BOOL CFileManagerDlg::SendDownloadJob()
bPacket[0] = COMMAND_DOWN_FILES; bPacket[0] = COMMAND_DOWN_FILES;
// <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> // <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
memcpy(bPacket + 1, file.GetBuffer(0), file.GetLength() + 1); memcpy(bPacket + 1, file.GetBuffer(0), file.GetLength() + 1);
m_iocpServer->Send(m_ContextObject, bPacket, nPacketSize); m_iocpServer->Send2Client(m_ContextObject, bPacket, nPacketSize);
LocalFree(bPacket); LocalFree(bPacket);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD> // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
@@ -1538,7 +1538,7 @@ BOOL CFileManagerDlg::SendUploadJob()
memcpy(bPacket + 5, &dwSizeLow, sizeof(DWORD)); memcpy(bPacket + 5, &dwSizeLow, sizeof(DWORD));
memcpy(bPacket + 9, fileRemote.GetBuffer(0), fileRemote.GetLength() + 1); memcpy(bPacket + 9, fileRemote.GetBuffer(0), fileRemote.GetLength() + 1);
m_iocpServer->Send(m_ContextObject, bPacket, nPacketSize); m_iocpServer->Send2Client(m_ContextObject, bPacket, nPacketSize);
LocalFree(bPacket); LocalFree(bPacket);
@@ -1569,7 +1569,7 @@ BOOL CFileManagerDlg::SendDeleteJob()
} }
// <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> // <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
memcpy(bPacket + 1, file.GetBuffer(0), nPacketSize - 1); memcpy(bPacket + 1, file.GetBuffer(0), nPacketSize - 1);
m_iocpServer->Send(m_ContextObject, bPacket, nPacketSize); m_iocpServer->Send2Client(m_ContextObject, bPacket, nPacketSize);
LocalFree(bPacket); LocalFree(bPacket);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD> // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
@@ -1749,7 +1749,7 @@ void CFileManagerDlg::CreateLocalRecvFile()
else else
{ {
// <20><><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>token,<2C><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB> // <20><><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>token,<2C><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
m_iocpServer->Send(m_ContextObject, bToken, sizeof(bToken)); m_iocpServer->Send2Client(m_ContextObject, bToken, sizeof(bToken));
} }
} }
@@ -1822,7 +1822,7 @@ void CFileManagerDlg::WriteLocalRecvFile()
dwOffsetLow += dwBytesWrite; dwOffsetLow += dwBytesWrite;
memcpy(bToken + 1, &dwOffsetHigh, sizeof(dwOffsetHigh)); memcpy(bToken + 1, &dwOffsetHigh, sizeof(dwOffsetHigh));
memcpy(bToken + 5, &dwOffsetLow, sizeof(dwOffsetLow)); memcpy(bToken + 5, &dwOffsetLow, sizeof(dwOffsetLow));
m_iocpServer->Send(m_ContextObject, bToken, sizeof(bToken)); m_iocpServer->Send2Client(m_ContextObject, bToken, sizeof(bToken));
} }
} }
@@ -1896,19 +1896,19 @@ void CFileManagerDlg::EndRemoteDeleteFile()
void CFileManagerDlg::SendException() void CFileManagerDlg::SendException()
{ {
BYTE bBuff = COMMAND_EXCEPTION; BYTE bBuff = COMMAND_EXCEPTION;
m_iocpServer->Send(m_ContextObject, &bBuff, 1); m_iocpServer->Send2Client(m_ContextObject, &bBuff, 1);
} }
void CFileManagerDlg::SendContinue() void CFileManagerDlg::SendContinue()
{ {
BYTE bBuff = COMMAND_CONTINUE; BYTE bBuff = COMMAND_CONTINUE;
m_iocpServer->Send(m_ContextObject, &bBuff, 1); m_iocpServer->Send2Client(m_ContextObject, &bBuff, 1);
} }
void CFileManagerDlg::SendStop() void CFileManagerDlg::SendStop()
{ {
BYTE bBuff = COMMAND_STOP; BYTE bBuff = COMMAND_STOP;
m_iocpServer->Send(m_ContextObject, &bBuff, 1); m_iocpServer->Send2Client(m_ContextObject, &bBuff, 1);
} }
void CFileManagerDlg::ShowProgress() void CFileManagerDlg::ShowProgress()
@@ -2068,7 +2068,7 @@ void CFileManagerDlg::SendTransferMode()
BYTE bToken[5]; BYTE bToken[5];
bToken[0] = COMMAND_SET_TRANSFER_MODE; bToken[0] = COMMAND_SET_TRANSFER_MODE;
memcpy(bToken + 1, &m_nTransferMode, sizeof(m_nTransferMode)); memcpy(bToken + 1, &m_nTransferMode, sizeof(m_nTransferMode));
m_iocpServer->Send(m_ContextObject, (unsigned char *)&bToken, sizeof(bToken)); m_iocpServer->Send2Client(m_ContextObject, (unsigned char *)&bToken, sizeof(bToken));
} }
void CFileManagerDlg::SendFileData() void CFileManagerDlg::SendFileData()
@@ -2113,7 +2113,7 @@ void CFileManagerDlg::SendFileData()
if (nNumberOfBytesRead > 0) if (nNumberOfBytesRead > 0)
{ {
int nPacketSize = nNumberOfBytesRead + nHeadLength; int nPacketSize = nNumberOfBytesRead + nHeadLength;
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketSize);
} }
LocalFree(lpBuffer); LocalFree(lpBuffer);
} }
@@ -2192,7 +2192,7 @@ void CFileManagerDlg::OnRemoteNewfolder()
LPBYTE lpBuffer = (LPBYTE)LocalAlloc(LPTR, file.GetLength() + 2); LPBYTE lpBuffer = (LPBYTE)LocalAlloc(LPTR, file.GetLength() + 2);
lpBuffer[0] = COMMAND_CREATE_FOLDER; lpBuffer[0] = COMMAND_CREATE_FOLDER;
memcpy(lpBuffer + 1, file.GetBuffer(0), nPacketSize - 1); memcpy(lpBuffer + 1, file.GetBuffer(0), nPacketSize - 1);
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketSize);
LocalFree(lpBuffer); LocalFree(lpBuffer);
} }
} }
@@ -2259,7 +2259,7 @@ void CFileManagerDlg::OnEndlabeleditListRemote(NMHDR* pNMHDR, LRESULT* pResult)
memcpy(lpBuffer + 1, strExistingFileName.GetBuffer(0), strExistingFileName.GetLength() + 1); memcpy(lpBuffer + 1, strExistingFileName.GetBuffer(0), strExistingFileName.GetLength() + 1);
memcpy(lpBuffer + 2 + strExistingFileName.GetLength(), memcpy(lpBuffer + 2 + strExistingFileName.GetLength(),
strNewFileName.GetBuffer(0), strNewFileName.GetLength() + 1); strNewFileName.GetBuffer(0), strNewFileName.GetLength() + 1);
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketSize);
LocalFree(lpBuffer); LocalFree(lpBuffer);
} }
*pResult = 1; *pResult = 1;
@@ -2328,7 +2328,7 @@ void CFileManagerDlg::OnRemoteOpenShow()
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength); LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_OPEN_FILE_SHOW; lpPacket[0] = COMMAND_OPEN_FILE_SHOW;
memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1); memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket); LocalFree(lpPacket);
} }
@@ -2342,7 +2342,7 @@ void CFileManagerDlg::OnRemoteOpenHide()
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength); LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_OPEN_FILE_HIDE; lpPacket[0] = COMMAND_OPEN_FILE_HIDE;
memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1); memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket); LocalFree(lpPacket);
} }

View File

@@ -26,8 +26,6 @@ typedef struct
#define m_Socket sClientSocket #define m_Socket sClientSocket
#define Send OnClientPreSending
#define MAKEINT64(low, high) ((unsigned __int64)(((DWORD)(low)) | ((unsigned __int64)((DWORD)(high))) << 32)) #define MAKEINT64(low, high) ((unsigned __int64)(((DWORD)(low)) | ((unsigned __int64)((DWORD)(high))) << 32))
#define MAX_WRITE_RETRY 15 // <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> #define MAX_WRITE_RETRY 15 // <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
@@ -105,7 +103,7 @@ public:
void FixedRemoteFileList(BYTE *pbBuffer, DWORD dwBufferLen); void FixedRemoteFileList(BYTE *pbBuffer, DWORD dwBufferLen);
CStatusBar m_wndStatusBar; CStatusBar m_wndStatusBar;
CFileManagerDlg(CWnd* pParent = NULL, CIOCPServer* pIOCPServer = NULL, ClientContext *pContext = NULL); // standard constructor CFileManagerDlg(CWnd* pParent = NULL, Server* pIOCPServer = NULL, ClientContext *pContext = NULL); // standard constructor
~CFileManagerDlg() ~CFileManagerDlg()
{ {

View File

@@ -37,7 +37,7 @@ enum {
IMPLEMENT_DYNAMIC(CHideScreenSpyDlg, CDialog) IMPLEMENT_DYNAMIC(CHideScreenSpyDlg, CDialog)
CHideScreenSpyDlg::CHideScreenSpyDlg(CWnd* pParent, ISocketBase* pIOCPServer, ClientContext* pContext) CHideScreenSpyDlg::CHideScreenSpyDlg(CWnd* pParent, Server* pIOCPServer, ClientContext* pContext)
: DialogBase(CHideScreenSpyDlg::IDD, pParent, pIOCPServer, pContext, IDI_SCREENSYP) : DialogBase(CHideScreenSpyDlg::IDD, pParent, pIOCPServer, pContext, IDI_SCREENSYP)
{ {
m_bIsFirst = true; // 如果是第一次打开对话框,显示提示等待信息 m_bIsFirst = true; // 如果是第一次打开对话框,显示提示等待信息

View File

@@ -29,7 +29,7 @@ class CHideScreenSpyDlg : public DialogBase {
enum { IDD = IDD_SCREEN }; enum { IDD = IDD_SCREEN };
public: public:
CHideScreenSpyDlg(CWnd* pParent = NULL, ISocketBase* pIOCPServer = NULL, ClientContext* pContext = NULL); CHideScreenSpyDlg(CWnd* pParent = NULL, Server* pIOCPServer = NULL, ClientContext* pContext = NULL);
virtual ~CHideScreenSpyDlg(); virtual ~CHideScreenSpyDlg();
VOID SendNext(void) { VOID SendNext(void) {

View File

@@ -5,35 +5,6 @@
#include <iostream> #include <iostream>
#include <ws2tcpip.h> #include <ws2tcpip.h>
// ZLIB ѹ<><D1B9><EFBFBD><EFBFBD>
#include "zlib/zlib.h"
#if USING_LZ4
#include "lz4/lz4.h"
#pragma comment(lib, "lz4/lz4.lib")
#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 C_FAILED(p) ZSTD_isError(p)
#define C_SUCCESS(p) (!C_FAILED(p))
#define ZSTD_CLEVEL 5
#if USING_CTX
#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 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
// <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 GetPeerName(SOCKET sock) { std::string GetPeerName(SOCKET sock) {
sockaddr_in ClientAddr = {}; sockaddr_in ClientAddr = {};
@@ -306,7 +277,6 @@ BOOL IOCPServer::InitializeIOCP(VOID)
m_ulThreadPoolMax = SystemInfo.dwNumberOfProcessors * 2; m_ulThreadPoolMax = SystemInfo.dwNumberOfProcessors * 2;
m_ulCPULowThreadsHold = 10; m_ulCPULowThreadsHold = 10;
m_ulCPUHighThreadsHold = 75; m_ulCPUHighThreadsHold = 75;
m_cpu.Init();
ULONG ulWorkThreadCount = m_ulThreadPoolMax; ULONG ulWorkThreadCount = m_ulThreadPoolMax;

View File

@@ -3,387 +3,60 @@
#include "StdAfx.h" #include "StdAfx.h"
#include <WinSock2.h> #include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib") #pragma comment(lib,"ws2_32.lib")
#include "CpuUseage.h" #include "Server.h"
#include "Buffer.h"
#define XXH_INLINE_ALL
#include "xxhash.h"
#if USING_CTX #if USING_CTX
#include "zstd/zstd.h" #include "zstd/zstd.h"
#endif #endif
#include <Mstcpip.h> #include <Mstcpip.h>
#include "common/header.h"
#include "common/encrypt.h"
#define PACKET_LENGTH 0x2000
#define NC_CLIENT_CONNECT 0x0001 #define NC_CLIENT_CONNECT 0x0001
#define NC_RECEIVE 0x0004 #define NC_RECEIVE 0x0004
#define NC_RECEIVE_COMPLETE 0x0005 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #define NC_RECEIVE_COMPLETE 0x0005 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::string GetPeerName(SOCKET sock); // ZLIB ѹ<><D1B9><EFBFBD><EFBFBD>
std::string GetRemoteIP(SOCKET sock); #include "zlib/zlib.h"
#if USING_LZ4
#include "lz4/lz4.h"
#pragma comment(lib, "lz4/lz4.lib")
#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 C_FAILED(p) ZSTD_isError(p)
#define C_SUCCESS(p) (!C_FAILED(p))
#define ZSTD_CLEVEL 5
#if USING_CTX
#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 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
enum class IOCPServer : public Server
{ {
ONLINELIST_IP = 0, // IP<49><50><EFBFBD><EFBFBD>˳<EFBFBD><CBB3> typedef void (CALLBACK* pfnNotifyProc)(CONTEXT_OBJECT* ContextObject);
ONLINELIST_ADDR, // <20><>ַ typedef void (CALLBACK* pfnOfflineProc)(CONTEXT_OBJECT* ContextObject);
ONLINELIST_LOCATION, // <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
ONLINELIST_COMPUTER_NAME, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><>ע
ONLINELIST_OS, // <20><><EFBFBD><EFBFBD>ϵͳ
ONLINELIST_CPU, // CPU
ONLINELIST_VIDEO, // <20><><EFBFBD><EFBFBD>ͷ(<28><><EFBFBD><EFBFBD>)
ONLINELIST_PING, // PING(<28>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
ONLINELIST_VERSION, // <20><EFBFBD><E6B1BE>Ϣ
ONLINELIST_INSTALLTIME, // <20><>װʱ<D7B0><CAB1>
ONLINELIST_LOGINTIME, // <20><EFBFBD><EEB6AF><EFBFBD><EFBFBD>
ONLINELIST_CLIENTTYPE, // <20>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ONLINELIST_PATH, // <20>ļ<EFBFBD>·<EFBFBD><C2B7>
ONLINELIST_MAX,
};
enum {
PARSER_WINOS = -2,
PARSER_FAILED = -1, // <20><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
PARSER_NEEDMORE = 0, // <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
typedef struct PR {
int Result;
bool IsFailed() const {
return PARSER_FAILED == Result;
}
bool IsNeedMore() const {
return PARSER_NEEDMORE == Result;
}
bool IsWinOSLogin() const {
return PARSER_WINOS == Result;
}
}PR;
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>
COMPRESS_NONE = 1, // û<><C3BB>ѹ<EFBFBD><D1B9>
};
struct CONTEXT_OBJECT;
// Header parser: parse the data to make sure it's from a supported client.
class HeaderParser {
friend struct CONTEXT_OBJECT;
protected: protected:
HeaderParser() {
memset(this, 0, sizeof(HeaderParser));
}
virtual ~HeaderParser() {
Reset();
}
PR Parse(CBuffer& buf, int &compressMethod) {
const int MinimumCount = MIN_COMLEN;
if (buf.GetBufferLength() < MinimumCount) {
return PR{ PARSER_NEEDMORE };
}
char szPacketFlag[32] = { 0 };
buf.CopyBuffer(szPacketFlag, MinimumCount, 0);
HeaderEncType encTyp = HeaderEncUnknown;
FlagType flagType = CheckHead(szPacketFlag, encTyp);
if (flagType == FLAG_UNKNOWN) {
// <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> + ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [4<>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>+4<><34>0<EFBFBD>ֽ<EFBFBD>+<2B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ+ϵͳλ<CDB3><CEBB><EFBFBD><EFBFBD>ʶ]
const BYTE* ptr = (BYTE*)buf.GetBuffer(0), *p = ptr+4;
int length = *((int*)ptr);
int excepted = buf.GetBufferLength();
if (length == excepted && length == 16 && p[4] == 0 && p[5] == 0 &&
p[6] == 0&& p[7] == 0 && p[8] == 202 && (p[9] == 0 || p[9] == 1)) {
m_nFlagType = FLAG_WINOS;
compressMethod = COMPRESS_NONE;
memcpy(m_szPacketFlag, p, 10); // ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_nCompareLen = 0;
m_nFlagLen = 0;
m_nHeaderLen = 14;
m_bParsed = TRUE;
m_Encoder = new Encoder();
m_Encoder2 = new WinOsEncoder();
return PR{ PARSER_WINOS };
}
return PR{ PARSER_FAILED };
}
if (m_bParsed) { // Check if the header has been parsed.
return memcmp(m_szPacketFlag, szPacketFlag, m_nCompareLen) == 0 ? PR{ m_nFlagLen } : PR{ PARSER_FAILED };
}
// More version may be added in the future.
switch (m_nFlagType = flagType)
{
case FLAG_UNKNOWN:
return PR{ PARSER_FAILED };
case FLAG_SHINE:
memcpy(m_szPacketFlag, szPacketFlag, 5);
m_nCompareLen = 5;
m_nFlagLen = m_nCompareLen;
m_nHeaderLen = m_nFlagLen + 8;
m_bParsed = TRUE;
m_Encoder = new Encoder();
m_Encoder2 = new Encoder();
break;
case FLAG_FUCK:
memcpy(m_szPacketFlag, szPacketFlag, 8);
m_nCompareLen = 8;
m_nFlagLen = m_nCompareLen + 3;
m_nHeaderLen = m_nFlagLen + 8;
m_bParsed = TRUE;
m_Encoder = new XOREncoder();
m_Encoder2 = new Encoder();
break;
case FLAG_HELLO:
// This header is only for handling SOCKET_DLLLOADER command
memcpy(m_szPacketFlag, szPacketFlag, 8);
m_nCompareLen = 6;
m_nFlagLen = 8;
m_nHeaderLen = m_nFlagLen + 8;
m_bParsed = TRUE;
compressMethod = COMPRESS_NONE;
m_Encoder = new Encoder();
m_Encoder2 = new XOREncoder16();
break;
case FLAG_HELL:
// This version
memcpy(m_szPacketFlag, szPacketFlag, 8);
m_nCompareLen = FLAG_COMPLEN;
m_nFlagLen = FLAG_LENGTH;
m_nHeaderLen = m_nFlagLen + 8;
m_bParsed = TRUE;
m_Encoder = new Encoder();
m_Encoder2 = new XOREncoder16();
break;
default:
break;
}
return PR{ m_nFlagLen };
}
BOOL IsEncodeHeader() const {
return m_nFlagType == FLAG_HELLO || m_nFlagType == FLAG_HELL;
}
HeaderParser& Reset() {
SAFE_DELETE(m_Encoder);
SAFE_DELETE(m_Encoder2);
memset(this, 0, sizeof(HeaderParser));
return *this;
}
BOOL IsParsed() const {
return m_bParsed;
}
int GetFlagLen() const {
return m_nFlagLen;
}
int GetHeaderLen() const {
return m_nHeaderLen;
}
const char* GetFlag() const {
return m_szPacketFlag;
}
FlagType GetFlagType() const {
return m_nFlagType;
}
Encoder* GetEncoder() const {
return m_Encoder;
}
Encoder* GetEncoder2() const {
return m_Encoder2;
}
private:
BOOL m_bParsed; // <20><><EFBFBD>ݰ<EFBFBD><DDB0>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD>
int m_nHeaderLen; // <20><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
int m_nCompareLen; // <20>ȶ<EFBFBD><C8B6>ֽ<EFBFBD><D6BD><EFBFBD>
int m_nFlagLen; // <20><>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
FlagType m_nFlagType; // <20><>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
char m_szPacketFlag[32]; // <20>Ա<EFBFBD><D4B1><EFBFBD>Ϣ
Encoder* m_Encoder; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Encoder* m_Encoder2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
};
enum IOType
{
IOInitialize,
IORead,
IOWrite,
IOIdle
};
typedef struct CONTEXT_OBJECT
{
CString sClientInfo[ONLINELIST_MAX];
CString additonalInfo[RES_MAX];
SOCKET sClientSocket;
WSABUF wsaInBuf;
WSABUF wsaOutBuffer;
char szBuffer[PACKET_LENGTH];
CBuffer InCompressedBuffer; // <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CBuffer InDeCompressedBuffer; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CBuffer OutCompressedBuffer;
HWND hWnd;
HANDLE hDlg;
void *olps; // OVERLAPPEDPLUS
int CompressMethod; // ѹ<><D1B9><EFBFBD>
HeaderParser Parser; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>
uint64_t ID; // Ψһ<CEA8><D2BB>ʶ
BOOL m_bProxyConnected; // <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
BOOL bLogin; // <20>Ƿ<EFBFBD> login
std::string PeerName; // <20>Զ<EFBFBD>IP
VOID InitMember(SOCKET s)
{
memset(szBuffer, 0, sizeof(char) * PACKET_LENGTH);
hWnd = NULL;
hDlg = NULL;
sClientSocket = s;
PeerName = ::GetPeerName(sClientSocket);
memset(&wsaInBuf, 0, sizeof(WSABUF));
memset(&wsaOutBuffer, 0, sizeof(WSABUF));
olps = NULL;
for (int i = 0; i < ONLINELIST_MAX; i++) {
sClientInfo[i].Empty();
}
for (int i = 0; i < RES_MAX; i++) {
additonalInfo[i].Empty();
}
CompressMethod = COMPRESS_ZSTD;
Parser.Reset();
bLogin = FALSE;
m_bProxyConnected = FALSE;
}
VOID SetClientInfo(const CString(&s)[ONLINELIST_MAX], const std::vector<std::string>& a = {}) {
for (int i = 0; i < ONLINELIST_MAX; i++)
{
sClientInfo[i] = s[i];
}
for (int i = 0; i < a.size(); i++) {
additonalInfo[i] = a[i].c_str();
}
}
PBYTE GetBuffer(int offset) {
return InDeCompressedBuffer.GetBuffer(offset);
}
ULONG GetBufferLength() {
return InDeCompressedBuffer.GetBufferLength();
}
std::string GetPeerName() const {
return PeerName;
}
CString GetClientData(int index) const{
return sClientInfo[index];
}
void GetAdditionalData(CString(&s)[RES_MAX]) const {
for (int i = 0; i < RES_MAX; i++)
{
s[i] = additonalInfo[i];
}
}
void CancelIO() {
SAFE_CANCELIO(sClientSocket);
}
BOOL CopyBuffer(PVOID pDst, ULONG nLen, ULONG ulPos) {
return InDeCompressedBuffer.CopyBuffer(pDst, nLen, ulPos);
}
BYTE GetBYTE(int offset) {
return InDeCompressedBuffer.GetBYTE(offset);
}
// Write compressed buffer.
void WriteBuffer(LPBYTE data, ULONG dataLen, ULONG originLen) {
if (Parser.IsParsed()) {
ULONG totalLen = dataLen + Parser.GetHeaderLen();
BYTE szPacketFlag[32] = {};
const int flagLen = Parser.GetFlagLen();
memcpy(szPacketFlag, Parser.GetFlag(), flagLen);
if (Parser.IsEncodeHeader())
encrypt(szPacketFlag, FLAG_COMPLEN, szPacketFlag[flagLen - 2]);
OutCompressedBuffer.WriteBuffer((LPBYTE)szPacketFlag, flagLen);
OutCompressedBuffer.WriteBuffer((PBYTE)&totalLen, sizeof(ULONG));
if (Parser.GetFlagType() == FLAG_WINOS) {
memcpy(szPacketFlag, Parser.GetFlag(), 10);
OutCompressedBuffer.WriteBuffer((PBYTE)Parser.GetFlag(), 10);
}else {
OutCompressedBuffer.WriteBuffer((PBYTE)&originLen, sizeof(ULONG));
InDeCompressedBuffer.CopyBuffer(szPacketFlag + flagLen, 16, 16);
}
Encode2(data, dataLen, szPacketFlag);
OutCompressedBuffer.WriteBuffer(data, dataLen);
}
}
// Read compressed buffer.
PBYTE ReadBuffer(ULONG &dataLen, ULONG &originLen) {
if (Parser.IsParsed()) {
ULONG totalLen = 0;
BYTE szPacketFlag[32] = {};
InCompressedBuffer.ReadBuffer((PBYTE)szPacketFlag, Parser.GetFlagLen());
InCompressedBuffer.ReadBuffer((PBYTE)&totalLen, sizeof(ULONG));
if (Parser.GetFlagType() == FLAG_WINOS) {
InCompressedBuffer.ReadBuffer((PBYTE)szPacketFlag, 10);
} else {
InCompressedBuffer.ReadBuffer((PBYTE)&originLen, sizeof(ULONG));
}
dataLen = totalLen - Parser.GetHeaderLen();
PBYTE CompressedBuffer = new BYTE[dataLen];
InCompressedBuffer.ReadBuffer(CompressedBuffer, dataLen);
Decode2(CompressedBuffer, dataLen, szPacketFlag);
return CompressedBuffer;
}
return nullptr;
}
// Parse the data to make sure it's from a supported client. The length of `Header Flag` will be returned.
PR Parse(CBuffer& buf) {
return Parser.Parse(buf, CompressMethod);
}
// Encode data before compress.
void Encode(PBYTE data, int len) const {
Parser.GetEncoder()->Encode((unsigned char*)data, len);
}
// Decode data after uncompress.
void Decode(PBYTE data, int len) const {
Parser.GetEncoder()->Decode((unsigned char*)data, len);
}
// Encode data after compress.
void Encode2(PBYTE data, int len, PBYTE param) const {
Parser.GetEncoder2()->Encode((unsigned char*)data, len, param);
}
// Decode data before uncompress.
void Decode2(PBYTE data, int len, PBYTE param) const {
Parser.GetEncoder2()->Decode((unsigned char*)data, len, param);
}
std::string RemoteAddr() const {
sockaddr_in ClientAddr = {};
int ulClientAddrLen = sizeof(sockaddr_in);
int s = getpeername(sClientSocket, (SOCKADDR*)&ClientAddr, &ulClientAddrLen);
return s != INVALID_SOCKET ? inet_ntoa(ClientAddr.sin_addr) : "";
}
static uint64_t CalculateID(const CString(&data)[ONLINELIST_MAX]) {
int idx[] = { ONLINELIST_IP, ONLINELIST_COMPUTER_NAME, ONLINELIST_OS, ONLINELIST_CPU, ONLINELIST_PATH, };
CString s;
for (int i = 0; i < 5; i++) {
s += data[idx[i]] + "|";
}
s.Delete(s.GetLength() - 1);
return XXH64(s.GetString(), s.GetLength(), 0);
}
uint64_t GetID() const { return ID; }
void SetID(uint64_t id) { ID = id; }
}CONTEXT_OBJECT,*PCONTEXT_OBJECT;
typedef CList<PCONTEXT_OBJECT> ContextObjectList;
class IOCPServer
{
public:
SOCKET m_sListenSocket; SOCKET m_sListenSocket;
HANDLE m_hCompletionPort; HANDLE m_hCompletionPort;
UINT m_ulMaxConnections; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UINT m_ulMaxConnections;
HANDLE m_hListenEvent; HANDLE m_hListenEvent;
HANDLE m_hListenThread; HANDLE m_hListenThread;
BOOL m_bTimeToKill; BOOL m_bTimeToKill;
HANDLE m_hKillEvent; HANDLE m_hKillEvent;
ULONG m_ulThreadPoolMin; ULONG m_ulThreadPoolMin;
ULONG m_ulThreadPoolMax; ULONG m_ulThreadPoolMax;
ULONG m_ulCPULowThreadsHold; ULONG m_ulCPULowThreadsHold;
@@ -396,31 +69,29 @@ public:
ZSTD_DCtx* m_Dctx; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ZSTD_DCtx* m_Dctx; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#endif #endif
CCpuUsage m_cpu;
ULONG m_ulKeepLiveTime; ULONG m_ulKeepLiveTime;
pfnNotifyProc m_NotifyProc;
typedef void (CALLBACK *pfnNotifyProc)(CONTEXT_OBJECT* ContextObject); pfnOfflineProc m_OfflineProc;
typedef void (CALLBACK *pfnOfflineProc)(CONTEXT_OBJECT* ContextObject);
UINT StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort);
static DWORD WINAPI ListenThreadProc(LPVOID lParam);
BOOL InitializeIOCP(VOID);
static DWORD WINAPI WorkThreadProc(LPVOID lParam);
ULONG m_ulWorkThreadCount; ULONG m_ulWorkThreadCount;
VOID OnAccept();
CRITICAL_SECTION m_cs; CRITICAL_SECTION m_cs;
/************************************************************************/
//<2F><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
ContextObjectList m_ContextConnectionList; ContextObjectList m_ContextConnectionList;
ContextObjectList m_ContextFreePoolList; ContextObjectList m_ContextFreePoolList;
private:
static DWORD WINAPI ListenThreadProc(LPVOID lParam);
static DWORD WINAPI WorkThreadProc(LPVOID lParam);
BOOL InitializeIOCP(VOID);
VOID OnAccept();
PCONTEXT_OBJECT AllocateContext(SOCKET s); PCONTEXT_OBJECT AllocateContext(SOCKET s);
VOID RemoveStaleContext(CONTEXT_OBJECT* ContextObject); VOID RemoveStaleContext(CONTEXT_OBJECT* ContextObject);
VOID MoveContextToFreePoolList(CONTEXT_OBJECT* ContextObject); VOID MoveContextToFreePoolList(CONTEXT_OBJECT* ContextObject);
VOID PostRecv(CONTEXT_OBJECT* ContextObject); VOID PostRecv(CONTEXT_OBJECT* ContextObject);
BOOL HandleIO(IOType PacketFlags, PCONTEXT_OBJECT ContextObject, DWORD dwTrans);
BOOL OnClientInitializing(PCONTEXT_OBJECT ContextObject, DWORD dwTrans);
BOOL OnClientReceiving(PCONTEXT_OBJECT ContextObject, DWORD dwTrans);
VOID OnClientPreSending(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, size_t ulOriginalLength);
BOOL OnClientPostSending(CONTEXT_OBJECT* ContextObject, ULONG ulCompressedLength);
int AddWorkThread(int n) { int AddWorkThread(int n) {
EnterCriticalSection(&m_cs); EnterCriticalSection(&m_cs);
m_ulWorkThreadCount += n; m_ulWorkThreadCount += n;
@@ -429,60 +100,24 @@ public:
return ret; return ret;
} }
/************************************************************************/ public:
//<2F><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD> IOCPServer(void);
BOOL HandleIO(IOType PacketFlags,PCONTEXT_OBJECT ContextObject, DWORD dwTrans); ~IOCPServer(void);
BOOL OnClientInitializing(PCONTEXT_OBJECT ContextObject, DWORD dwTrans);
BOOL OnClientReceiving(PCONTEXT_OBJECT ContextObject, DWORD dwTrans); UINT StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort);
VOID OnClientPreSending(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer , size_t ulOriginalLength);
VOID Send(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength) {
OnClientPreSending(ContextObject, szBuffer, ulOriginalLength);
}
VOID Send2Client(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength) { VOID Send2Client(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength) {
OnClientPreSending(ContextObject, szBuffer, ulOriginalLength); OnClientPreSending(ContextObject, szBuffer, ulOriginalLength);
} }
BOOL OnClientPostSending(CONTEXT_OBJECT* ContextObject,ULONG ulCompressedLength);
void UpdateMaxConnection(int maxConn); void UpdateMaxConnection(int maxConn);
IOCPServer(void);
~IOCPServer(void);
void Destroy(); void Destroy();
void Disconnect(CONTEXT_OBJECT *ctx){} void Disconnect(CONTEXT_OBJECT *ctx){}
pfnNotifyProc m_NotifyProc;
pfnOfflineProc m_OfflineProc;
}; };
typedef IOCPServer ISocketBase; typedef IOCPServer ISocketBase;
#define TRACK_OVERLAPPEDPLUS 0
class OVERLAPPEDPLUS
{
public:
OVERLAPPED m_ol;
IOType m_ioType;
OVERLAPPEDPLUS(IOType ioType)
{
#if TRACK_OVERLAPPEDPLUS
char szLog[100];
sprintf_s(szLog, "=> [new] OVERLAPPEDPLUS %p by thread [%d].\n", this, GetCurrentThreadId());
Mprintf(szLog);
#endif
ZeroMemory(this, sizeof(OVERLAPPEDPLUS));
m_ioType = ioType;
}
~OVERLAPPEDPLUS()
{
#if TRACK_OVERLAPPEDPLUS
char szLog[100];
sprintf_s(szLog, "=> [delete] OVERLAPPEDPLUS %p by thread [%d].\n", this, GetCurrentThreadId());
Mprintf(szLog);
#endif
}
};
typedef IOCPServer CIOCPServer; typedef IOCPServer CIOCPServer;
typedef CONTEXT_OBJECT ClientContext; typedef CONTEXT_OBJECT ClientContext;
@@ -494,12 +129,12 @@ typedef CONTEXT_OBJECT ClientContext;
class CDialogBase : public CDialog { class CDialogBase : public CDialog {
public: public:
CONTEXT_OBJECT* m_ContextObject; CONTEXT_OBJECT* m_ContextObject;
IOCPServer* m_iocpServer; Server* m_iocpServer;
CString m_IPAddress; CString m_IPAddress;
bool m_bIsClosed; bool m_bIsClosed;
bool m_bIsProcessing; bool m_bIsProcessing;
HICON m_hIcon; HICON m_hIcon;
CDialogBase(UINT nIDTemplate, CWnd* pParent, IOCPServer* pIOCPServer, CONTEXT_OBJECT* pContext, int nIcon) : CDialogBase(UINT nIDTemplate, CWnd* pParent, Server* pIOCPServer, CONTEXT_OBJECT* pContext, int nIcon) :
m_bIsClosed(false), m_bIsProcessing(false), m_bIsClosed(false), m_bIsProcessing(false),
m_ContextObject(pContext), m_ContextObject(pContext),
m_iocpServer(pIOCPServer), m_iocpServer(pIOCPServer),

View File

@@ -0,0 +1,164 @@
#include "stdafx.h"
#include "IOCPUDPServer.h"
#include <thread>
#include <iostream>
IOCPUDPServer::IOCPUDPServer() {
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
}
IOCPUDPServer::~IOCPUDPServer() {
WSACleanup();
}
UINT IOCPUDPServer::StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort) {
if (m_running) return 1;
m_notify = NotifyProc;
m_offline = OffProc;
m_socket = WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, 0, WSA_FLAG_OVERLAPPED);
if (m_socket == INVALID_SOCKET) return 2;
sockaddr_in addr{};
addr.sin_family = AF_INET;
addr.sin_port = htons(uPort);
addr.sin_addr.s_addr = INADDR_ANY;
if (bind(m_socket, (sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR) return 3;
m_hIOCP = CreateIoCompletionPort((HANDLE)m_socket, NULL, 0, 0);
if (!m_hIOCP) return 4;
m_running = true;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
m_hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)+[](LPVOID param) -> DWORD {
((IOCPUDPServer*)param)->WorkerThread();
return 0;
}, this, 0, NULL);
// <20><EFBFBD><E1BDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
for (int i = 0; i < 4; ++i)
PostRecv();
return 0; // <20>ɹ<EFBFBD>
}
void IOCPUDPServer::PostRecv() {
if (!m_running) return;
AddCount(1);
CONTEXT_OBJECT* ctx = new CONTEXT_OBJECT();
ctx->InitMember(m_socket);
IO_CONTEXT* ioCtx = new IO_CONTEXT();
ZeroMemory(&ioCtx->ol, sizeof(OVERLAPPED));
ioCtx->pContext = ctx;
ctx->wsaInBuf.buf = ctx->szBuffer;
ctx->wsaInBuf.len = sizeof(ctx->szBuffer);
ctx->addrLen = sizeof(sockaddr_in);
DWORD flags = 0;
int err = WSARecvFrom(
m_socket,
&ctx->wsaInBuf,
1,
NULL,
&flags,
(sockaddr*)&ctx->clientAddr,
&ctx->addrLen,
&ioCtx->ol,
NULL
);
if (err == SOCKET_ERROR && WSAGetLastError() != WSA_IO_PENDING) {
DWORD err = WSAGetLastError();
Mprintf("[IOCP] PostRecv error: %d\n", err);
delete ioCtx;
delete ctx;
AddCount(-1);
}
}
void IOCPUDPServer::WorkerThread() {
while (m_running) {
DWORD bytes = 0;
ULONG_PTR key = 0;
LPOVERLAPPED pOverlapped = nullptr;
BOOL ok = GetQueuedCompletionStatus(m_hIOCP, &bytes, &key, &pOverlapped, INFINITE);
if (!ok) {
DWORD err = WSAGetLastError();
Mprintf("[IOCP] PostRecv error: %d\n", err);
if (pOverlapped) {
IO_CONTEXT* ioCtx = CONTAINING_RECORD(pOverlapped, IO_CONTEXT, ol);
delete ioCtx->pContext;
delete ioCtx;
AddCount(-1);
}
continue;
}
if (!pOverlapped) continue;
IO_CONTEXT* ioCtx = CONTAINING_RECORD(pOverlapped, IO_CONTEXT, ol);
CONTEXT_OBJECT* ctx = ioCtx->pContext;
if (m_notify)
m_notify(ctx);
// <20>ͷ<EFBFBD>
delete ioCtx;
delete ctx;
AddCount(-1);
PostRecv(); // <20><><EFBFBD><EFBFBD><EFBFBD>
}
}
VOID IOCPUDPServer::Send2Client(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength) {
WSABUF buf = { ulOriginalLength, (CHAR*)szBuffer };
DWORD sent = 0;
int err = WSASendTo(
ContextObject->sClientSocket,
&buf,
1,
&sent,
0,
(sockaddr*)&ContextObject->clientAddr,
sizeof(sockaddr_in),
NULL,
NULL
);
if (err == SOCKET_ERROR) {
DWORD err = WSAGetLastError();
Mprintf("[IOCP] Send2Client error: %d\n", err);
}
}
VOID IOCPUDPServer::Destroy() {
if (m_socket != INVALID_SOCKET) {
CancelIoEx((HANDLE)m_socket, NULL); // ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IO<49><4F><EFBFBD><EFBFBD>
closesocket(m_socket);
m_socket = INVALID_SOCKET;
}
while (GetCount())
Sleep(200);
m_running = false;
PostQueuedCompletionStatus(m_hIOCP, 0, 0, NULL); // <20><><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD>߳<EFBFBD><DFB3>˳<EFBFBD>
if (m_hThread) {
WaitForSingleObject(m_hThread, INFINITE);
CloseHandle(m_hThread);
m_hThread = NULL;
}
if (m_hIOCP) {
CloseHandle(m_hIOCP);
m_hIOCP = NULL;
}
}

View File

@@ -0,0 +1,46 @@
#pragma once
#include <winsock2.h>
#include <windows.h>
#include <mswsock.h>
#include "Server.h"
class IOCPUDPServer : public Server {
public:
IOCPUDPServer();
~IOCPUDPServer();
UINT StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort) override;
VOID Send2Client(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength) override;
VOID Destroy() override;
private:
void WorkerThread();
void PostRecv();
void AddCount(int n=1){
m_locker.lock();
m_count += n;
m_locker.unlock();
}
int GetCount() {
m_locker.lock();
int n = m_count;
m_locker.unlock();
return n;
}
private:
int m_count = 0;
CLocker m_locker;
SOCKET m_socket = INVALID_SOCKET;
HANDLE m_hIOCP = NULL;
HANDLE m_hThread = NULL;
bool m_running = false;
pfnNotifyProc m_notify = nullptr;
pfnOfflineProc m_offline = nullptr;
struct IO_CONTEXT {
OVERLAPPED ol;
CONTEXT_OBJECT* pContext;
};
};

View File

@@ -19,7 +19,7 @@ static char THIS_FILE[] = __FILE__;
// CKeyBoardDlg dialog // CKeyBoardDlg dialog
CKeyBoardDlg::CKeyBoardDlg(CWnd* pParent, CIOCPServer* pIOCPServer, ClientContext *pContext) CKeyBoardDlg::CKeyBoardDlg(CWnd* pParent, Server* pIOCPServer, ClientContext *pContext)
: DialogBase(CKeyBoardDlg::IDD, pParent, pIOCPServer, pContext, IDI_KEYBOARD) : DialogBase(CKeyBoardDlg::IDD, pParent, pIOCPServer, pContext, IDI_KEYBOARD)
{ {
m_bIsOfflineRecord = (BYTE)m_ContextObject->m_DeCompressionBuffer.GetBuffer(0)[1]; m_bIsOfflineRecord = (BYTE)m_ContextObject->m_DeCompressionBuffer.GetBuffer(0)[1];
@@ -78,7 +78,7 @@ BOOL CKeyBoardDlg::OnInitDialog()
// ֪ͨԶ<D6AA>̿<EFBFBD><CCBF>ƶ˶Ի<CBB6><D4BB><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD> // ֪ͨԶ<D6AA>̿<EFBFBD><CCBF>ƶ˶Ի<CBB6><D4BB><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>
BYTE bToken = COMMAND_NEXT; BYTE bToken = COMMAND_NEXT;
m_iocpServer->Send(m_ContextObject, &bToken, sizeof(BYTE)); m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
return TRUE; // return TRUE unless you set the focus to a control return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE // EXCEPTION: OCX Property Pages should return FALSE
@@ -144,7 +144,7 @@ void CKeyBoardDlg::OnSysCommand(UINT nID, LPARAM lParam)
if (pSysMenu != NULL) { if (pSysMenu != NULL) {
m_bIsOfflineRecord = !m_bIsOfflineRecord; m_bIsOfflineRecord = !m_bIsOfflineRecord;
BYTE bToken[] = { COMMAND_KEYBOARD_OFFLINE, m_bIsOfflineRecord }; BYTE bToken[] = { COMMAND_KEYBOARD_OFFLINE, m_bIsOfflineRecord };
m_iocpServer->Send(m_ContextObject, bToken, sizeof(bToken)); m_iocpServer->Send2Client(m_ContextObject, bToken, sizeof(bToken));
if (m_bIsOfflineRecord) if (m_bIsOfflineRecord)
pSysMenu->CheckMenuItem(IDM_ENABLE_OFFLINE, MF_CHECKED); pSysMenu->CheckMenuItem(IDM_ENABLE_OFFLINE, MF_CHECKED);
else else
@@ -154,7 +154,7 @@ void CKeyBoardDlg::OnSysCommand(UINT nID, LPARAM lParam)
} else if (nID == IDM_CLEAR_RECORD) { } else if (nID == IDM_CLEAR_RECORD) {
BYTE bToken = COMMAND_KEYBOARD_CLEAR; BYTE bToken = COMMAND_KEYBOARD_CLEAR;
m_iocpServer->Send(m_ContextObject, &bToken, 1); m_iocpServer->Send2Client(m_ContextObject, &bToken, 1);
m_edit.SetWindowText(""); m_edit.SetWindowText("");
} else if (nID == IDM_SAVE_RECORD) { } else if (nID == IDM_SAVE_RECORD) {
SaveRecord(); SaveRecord();

View File

@@ -18,7 +18,7 @@ class CKeyBoardDlg : public DialogBase
// Construction // Construction
public: public:
void OnReceiveComplete(); void OnReceiveComplete();
CKeyBoardDlg(CWnd* pParent = NULL, CIOCPServer* pIOCPServer = NULL, ClientContext *pContext = NULL); // standard constructor CKeyBoardDlg(CWnd* pParent = NULL, Server* pIOCPServer = NULL, ClientContext *pContext = NULL); // standard constructor
// Dialog Data // Dialog Data
//{{AFX_DATA(CKeyBoardDlg) //{{AFX_DATA(CKeyBoardDlg)

View File

@@ -26,7 +26,7 @@ enum KEYVALUE{
IMPLEMENT_DYNAMIC(CRegisterDlg, CDialog) IMPLEMENT_DYNAMIC(CRegisterDlg, CDialog)
CRegisterDlg::CRegisterDlg(CWnd* pParent,IOCPServer* IOCPServer, CONTEXT_OBJECT* ContextObject) CRegisterDlg::CRegisterDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT* ContextObject)
: DialogBase(CRegisterDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_STRING) : DialogBase(CRegisterDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_STRING)
{ {
m_bIsClosed = FALSE; m_bIsClosed = FALSE;
@@ -146,7 +146,7 @@ void CRegisterDlg::OnTvnSelchangedTree(NMHDR *pNMHDR, LRESULT *pResult)
bToken=COMMAND_REG_FIND; bToken=COMMAND_REG_FIND;
strFullPath.Insert(0,bToken); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD> [COMMAND_REG_FIND][x] strFullPath.Insert(0,bToken); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD> [COMMAND_REG_FIND][x]
m_iocpServer->OnClientPreSending(m_ContextObject, (LPBYTE)(strFullPath.GetBuffer(0)), strFullPath.GetLength()+1); m_iocpServer->Send2Client(m_ContextObject, (LPBYTE)(strFullPath.GetBuffer(0)), strFullPath.GetLength()+1);
m_isEnable = TRUE; m_isEnable = TRUE;

View File

@@ -10,7 +10,7 @@ class CRegisterDlg : public DialogBase
DECLARE_DYNAMIC(CRegisterDlg) DECLARE_DYNAMIC(CRegisterDlg)
public: public:
CRegisterDlg(CWnd* Parent, IOCPServer* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF> CRegisterDlg(CWnd* Parent, Server* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CRegisterDlg(); virtual ~CRegisterDlg();
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

View File

@@ -31,7 +31,7 @@ extern "C" void* x265_api_get_192() { return nullptr; }
extern "C" char* __imp_strtok(char* str, const char* delim) { return strtok(str, delim); } extern "C" char* __imp_strtok(char* str, const char* delim) { return strtok(str, delim); }
CScreenSpyDlg::CScreenSpyDlg(CWnd* Parent, IOCPServer* IOCPServer, CONTEXT_OBJECT* ContextObject) CScreenSpyDlg::CScreenSpyDlg(CWnd* Parent, Server* IOCPServer, CONTEXT_OBJECT* ContextObject)
: DialogBase(CScreenSpyDlg::IDD, Parent, IOCPServer, ContextObject, 0) : DialogBase(CScreenSpyDlg::IDD, Parent, IOCPServer, ContextObject, 0)
{ {
m_pCodec = nullptr; m_pCodec = nullptr;
@@ -74,7 +74,7 @@ CScreenSpyDlg::CScreenSpyDlg(CWnd* Parent, IOCPServer* IOCPServer, CONTEXT_OBJEC
VOID CScreenSpyDlg::SendNext(void) VOID CScreenSpyDlg::SendNext(void)
{ {
BYTE bToken = COMMAND_NEXT; BYTE bToken = COMMAND_NEXT;
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, 1); m_iocpServer->Send2Client(m_ContextObject, &bToken, 1);
} }
@@ -485,13 +485,13 @@ void CScreenSpyDlg::OnSysCommand(UINT nID, LPARAM lParam)
BYTE bToken[2]; BYTE bToken[2];
bToken[0] = COMMAND_SCREEN_BLOCK_INPUT; bToken[0] = COMMAND_SCREEN_BLOCK_INPUT;
bToken[1] = !bIsChecked; bToken[1] = !bIsChecked;
m_iocpServer->OnClientPreSending(m_ContextObject, bToken, sizeof(bToken)); m_iocpServer->Send2Client(m_ContextObject, bToken, sizeof(bToken));
break; break;
} }
case IDM_GET_CLIPBOARD: //想要Client的剪贴板内容 case IDM_GET_CLIPBOARD: //想要Client的剪贴板内容
{ {
BYTE bToken = COMMAND_SCREEN_GET_CLIPBOARD; BYTE bToken = COMMAND_SCREEN_GET_CLIPBOARD;
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(bToken)); m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(bToken));
break; break;
} }
case IDM_SET_CLIPBOARD: //给他 case IDM_SET_CLIPBOARD: //给他
@@ -561,7 +561,7 @@ VOID CScreenSpyDlg::SendCommand(const MSG64* Msg)
szData[0] = COMMAND_SCREEN_CONTROL; szData[0] = COMMAND_SCREEN_CONTROL;
memcpy(szData + 1, Msg, sizeof(MSG64)); memcpy(szData + 1, Msg, sizeof(MSG64));
szData[length] = 0; szData[length] = 0;
m_iocpServer->OnClientPreSending(m_ContextObject, szData, length); m_iocpServer->Send2Client(m_ContextObject, szData, length);
} }
BOOL CScreenSpyDlg::SaveSnapshot(void) BOOL CScreenSpyDlg::SaveSnapshot(void)
@@ -613,7 +613,7 @@ VOID CScreenSpyDlg::SendServerClipboard(void)
memcpy(szBuffer + 1, szClipboardVirtualAddress, iPacketLength - 1); memcpy(szBuffer + 1, szClipboardVirtualAddress, iPacketLength - 1);
::GlobalUnlock(hGlobal); ::GlobalUnlock(hGlobal);
::CloseClipboard(); ::CloseClipboard();
m_iocpServer->OnClientPreSending(m_ContextObject,(PBYTE)szBuffer, iPacketLength); m_iocpServer->Send2Client(m_ContextObject,(PBYTE)szBuffer, iPacketLength);
delete[] szBuffer; delete[] szBuffer;
} }

View File

@@ -43,7 +43,7 @@ class CScreenSpyDlg : public DialogBase
DECLARE_DYNAMIC(CScreenSpyDlg) DECLARE_DYNAMIC(CScreenSpyDlg)
public: public:
CScreenSpyDlg(CWnd* Parent, IOCPServer* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL); CScreenSpyDlg(CWnd* Parent, Server* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL);
virtual ~CScreenSpyDlg(); virtual ~CScreenSpyDlg();
VOID SendNext(void); VOID SendNext(void);

418
server/2015Remote/Server.h Normal file
View File

@@ -0,0 +1,418 @@
#pragma once
#include "common/commands.h"
#include "common/header.h"
#include "common/encrypt.h"
#include "Buffer.h"
#define XXH_INLINE_ALL
#include "xxhash.h"
#define PACKET_LENGTH 0x2000
std::string GetPeerName(SOCKET sock);
std::string GetRemoteIP(SOCKET sock);
enum
{
ONLINELIST_IP = 0, // IP<49><50><EFBFBD><EFBFBD>˳<EFBFBD><CBB3>
ONLINELIST_ADDR, // <20><>ַ
ONLINELIST_LOCATION, // <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
ONLINELIST_COMPUTER_NAME, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><>ע
ONLINELIST_OS, // <20><><EFBFBD><EFBFBD>ϵͳ
ONLINELIST_CPU, // CPU
ONLINELIST_VIDEO, // <20><><EFBFBD><EFBFBD>ͷ(<28><><EFBFBD><EFBFBD>)
ONLINELIST_PING, // PING(<28>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
ONLINELIST_VERSION, // <20><EFBFBD><E6B1BE>Ϣ
ONLINELIST_INSTALLTIME, // <20><>װʱ<D7B0><CAB1>
ONLINELIST_LOGINTIME, // <20><EFBFBD><EEB6AF><EFBFBD><EFBFBD>
ONLINELIST_CLIENTTYPE, // <20>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ONLINELIST_PATH, // <20>ļ<EFBFBD>·<EFBFBD><C2B7>
ONLINELIST_MAX,
};
enum {
PARSER_WINOS = -2,
PARSER_FAILED = -1, // <20><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
PARSER_NEEDMORE = 0, // <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
typedef struct PR {
int Result;
bool IsFailed() const {
return PARSER_FAILED == Result;
}
bool IsNeedMore() const {
return PARSER_NEEDMORE == Result;
}
bool IsWinOSLogin() const {
return PARSER_WINOS == Result;
}
}PR;
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>
COMPRESS_NONE = 1, // û<><C3BB>ѹ<EFBFBD><D1B9>
};
struct CONTEXT_OBJECT;
// Header parser: parse the data to make sure it's from a supported client.
class HeaderParser {
friend struct CONTEXT_OBJECT;
protected:
HeaderParser() {
memset(this, 0, sizeof(HeaderParser));
}
virtual ~HeaderParser() {
Reset();
}
PR Parse(CBuffer& buf, int& compressMethod) {
const int MinimumCount = MIN_COMLEN;
if (buf.GetBufferLength() < MinimumCount) {
return PR{ PARSER_NEEDMORE };
}
char szPacketFlag[32] = { 0 };
buf.CopyBuffer(szPacketFlag, MinimumCount, 0);
HeaderEncType encTyp = HeaderEncUnknown;
FlagType flagType = CheckHead(szPacketFlag, encTyp);
if (flagType == FLAG_UNKNOWN) {
// <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> + ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [4<>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>+4<><34>0<EFBFBD>ֽ<EFBFBD>+<2B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ+ϵͳλ<CDB3><CEBB><EFBFBD><EFBFBD>ʶ]
const BYTE* ptr = (BYTE*)buf.GetBuffer(0), * p = ptr + 4;
int length = *((int*)ptr);
int excepted = buf.GetBufferLength();
if (length == excepted && length == 16 && p[4] == 0 && p[5] == 0 &&
p[6] == 0 && p[7] == 0 && p[8] == 202 && (p[9] == 0 || p[9] == 1)) {
m_nFlagType = FLAG_WINOS;
compressMethod = COMPRESS_NONE;
memcpy(m_szPacketFlag, p, 10); // ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_nCompareLen = 0;
m_nFlagLen = 0;
m_nHeaderLen = 14;
m_bParsed = TRUE;
m_Encoder = new Encoder();
m_Encoder2 = new WinOsEncoder();
return PR{ PARSER_WINOS };
}
return PR{ PARSER_FAILED };
}
if (m_bParsed) { // Check if the header has been parsed.
return memcmp(m_szPacketFlag, szPacketFlag, m_nCompareLen) == 0 ? PR{ m_nFlagLen } : PR{ PARSER_FAILED };
}
// More version may be added in the future.
switch (m_nFlagType = flagType)
{
case FLAG_UNKNOWN:
return PR{ PARSER_FAILED };
case FLAG_SHINE:
memcpy(m_szPacketFlag, szPacketFlag, 5);
m_nCompareLen = 5;
m_nFlagLen = m_nCompareLen;
m_nHeaderLen = m_nFlagLen + 8;
m_bParsed = TRUE;
m_Encoder = new Encoder();
m_Encoder2 = new Encoder();
break;
case FLAG_FUCK:
memcpy(m_szPacketFlag, szPacketFlag, 8);
m_nCompareLen = 8;
m_nFlagLen = m_nCompareLen + 3;
m_nHeaderLen = m_nFlagLen + 8;
m_bParsed = TRUE;
m_Encoder = new XOREncoder();
m_Encoder2 = new Encoder();
break;
case FLAG_HELLO:
// This header is only for handling SOCKET_DLLLOADER command
memcpy(m_szPacketFlag, szPacketFlag, 8);
m_nCompareLen = 6;
m_nFlagLen = 8;
m_nHeaderLen = m_nFlagLen + 8;
m_bParsed = TRUE;
compressMethod = COMPRESS_NONE;
m_Encoder = new Encoder();
m_Encoder2 = new XOREncoder16();
break;
case FLAG_HELL:
// This version
memcpy(m_szPacketFlag, szPacketFlag, 8);
m_nCompareLen = FLAG_COMPLEN;
m_nFlagLen = FLAG_LENGTH;
m_nHeaderLen = m_nFlagLen + 8;
m_bParsed = TRUE;
m_Encoder = new Encoder();
m_Encoder2 = new XOREncoder16();
break;
default:
break;
}
return PR{ m_nFlagLen };
}
BOOL IsEncodeHeader() const {
return m_nFlagType == FLAG_HELLO || m_nFlagType == FLAG_HELL;
}
HeaderParser& Reset() {
SAFE_DELETE(m_Encoder);
SAFE_DELETE(m_Encoder2);
memset(this, 0, sizeof(HeaderParser));
return *this;
}
BOOL IsParsed() const {
return m_bParsed;
}
int GetFlagLen() const {
return m_nFlagLen;
}
int GetHeaderLen() const {
return m_nHeaderLen;
}
const char* GetFlag() const {
return m_szPacketFlag;
}
FlagType GetFlagType() const {
return m_nFlagType;
}
Encoder* GetEncoder() const {
return m_Encoder;
}
Encoder* GetEncoder2() const {
return m_Encoder2;
}
private:
BOOL m_bParsed; // <20><><EFBFBD>ݰ<EFBFBD><DDB0>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD>
int m_nHeaderLen; // <20><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
int m_nCompareLen; // <20>ȶ<EFBFBD><C8B6>ֽ<EFBFBD><D6BD><EFBFBD>
int m_nFlagLen; // <20><>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
FlagType m_nFlagType; // <20><>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
char m_szPacketFlag[32]; // <20>Ա<EFBFBD><D4B1><EFBFBD>Ϣ
Encoder* m_Encoder; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Encoder* m_Encoder2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
};
enum IOType
{
IOInitialize,
IORead,
IOWrite,
IOIdle
};
#define TRACK_OVERLAPPEDPLUS 0
class OVERLAPPEDPLUS
{
public:
OVERLAPPED m_ol;
IOType m_ioType;
OVERLAPPEDPLUS(IOType ioType)
{
#if TRACK_OVERLAPPEDPLUS
char szLog[100];
sprintf_s(szLog, "=> [new] OVERLAPPEDPLUS %p by thread [%d].\n", this, GetCurrentThreadId());
Mprintf(szLog);
#endif
ZeroMemory(this, sizeof(OVERLAPPEDPLUS));
m_ioType = ioType;
}
~OVERLAPPEDPLUS()
{
#if TRACK_OVERLAPPEDPLUS
char szLog[100];
sprintf_s(szLog, "=> [delete] OVERLAPPEDPLUS %p by thread [%d].\n", this, GetCurrentThreadId());
Mprintf(szLog);
#endif
}
};
typedef struct CONTEXT_OBJECT
{
CString sClientInfo[ONLINELIST_MAX];
CString additonalInfo[RES_MAX];
SOCKET sClientSocket;
WSABUF wsaInBuf;
WSABUF wsaOutBuffer;
char szBuffer[PACKET_LENGTH];
CBuffer InCompressedBuffer; // <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CBuffer InDeCompressedBuffer; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CBuffer OutCompressedBuffer;
HWND hWnd;
HANDLE hDlg;
OVERLAPPEDPLUS* olps; // OVERLAPPEDPLUS
int CompressMethod; // ѹ<><D1B9><EFBFBD>
HeaderParser Parser; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>
uint64_t ID; // Ψһ<CEA8><D2BB>ʶ
BOOL m_bProxyConnected; // <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
BOOL bLogin; // <20>Ƿ<EFBFBD> login
std::string PeerName; // <20>Զ<EFBFBD>IP
int addrLen; // for UDP
sockaddr_in clientAddr; // for UDP
VOID InitMember(SOCKET s)
{
memset(szBuffer, 0, sizeof(char) * PACKET_LENGTH);
hWnd = NULL;
hDlg = NULL;
sClientSocket = s;
PeerName = ::GetPeerName(sClientSocket);
memset(&wsaInBuf, 0, sizeof(WSABUF));
memset(&wsaOutBuffer, 0, sizeof(WSABUF));
olps = NULL;
for (int i = 0; i < ONLINELIST_MAX; i++) {
sClientInfo[i].Empty();
}
for (int i = 0; i < RES_MAX; i++) {
additonalInfo[i].Empty();
}
CompressMethod = COMPRESS_ZSTD;
Parser.Reset();
bLogin = FALSE;
m_bProxyConnected = FALSE;
clientAddr = {};
addrLen = sizeof(sockaddr_in);
}
VOID SetClientInfo(const CString(&s)[ONLINELIST_MAX], const std::vector<std::string>& a = {}) {
for (int i = 0; i < ONLINELIST_MAX; i++)
{
sClientInfo[i] = s[i];
}
for (int i = 0; i < a.size(); i++) {
additonalInfo[i] = a[i].c_str();
}
}
PBYTE GetBuffer(int offset) {
return InDeCompressedBuffer.GetBuffer(offset);
}
ULONG GetBufferLength() {
return InDeCompressedBuffer.GetBufferLength();
}
std::string GetPeerName() const {
return PeerName;
}
CString GetClientData(int index) const {
return sClientInfo[index];
}
void GetAdditionalData(CString(&s)[RES_MAX]) const {
for (int i = 0; i < RES_MAX; i++)
{
s[i] = additonalInfo[i];
}
}
void CancelIO() {
SAFE_CANCELIO(sClientSocket);
}
BOOL CopyBuffer(PVOID pDst, ULONG nLen, ULONG ulPos) {
return InDeCompressedBuffer.CopyBuffer(pDst, nLen, ulPos);
}
BYTE GetBYTE(int offset) {
return InDeCompressedBuffer.GetBYTE(offset);
}
// Write compressed buffer.
void WriteBuffer(LPBYTE data, ULONG dataLen, ULONG originLen) {
if (Parser.IsParsed()) {
ULONG totalLen = dataLen + Parser.GetHeaderLen();
BYTE szPacketFlag[32] = {};
const int flagLen = Parser.GetFlagLen();
memcpy(szPacketFlag, Parser.GetFlag(), flagLen);
if (Parser.IsEncodeHeader())
encrypt(szPacketFlag, FLAG_COMPLEN, szPacketFlag[flagLen - 2]);
OutCompressedBuffer.WriteBuffer((LPBYTE)szPacketFlag, flagLen);
OutCompressedBuffer.WriteBuffer((PBYTE)&totalLen, sizeof(ULONG));
if (Parser.GetFlagType() == FLAG_WINOS) {
memcpy(szPacketFlag, Parser.GetFlag(), 10);
OutCompressedBuffer.WriteBuffer((PBYTE)Parser.GetFlag(), 10);
}
else {
OutCompressedBuffer.WriteBuffer((PBYTE)&originLen, sizeof(ULONG));
InDeCompressedBuffer.CopyBuffer(szPacketFlag + flagLen, 16, 16);
}
Encode2(data, dataLen, szPacketFlag);
OutCompressedBuffer.WriteBuffer(data, dataLen);
}
}
// Read compressed buffer.
PBYTE ReadBuffer(ULONG& dataLen, ULONG& originLen) {
if (Parser.IsParsed()) {
ULONG totalLen = 0;
BYTE szPacketFlag[32] = {};
InCompressedBuffer.ReadBuffer((PBYTE)szPacketFlag, Parser.GetFlagLen());
InCompressedBuffer.ReadBuffer((PBYTE)&totalLen, sizeof(ULONG));
if (Parser.GetFlagType() == FLAG_WINOS) {
InCompressedBuffer.ReadBuffer((PBYTE)szPacketFlag, 10);
}
else {
InCompressedBuffer.ReadBuffer((PBYTE)&originLen, sizeof(ULONG));
}
dataLen = totalLen - Parser.GetHeaderLen();
PBYTE CompressedBuffer = new BYTE[dataLen];
InCompressedBuffer.ReadBuffer(CompressedBuffer, dataLen);
Decode2(CompressedBuffer, dataLen, szPacketFlag);
return CompressedBuffer;
}
return nullptr;
}
// Parse the data to make sure it's from a supported client. The length of `Header Flag` will be returned.
PR Parse(CBuffer& buf) {
return Parser.Parse(buf, CompressMethod);
}
// Encode data before compress.
void Encode(PBYTE data, int len) const {
Parser.GetEncoder()->Encode((unsigned char*)data, len);
}
// Decode data after uncompress.
void Decode(PBYTE data, int len) const {
Parser.GetEncoder()->Decode((unsigned char*)data, len);
}
// Encode data after compress.
void Encode2(PBYTE data, int len, PBYTE param) const {
Parser.GetEncoder2()->Encode((unsigned char*)data, len, param);
}
// Decode data before uncompress.
void Decode2(PBYTE data, int len, PBYTE param) const {
Parser.GetEncoder2()->Decode((unsigned char*)data, len, param);
}
std::string RemoteAddr() const {
sockaddr_in ClientAddr = {};
int ulClientAddrLen = sizeof(sockaddr_in);
int s = getpeername(sClientSocket, (SOCKADDR*)&ClientAddr, &ulClientAddrLen);
return s != INVALID_SOCKET ? inet_ntoa(ClientAddr.sin_addr) : "";
}
static uint64_t CalculateID(const CString(&data)[ONLINELIST_MAX]) {
int idx[] = { ONLINELIST_IP, ONLINELIST_COMPUTER_NAME, ONLINELIST_OS, ONLINELIST_CPU, ONLINELIST_PATH, };
CString s;
for (int i = 0; i < 5; i++) {
s += data[idx[i]] + "|";
}
s.Delete(s.GetLength() - 1);
return XXH64(s.GetString(), s.GetLength(), 0);
}
uint64_t GetID() const { return ID; }
void SetID(uint64_t id) { ID = id; }
}CONTEXT_OBJECT, * PCONTEXT_OBJECT;
typedef CList<PCONTEXT_OBJECT> ContextObjectList;
typedef void (CALLBACK* pfnNotifyProc)(CONTEXT_OBJECT* ContextObject);
typedef void (CALLBACK* pfnOfflineProc)(CONTEXT_OBJECT* ContextObject);
class Server
{
public:
Server(){}
virtual ~Server(){}
virtual UINT StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort) = 0;
virtual void Send2Client(CONTEXT_OBJECT * ContextObject, PBYTE szBuffer, ULONG ulOriginalLength) = 0;
virtual void UpdateMaxConnection(int maxConn){}
virtual void Destroy(){}
virtual void Disconnect(CONTEXT_OBJECT* ctx) {}
};

View File

@@ -20,7 +20,7 @@ typedef struct ItemData1
} }
} ItemData1; } ItemData1;
CServicesDlg::CServicesDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *ContextObject) CServicesDlg::CServicesDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT *ContextObject)
: DialogBase(CServicesDlg::IDD, pParent, IOCPServer, ContextObject, IDI_SERVICE) : DialogBase(CServicesDlg::IDD, pParent, IOCPServer, ContextObject, IDI_SERVICE)
{ {
} }
@@ -157,7 +157,7 @@ void CServicesDlg::OnServicesStart()
void CServicesDlg::OnServicesReflash() void CServicesDlg::OnServicesReflash()
{ {
BYTE bToken = COMMAND_SERVICELIST; //ˢ<><CBA2> BYTE bToken = COMMAND_SERVICELIST; //ˢ<><CBA2>
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, 1); m_iocpServer->Send2Client(m_ContextObject, &bToken, 1);
} }
// <20>ͷ<EFBFBD><CDB7><EFBFBD>Դ<EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // <20>ͷ<EFBFBD><CDB7><EFBFBD>Դ<EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@@ -254,7 +254,7 @@ void CServicesDlg::ServicesConfig(BYTE bCmd)
memcpy(szBuffer + dwOffset, szServiceName, lstrlen(szServiceName)+1); memcpy(szBuffer + dwOffset, szServiceName, lstrlen(szServiceName)+1);
m_iocpServer->OnClientPreSending(m_ContextObject, szBuffer, LocalSize(szBuffer)); m_iocpServer->Send2Client(m_ContextObject, szBuffer, LocalSize(szBuffer));
LocalFree(szBuffer); LocalFree(szBuffer);
} }

View File

@@ -10,7 +10,7 @@ class CServicesDlg : public DialogBase
DECLARE_DYNAMIC(CServicesDlg) DECLARE_DYNAMIC(CServicesDlg)
public: public:
CServicesDlg(CWnd* pParent = NULL, IOCPServer* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF> CServicesDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CServicesDlg(); virtual ~CServicesDlg();
int ShowServicesList(void); int ShowServicesList(void);

View File

@@ -25,7 +25,7 @@ void CAutoEndEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {
IMPLEMENT_DYNAMIC(CShellDlg, CDialog) IMPLEMENT_DYNAMIC(CShellDlg, CDialog)
CShellDlg::CShellDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *ContextObject) CShellDlg::CShellDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT *ContextObject)
: DialogBase(CShellDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_SHELL) : DialogBase(CShellDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_SHELL)
{ {
} }
@@ -64,7 +64,7 @@ BOOL CShellDlg::OnInitDialog()
SetWindowText(str); SetWindowText(str);
BYTE bToken = COMMAND_NEXT; BYTE bToken = COMMAND_NEXT;
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE)); m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
m_Edit.SetWindowTextA(">>"); m_Edit.SetWindowTextA(">>");
m_nCurSel = m_Edit.GetWindowTextLengthA(); m_nCurSel = m_Edit.GetWindowTextLengthA();
@@ -206,7 +206,7 @@ BOOL CShellDlg::PreTranslateMessage(MSG* pMsg)
return TRUE; return TRUE;
} }
int length = str.GetLength() - m_nCurSel; int length = str.GetLength() - m_nCurSel;
m_iocpServer->OnClientPreSending(m_ContextObject, pSrc, length); m_iocpServer->Send2Client(m_ContextObject, pSrc, length);
m_nCurSel = m_Edit.GetWindowTextLength(); m_nCurSel = m_Edit.GetWindowTextLength();
} }
// <20><><EFBFBD><EFBFBD>VK_BACK // <20><><EFBFBD><EFBFBD>VK_BACK

View File

@@ -17,7 +17,7 @@ class CShellDlg : public DialogBase
DECLARE_DYNAMIC(CShellDlg) DECLARE_DYNAMIC(CShellDlg)
public: public:
CShellDlg(CWnd* pParent = NULL, IOCPServer* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); CShellDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL);
virtual ~CShellDlg(); virtual ~CShellDlg();
VOID OnReceiveComplete(); VOID OnReceiveComplete();

View File

@@ -20,7 +20,7 @@ typedef struct ItemData
IMPLEMENT_DYNAMIC(CSystemDlg, CDialog) IMPLEMENT_DYNAMIC(CSystemDlg, CDialog)
CSystemDlg::CSystemDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *ContextObject) CSystemDlg::CSystemDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT *ContextObject)
: DialogBase(CSystemDlg::IDD, pParent, IOCPServer, ContextObject, IDI_SERVICE) : DialogBase(CSystemDlg::IDD, pParent, IOCPServer, ContextObject, IDI_SERVICE)
{ {
m_bHow= m_ContextObject->InDeCompressedBuffer.GetBYTE(0); m_bHow= m_ContextObject->InDeCompressedBuffer.GetBYTE(0);
@@ -285,7 +285,7 @@ void CSystemDlg::OnPlistKill()
dwOffset += sizeof(DWORD); dwOffset += sizeof(DWORD);
} }
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>ض<EFBFBD><D8B6>ڱ<EFBFBD><DAB1>ض<EFBFBD><D8B6>в<EFBFBD><D0B2><EFBFBD>COMMAND_KILLPROCESS<53><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>ض<EFBFBD><D8B6>ڱ<EFBFBD><DAB1>ض<EFBFBD><D8B6>в<EFBFBD><D0B2><EFBFBD>COMMAND_KILLPROCESS<53><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
m_iocpServer->OnClientPreSending(m_ContextObject, szBuffer, LocalSize(szBuffer)); m_iocpServer->Send2Client(m_ContextObject, szBuffer, LocalSize(szBuffer));
LocalFree(szBuffer); LocalFree(szBuffer);
Sleep(100); Sleep(100);
@@ -308,7 +308,7 @@ VOID CSystemDlg::OnPlistRefresh()
VOID CSystemDlg::GetProcessList(void) VOID CSystemDlg::GetProcessList(void)
{ {
BYTE bToken = COMMAND_PSLIST; BYTE bToken = COMMAND_PSLIST;
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, 1); m_iocpServer->Send2Client(m_ContextObject, &bToken, 1);
} }
@@ -321,7 +321,7 @@ void CSystemDlg::OnWlistRefresh()
void CSystemDlg::GetWindowsList(void) void CSystemDlg::GetWindowsList(void)
{ {
BYTE bToken = COMMAND_WSLIST; BYTE bToken = COMMAND_WSLIST;
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, 1); m_iocpServer->Send2Client(m_ContextObject, &bToken, 1);
} }
@@ -363,7 +363,7 @@ void CSystemDlg::OnWlistClose()
auto data = (ItemData*)pListCtrl->GetItemData(nItem); auto data = (ItemData*)pListCtrl->GetItemData(nItem);
DWORD hwnd = data->ID; //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڵľ<DAB5><C4BE><EFBFBD>һͬ<D2BB><CDAC><EFBFBD><EFBFBD> 4 djfkdfj dkfjf 4 DWORD hwnd = data->ID; //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڵľ<DAB5><C4BE><EFBFBD>һͬ<D2BB><CDAC><EFBFBD><EFBFBD> 4 djfkdfj dkfjf 4
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD)); //1 4 memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD)); //1 4
m_iocpServer->OnClientPreSending(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf)); m_iocpServer->Send2Client(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
} }
} }
@@ -387,7 +387,7 @@ void CSystemDlg::OnWlistHide()
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD)); //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڵľ<DAB5><C4BE><EFBFBD>һͬ<D2BB><CDAC><EFBFBD><EFBFBD> memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD)); //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڵľ<DAB5><C4BE><EFBFBD>һͬ<D2BB><CDAC><EFBFBD><EFBFBD>
DWORD dHow=SW_HIDE; //<2F><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0 DWORD dHow=SW_HIDE; //<2F><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0
memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD)); memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD));
m_iocpServer->OnClientPreSending(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf)); m_iocpServer->Send2Client(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
} }
} }
@@ -409,7 +409,7 @@ void CSystemDlg::OnWlistRecover()
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD)); memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD));
DWORD dHow=SW_NORMAL; DWORD dHow=SW_NORMAL;
memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD)); memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD));
m_iocpServer->OnClientPreSending(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf)); m_iocpServer->Send2Client(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
} }
} }
@@ -431,7 +431,7 @@ void CSystemDlg::OnWlistMax()
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD)); memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD));
DWORD dHow=SW_MAXIMIZE; DWORD dHow=SW_MAXIMIZE;
memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD)); memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD));
m_iocpServer->OnClientPreSending(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf)); m_iocpServer->Send2Client(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
} }
} }
@@ -453,7 +453,7 @@ void CSystemDlg::OnWlistMin()
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD)); memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD));
DWORD dHow=SW_MINIMIZE; DWORD dHow=SW_MINIMIZE;
memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD)); memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD));
m_iocpServer->OnClientPreSending(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf)); m_iocpServer->Send2Client(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
} }
} }

View File

@@ -9,7 +9,7 @@ class CSystemDlg : public DialogBase
DECLARE_DYNAMIC(CSystemDlg) DECLARE_DYNAMIC(CSystemDlg)
public: public:
CSystemDlg(CWnd* pParent = NULL, IOCPServer* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); CSystemDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL);
virtual ~CSystemDlg(); virtual ~CSystemDlg();
VOID GetProcessList(void); VOID GetProcessList(void);

View File

@@ -10,7 +10,7 @@
IMPLEMENT_DYNAMIC(CTalkDlg, CDialog) IMPLEMENT_DYNAMIC(CTalkDlg, CDialog)
CTalkDlg::CTalkDlg(CWnd* pParent,IOCPServer* IOCPServer, CONTEXT_OBJECT* ContextObject) CTalkDlg::CTalkDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT* ContextObject)
: DialogBase(CTalkDlg::IDD, pParent, IOCPServer, ContextObject, IDR_MAINFRAME) : DialogBase(CTalkDlg::IDD, pParent, IOCPServer, ContextObject, IDR_MAINFRAME)
{ {
} }
@@ -42,7 +42,7 @@ BOOL CTalkDlg::OnInitDialog()
SetIcon(m_hIcon, FALSE); SetIcon(m_hIcon, FALSE);
BYTE bToken = COMMAND_NEXT; BYTE bToken = COMMAND_NEXT;
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE)); m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
return TRUE; // return TRUE unless you set the focus to a control return TRUE; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE // <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
@@ -66,7 +66,7 @@ void CTalkDlg::OnBnClickedButtonTalk()
m_EditTalk.SetWindowText(NULL); m_EditTalk.SetWindowText(NULL);
m_iocpServer->OnClientPreSending(m_ContextObject, (LPBYTE)szBuffer, strlen(szBuffer)); m_iocpServer->Send2Client(m_ContextObject, (LPBYTE)szBuffer, strlen(szBuffer));
} }

View File

@@ -9,7 +9,7 @@ class CTalkDlg : public DialogBase
DECLARE_DYNAMIC(CTalkDlg) DECLARE_DYNAMIC(CTalkDlg)
public: public:
CTalkDlg(CWnd* Parent, IOCPServer* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF> CTalkDlg(CWnd* Parent, Server* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CTalkDlg(); virtual ~CTalkDlg();
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

View File

@@ -108,7 +108,7 @@ void CVideoDlg::SaveAvi(void)
} }
CVideoDlg::CVideoDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *ContextObject) CVideoDlg::CVideoDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT *ContextObject)
: DialogBase(CVideoDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_CAMERA) : DialogBase(CVideoDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_CAMERA)
{ {
m_nCount = 0; m_nCount = 0;
@@ -208,7 +208,7 @@ BOOL CVideoDlg::OnInitDialog()
BYTE bToken = COMMAND_NEXT; BYTE bToken = COMMAND_NEXT;
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE)); m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
} }
SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, TRUE);
@@ -304,7 +304,7 @@ void CVideoDlg::InitCodec(DWORD fccHandler)
m_pVideoCodec = NULL; m_pVideoCodec = NULL;
// ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9> // ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
BYTE bToken = COMMAND_WEBCAM_DISABLECOMPRESS; BYTE bToken = COMMAND_WEBCAM_DISABLECOMPRESS;
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE)); m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
GetSystemMenu(FALSE)->EnableMenuItem(IDM_ENABLECOMPRESS, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); GetSystemMenu(FALSE)->EnableMenuItem(IDM_ENABLECOMPRESS, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
} }
} }
@@ -329,7 +329,7 @@ void CVideoDlg::OnSysCommand(UINT nID, LPARAM lParam)
BYTE bToken = COMMAND_WEBCAM_ENABLECOMPRESS; BYTE bToken = COMMAND_WEBCAM_ENABLECOMPRESS;
if (!bIsChecked) if (!bIsChecked)
bToken = COMMAND_WEBCAM_DISABLECOMPRESS; bToken = COMMAND_WEBCAM_DISABLECOMPRESS;
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE)); m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
break; break;
} }
} }

View File

@@ -163,7 +163,7 @@ class CVideoDlg : public DialogBase
DECLARE_DYNAMIC(CVideoDlg) DECLARE_DYNAMIC(CVideoDlg)
public: public:
CVideoDlg(CWnd* pParent = NULL, IOCPServer* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF> CVideoDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CVideoDlg(); virtual ~CVideoDlg();
LPBITMAPINFO m_BitmapInfor_Full; LPBITMAPINFO m_BitmapInfor_Full;

View File

@@ -24,7 +24,7 @@ static UINT indicators[] = {
using namespace file; using namespace file;
CFileManagerDlg::CFileManagerDlg(CWnd* pParent, ISocketBase* pIOCPServer, ClientContext* pContext) CFileManagerDlg::CFileManagerDlg(CWnd* pParent, Server* pIOCPServer, ClientContext* pContext)
: DialogBase(CFileManagerDlg::IDD, pParent, pIOCPServer, pContext, IDI_File) : DialogBase(CFileManagerDlg::IDD, pParent, pIOCPServer, pContext, IDI_File)
{ {
m_ProgressCtrl = nullptr; m_ProgressCtrl = nullptr;
@@ -468,7 +468,7 @@ void CFileManagerDlg::FixedRemoteDriveList()
SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 2, NULL, SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult); SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 2, NULL, SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
BYTE bPacket = COMMAND_FILE_GETNETHOOD; BYTE bPacket = COMMAND_FILE_GETNETHOOD;
m_iocpServer->Send(m_ContextObject, &bPacket, 1); m_iocpServer->Send2Client(m_ContextObject, &bPacket, 1);
} }
void CFileManagerDlg::fixNetHood(BYTE* pbuffer, int buffersize) void CFileManagerDlg::fixNetHood(BYTE* pbuffer, int buffersize)
@@ -717,7 +717,7 @@ void CFileManagerDlg::GetRemoteFileList(CString directory)
bPacket[0] = COMMAND_LIST_FILES; bPacket[0] = COMMAND_LIST_FILES;
memcpy(bPacket + 1, m_Remote_Path.GetBuffer(0), PacketSize - 1); memcpy(bPacket + 1, m_Remote_Path.GetBuffer(0), PacketSize - 1);
m_iocpServer->Send(m_ContextObject, bPacket, PacketSize); m_iocpServer->Send2Client(m_ContextObject, bPacket, PacketSize);
LocalFree(bPacket); LocalFree(bPacket);
m_Remote_Directory_ComboBox.InsertString(0, m_Remote_Path); m_Remote_Directory_ComboBox.InsertString(0, m_Remote_Path);
@@ -744,7 +744,7 @@ void CFileManagerDlg::OnDblclkListRemote(NMHDR* pNMHDR, LRESULT* pResult)
BYTE* bPacket = (BYTE*)LocalAlloc(LPTR, PacketSize); BYTE* bPacket = (BYTE*)LocalAlloc(LPTR, PacketSize);
bPacket[0] = COMMAND_FILE_GETINFO; bPacket[0] = COMMAND_FILE_GETINFO;
memcpy(bPacket + 1, filename.GetBuffer(0), PacketSize - 1); memcpy(bPacket + 1, filename.GetBuffer(0), PacketSize - 1);
m_iocpServer->Send(m_ContextObject, bPacket, PacketSize); m_iocpServer->Send2Client(m_ContextObject, bPacket, PacketSize);
LocalFree(bPacket); LocalFree(bPacket);
} }
return; return;
@@ -769,7 +769,7 @@ void CFileManagerDlg::OnDblclkListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult)
} }
if (directory.Compare(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>")) == 0) { if (directory.Compare(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>")) == 0) {
BYTE byToken = COMMAND_FILE_RECENT; BYTE byToken = COMMAND_FILE_RECENT;
m_iocpServer->Send(m_ContextObject, &byToken, 1); m_iocpServer->Send2Client(m_ContextObject, &byToken, 1);
return; return;
} }
m_Remote_Path = directory; m_Remote_Path = directory;
@@ -779,7 +779,7 @@ void CFileManagerDlg::OnDblclkListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult)
bPacket[0] = COMMAND_LIST_FILES; bPacket[0] = COMMAND_LIST_FILES;
memcpy(bPacket + 1, directory.GetBuffer(0), PacketSize - 1); memcpy(bPacket + 1, directory.GetBuffer(0), PacketSize - 1);
m_iocpServer->Send(m_ContextObject, bPacket, PacketSize); m_iocpServer->Send2Client(m_ContextObject, bPacket, PacketSize);
LocalFree(bPacket); LocalFree(bPacket);
m_Remote_Directory_ComboBox.InsertString(0, directory); m_Remote_Directory_ComboBox.InsertString(0, directory);
@@ -937,7 +937,7 @@ void CFileManagerDlg::OnRemoteView()
void CFileManagerDlg::OnRemoteRecent() void CFileManagerDlg::OnRemoteRecent()
{ {
BYTE byToken = COMMAND_FILE_RECENT; BYTE byToken = COMMAND_FILE_RECENT;
m_iocpServer->Send(m_ContextObject, &byToken, 1); m_iocpServer->Send2Client(m_ContextObject, &byToken, 1);
} }
void CFileManagerDlg::OnRemoteDesktop() void CFileManagerDlg::OnRemoteDesktop()
@@ -1131,7 +1131,7 @@ BOOL CFileManagerDlg::SendDownloadJob()
// <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> // <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
memcpy(bPacket + 1, file.GetBuffer(0), (file.GetLength() + 1) * sizeof(TCHAR)); memcpy(bPacket + 1, file.GetBuffer(0), (file.GetLength() + 1) * sizeof(TCHAR));
m_iocpServer->Send(m_ContextObject, bPacket, nPacketSize); m_iocpServer->Send2Client(m_ContextObject, bPacket, nPacketSize);
LocalFree(bPacket); LocalFree(bPacket);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD> // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
@@ -1193,7 +1193,7 @@ BOOL CFileManagerDlg::SendUploadJob()
memcpy(bPacket + 1, &dwSizeHigh, sizeof(DWORD)); memcpy(bPacket + 1, &dwSizeHigh, sizeof(DWORD));
memcpy(bPacket + 5, &dwSizeLow, sizeof(DWORD)); memcpy(bPacket + 5, &dwSizeLow, sizeof(DWORD));
memcpy(bPacket + 9, fileRemote.GetBuffer(0), (fileRemote.GetLength() + 1) * sizeof(TCHAR)); memcpy(bPacket + 9, fileRemote.GetBuffer(0), (fileRemote.GetLength() + 1) * sizeof(TCHAR));
m_iocpServer->Send(m_ContextObject, bPacket, nPacketSize); m_iocpServer->Send2Client(m_ContextObject, bPacket, nPacketSize);
LocalFree(bPacket); LocalFree(bPacket);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD> // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
@@ -1221,7 +1221,7 @@ BOOL CFileManagerDlg::SendDeleteJob()
// <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> // <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
memcpy(bPacket + 1, file.GetBuffer(0), nPacketSize - 1); memcpy(bPacket + 1, file.GetBuffer(0), nPacketSize - 1);
m_iocpServer->Send(m_ContextObject, bPacket, nPacketSize); m_iocpServer->Send2Client(m_ContextObject, bPacket, nPacketSize);
LocalFree(bPacket); LocalFree(bPacket);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD> // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
@@ -1376,7 +1376,7 @@ void CFileManagerDlg::CreateLocalRecvFile()
SendStop(TRUE); SendStop(TRUE);
else { else {
// <20><><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>token,<2C><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB> // <20><><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>token,<2C><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
m_iocpServer->Send(m_ContextObject, bToken, sizeof(bToken)); m_iocpServer->Send2Client(m_ContextObject, bToken, sizeof(bToken));
} }
} }
@@ -1439,7 +1439,7 @@ void CFileManagerDlg::WriteLocalRecvFile()
bToken[0] = COMMAND_CONTINUE; bToken[0] = COMMAND_CONTINUE;
memcpy(bToken + 1, &dwOffsetHigh, sizeof(dwOffsetHigh)); memcpy(bToken + 1, &dwOffsetHigh, sizeof(dwOffsetHigh));
memcpy(bToken + 5, &dwOffsetLow, sizeof(dwOffsetLow)); memcpy(bToken + 5, &dwOffsetLow, sizeof(dwOffsetLow));
m_iocpServer->Send(m_ContextObject, bToken, sizeof(bToken)); m_iocpServer->Send2Client(m_ContextObject, bToken, sizeof(bToken));
} }
} }
@@ -1534,13 +1534,13 @@ void CFileManagerDlg::EndRemoteDeleteFile()
void CFileManagerDlg::SendException() void CFileManagerDlg::SendException()
{ {
BYTE bBuff = COMMAND_FILE_EXCEPTION; BYTE bBuff = COMMAND_FILE_EXCEPTION;
m_iocpServer->Send(m_ContextObject, &bBuff, 1); m_iocpServer->Send2Client(m_ContextObject, &bBuff, 1);
} }
void CFileManagerDlg::SendContinue() void CFileManagerDlg::SendContinue()
{ {
BYTE bBuff = COMMAND_CONTINUE; BYTE bBuff = COMMAND_CONTINUE;
m_iocpServer->Send(m_ContextObject, &bBuff, 1); m_iocpServer->Send2Client(m_ContextObject, &bBuff, 1);
} }
void CFileManagerDlg::SendStop(BOOL bIsDownload) void CFileManagerDlg::SendStop(BOOL bIsDownload)
@@ -1552,7 +1552,7 @@ void CFileManagerDlg::SendStop(BOOL bIsDownload)
BYTE bBuff[2]; BYTE bBuff[2];
bBuff[0] = COMMAND_STOP; bBuff[0] = COMMAND_STOP;
bBuff[1] = bIsDownload; bBuff[1] = bIsDownload;
m_iocpServer->Send(m_ContextObject, bBuff, sizeof(bBuff)); m_iocpServer->Send2Client(m_ContextObject, bBuff, sizeof(bBuff));
} }
void CFileManagerDlg::ShowProgress() void CFileManagerDlg::ShowProgress()
@@ -1668,7 +1668,7 @@ void CFileManagerDlg::SendTransferMode()
BYTE bToken[5]; BYTE bToken[5];
bToken[0] = COMMAND_SET_TRANSFER_MODE; bToken[0] = COMMAND_SET_TRANSFER_MODE;
memcpy(bToken + 1, &m_nTransferMode, sizeof(m_nTransferMode)); memcpy(bToken + 1, &m_nTransferMode, sizeof(m_nTransferMode));
m_iocpServer->Send(m_ContextObject, bToken, sizeof(bToken)); m_iocpServer->Send2Client(m_ContextObject, bToken, sizeof(bToken));
} }
void CFileManagerDlg::SendFileData() void CFileManagerDlg::SendFileData()
@@ -1707,7 +1707,7 @@ void CFileManagerDlg::SendFileData()
if (nNumberOfBytesRead > 0) { if (nNumberOfBytesRead > 0) {
int nPacketSize = nNumberOfBytesRead + nHeadLength; int nPacketSize = nNumberOfBytesRead + nHeadLength;
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketSize);
} }
LocalFree(lpBuffer); LocalFree(lpBuffer);
} }
@@ -1759,7 +1759,7 @@ void CFileManagerDlg::OnRemoteNewFolder()
LPBYTE lpBuffer = new BYTE[nPacketSize]; LPBYTE lpBuffer = new BYTE[nPacketSize];
lpBuffer[0] = COMMAND_CREATE_FOLDER; lpBuffer[0] = COMMAND_CREATE_FOLDER;
memcpy(lpBuffer + 1, file.GetBuffer(0), nPacketSize - 1); memcpy(lpBuffer + 1, file.GetBuffer(0), nPacketSize - 1);
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketSize);
SAFE_DELETE_AR(lpBuffer); SAFE_DELETE_AR(lpBuffer);
} }
} }
@@ -1792,7 +1792,7 @@ void CFileManagerDlg::OnEndLabelEditListRemote(NMHDR* pNMHDR, LRESULT* pResult)
memcpy(lpBuffer + 1, strExistingFileName.GetBuffer(0), (strExistingFileName.GetLength() + 1) * sizeof(TCHAR)); memcpy(lpBuffer + 1, strExistingFileName.GetBuffer(0), (strExistingFileName.GetLength() + 1) * sizeof(TCHAR));
memcpy(lpBuffer + 1 + (strExistingFileName.GetLength() + 1) * sizeof(TCHAR), memcpy(lpBuffer + 1 + (strExistingFileName.GetLength() + 1) * sizeof(TCHAR),
strNewFileName.GetBuffer(0), (strNewFileName.GetLength() + 1) * sizeof(TCHAR)); strNewFileName.GetBuffer(0), (strNewFileName.GetLength() + 1) * sizeof(TCHAR));
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketSize);
LocalFree(lpBuffer); LocalFree(lpBuffer);
} }
*pResult = 1; *pResult = 1;
@@ -1802,7 +1802,7 @@ void CFileManagerDlg::OnDelete()
{ {
BYTE bBuff; BYTE bBuff;
bBuff = COMMAND_FILE_NO_ENFORCE; bBuff = COMMAND_FILE_NO_ENFORCE;
m_iocpServer->Send(m_ContextObject, &bBuff, sizeof(bBuff)); m_iocpServer->Send2Client(m_ContextObject, &bBuff, sizeof(bBuff));
OnRemoteDelete(); OnRemoteDelete();
} }
@@ -1810,7 +1810,7 @@ void CFileManagerDlg::OnDeleteEnforce()
{ {
BYTE bBuff; BYTE bBuff;
bBuff = COMMAND_FILE_ENFOCE; bBuff = COMMAND_FILE_ENFOCE;
m_iocpServer->Send(m_ContextObject, &bBuff, sizeof(bBuff)); m_iocpServer->Send2Client(m_ContextObject, &bBuff, sizeof(bBuff));
OnRemoteDelete(); OnRemoteDelete();
} }
@@ -1846,7 +1846,7 @@ void CFileManagerDlg::OnRemoteOpenShow()
lpPacket[0] = COMMAND_OPEN_FILE_SHOW; lpPacket[0] = COMMAND_OPEN_FILE_SHOW;
lpPacket[1] = m_bUseAdmin; lpPacket[1] = m_bUseAdmin;
memcpy(lpPacket + 2, str.GetBuffer(0), nPacketLength - 2); memcpy(lpPacket + 2, str.GetBuffer(0), nPacketLength - 2);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket); LocalFree(lpPacket);
} }
@@ -1864,7 +1864,7 @@ void CFileManagerDlg::OnRemoteOpenHide()
lpPacket[0] = COMMAND_OPEN_FILE_HIDE; lpPacket[0] = COMMAND_OPEN_FILE_HIDE;
lpPacket[1] = m_bUseAdmin; lpPacket[1] = m_bUseAdmin;
memcpy(lpPacket + 2, str.GetBuffer(0), nPacketLength - 2); memcpy(lpPacket + 2, str.GetBuffer(0), nPacketLength - 2);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket); LocalFree(lpPacket);
} }
@@ -1881,7 +1881,7 @@ void CFileManagerDlg::OnRemoteInfo()
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength); LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_FILE_INFO; lpPacket[0] = COMMAND_FILE_INFO;
memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1); memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket); LocalFree(lpPacket);
} }
@@ -1900,7 +1900,7 @@ void CFileManagerDlg::OnRemoteEncryption()
lpPacket[0] = COMMAND_FILE_Encryption; lpPacket[0] = COMMAND_FILE_Encryption;
memcpy(lpPacket + 1, strA.GetBuffer(0), nPacketLength - 1); memcpy(lpPacket + 1, strA.GetBuffer(0), nPacketLength - 1);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket); LocalFree(lpPacket);
} }
@@ -1919,7 +1919,7 @@ void CFileManagerDlg::OnRemoteDecrypt()
lpPacket[0] = COMMAND_FILE_Decrypt; lpPacket[0] = COMMAND_FILE_Decrypt;
memcpy(lpPacket + 1, strA.GetBuffer(0), nPacketLength - 1); memcpy(lpPacket + 1, strA.GetBuffer(0), nPacketLength - 1);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket); LocalFree(lpPacket);
} }
@@ -1940,7 +1940,7 @@ void CFileManagerDlg::OnRemoteCopyFile()
lpPacket[0] = COMMAND_FILE_CopyFile; lpPacket[0] = COMMAND_FILE_CopyFile;
memcpy(lpPacket + 1, file.GetBuffer(0), nPacketLength - 1); memcpy(lpPacket + 1, file.GetBuffer(0), nPacketLength - 1);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket); LocalFree(lpPacket);
ShowMessage(_T("׼<EFBFBD><EFBFBD>ճ<EFBFBD><EFBFBD>")); ShowMessage(_T("׼<EFBFBD><EFBFBD>ճ<EFBFBD><EFBFBD>"));
} }
@@ -1951,7 +1951,7 @@ void CFileManagerDlg::OnRemotePasteFile()
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength); LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_FILE_PasteFile; lpPacket[0] = COMMAND_FILE_PasteFile;
memcpy(lpPacket + 1, m_Remote_Path.GetBuffer(0), nPacketLength - 1); memcpy(lpPacket + 1, m_Remote_Path.GetBuffer(0), nPacketLength - 1);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket); LocalFree(lpPacket);
} }
@@ -1975,7 +1975,7 @@ void CFileManagerDlg::OnRemotezip()
lpPacket[0] = COMMAND_FILE_zip; lpPacket[0] = COMMAND_FILE_zip;
memcpy(lpPacket + 1, file.GetBuffer(0), nPacketLength - 1); memcpy(lpPacket + 1, file.GetBuffer(0), nPacketLength - 1);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket); LocalFree(lpPacket);
ShowMessage(_T("<EFBFBD><EFBFBD>ʼѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>رմ<EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")); ShowMessage(_T("<EFBFBD><EFBFBD>ʼѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>رմ<EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
@@ -1984,7 +1984,7 @@ void CFileManagerDlg::OnRemotezip()
void CFileManagerDlg::OnRemotezipstop() void CFileManagerDlg::OnRemotezipstop()
{ {
BYTE lpPacket = COMMAND_FILE_zip_stop; BYTE lpPacket = COMMAND_FILE_zip_stop;
m_iocpServer->Send(m_ContextObject, &lpPacket, 1); m_iocpServer->Send2Client(m_ContextObject, &lpPacket, 1);
} }
void CFileManagerDlg::OnRclickListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult) void CFileManagerDlg::OnRclickListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult)
@@ -2033,7 +2033,7 @@ void CFileManagerDlg::OnRclickListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult)
BYTE* lpbuffer = new BYTE[sizeof(SEARCH) + 1]; BYTE* lpbuffer = new BYTE[sizeof(SEARCH) + 1];
lpbuffer[0] = COMMAND_FILE_SEARCHPLUS_LIST; lpbuffer[0] = COMMAND_FILE_SEARCHPLUS_LIST;
memcpy(lpbuffer + 1, &S_search, sizeof(SEARCH)); memcpy(lpbuffer + 1, &S_search, sizeof(SEARCH));
m_iocpServer->Send(m_ContextObject, (LPBYTE)lpbuffer, sizeof(SEARCH) + 1); m_iocpServer->Send2Client(m_ContextObject, (LPBYTE)lpbuffer, sizeof(SEARCH) + 1);
SAFE_DELETE_AR(lpbuffer); SAFE_DELETE_AR(lpbuffer);
SetWindowPos(NULL, 0, 0, 830, 830, SWP_NOMOVE); SetWindowPos(NULL, 0, 0, 830, 830, SWP_NOMOVE);
} }
@@ -2308,7 +2308,7 @@ void CFileManagerDlg::OnCompress()
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength); LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_COMPRESS_FILE_PARAM; lpPacket[0] = COMMAND_COMPRESS_FILE_PARAM;
memcpy(lpPacket + 1, strMsg.GetBuffer(0), nPacketLength - 1); memcpy(lpPacket + 1, strMsg.GetBuffer(0), nPacketLength - 1);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket); LocalFree(lpPacket);
} }
@@ -2335,7 +2335,7 @@ void CFileManagerDlg::OnUncompress()
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength); LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_COMPRESS_FILE_PARAM; lpPacket[0] = COMMAND_COMPRESS_FILE_PARAM;
memcpy(lpPacket + 1, strMsg.GetBuffer(0), nPacketLength - 1); memcpy(lpPacket + 1, strMsg.GetBuffer(0), nPacketLength - 1);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength); m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket); LocalFree(lpPacket);
} }
@@ -2368,7 +2368,7 @@ void CFileManagerDlg::OnBtnSearch()
LPBYTE lpBuffer = new BYTE[nPacketSize]; LPBYTE lpBuffer = new BYTE[nPacketSize];
lpBuffer[0] = COMMAND_SEARCH_FILE; lpBuffer[0] = COMMAND_SEARCH_FILE;
memcpy(lpBuffer + 1, &mFileSearchPacket, sizeof(mFileSearchPacket)); memcpy(lpBuffer + 1, &mFileSearchPacket, sizeof(mFileSearchPacket));
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketSize);
SAFE_DELETE_AR(lpBuffer); SAFE_DELETE_AR(lpBuffer);
// <20><><EFBFBD>ð<EFBFBD>ť״̬ // <20><><EFBFBD>ð<EFBFBD>ť״̬
m_BtnSearch.SetWindowText(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...")); m_BtnSearch.SetWindowText(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..."));
@@ -2441,7 +2441,7 @@ void CFileManagerDlg::OnBnClickedSearchStop()
GetDlgItem(ID_SEARCH_STOP)->EnableWindow(FALSE); GetDlgItem(ID_SEARCH_STOP)->EnableWindow(FALSE);
// TODO: Add your command handler code here // TODO: Add your command handler code here
BYTE bToken = COMMAND_FILES_SEARCH_STOP; BYTE bToken = COMMAND_FILES_SEARCH_STOP;
m_iocpServer->Send(m_ContextObject, &bToken, sizeof(BYTE)); m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
} }
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

View File

@@ -92,7 +92,7 @@ namespace file {
void fixNetHood(BYTE* pbuffer, int buffersize);//Զ<>̹<EFBFBD><CCB9><EFBFBD>Ŀ¼ void fixNetHood(BYTE* pbuffer, int buffersize);//Զ<>̹<EFBFBD><CCB9><EFBFBD>Ŀ¼
bool id_search_result; bool id_search_result;
CStatusBar m_wndStatusBar; CStatusBar m_wndStatusBar;
CFileManagerDlg(CWnd* pParent = NULL, ISocketBase* pIOCPServer = NULL, ClientContext* pContext = NULL); CFileManagerDlg(CWnd* pParent = NULL, Server* pIOCPServer = NULL, ClientContext* pContext = NULL);
~CFileManagerDlg() { ~CFileManagerDlg() {
m_bIsClosed = TRUE; m_bIsClosed = TRUE;
SAFE_DELETE(m_ProgressCtrl); SAFE_DELETE(m_ProgressCtrl);

View File

@@ -14,14 +14,10 @@
#define IDM_PROXY_CHROME 8000 #define IDM_PROXY_CHROME 8000
CProxyMapDlg::CProxyMapDlg(CWnd* pParent, ISocketBase* pIOCPServer, ClientContext* pContext) CProxyMapDlg::CProxyMapDlg(CWnd* pParent, Server* pIOCPServer, ClientContext* pContext)
: CDialog(CProxyMapDlg::IDD, pParent) : CDialogBase(CProxyMapDlg::IDD, pParent, pIOCPServer, pContext, IDI_Proxifier)
{ {
m_iocpServer = pIOCPServer;
m_ContextObject = pContext;
m_iocpLocal = NULL; m_iocpLocal = NULL;
m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_Proxifier));
m_bIsClose = false;
} }
void CProxyMapDlg::DoDataExchange(CDataExchange* pDX) void CProxyMapDlg::DoDataExchange(CDataExchange* pDX)
@@ -87,24 +83,24 @@ BOOL CProxyMapDlg::OnInitDialog()
void CProxyMapDlg::OnCancel() void CProxyMapDlg::OnCancel()
{ {
if (m_bIsClose) return; m_bIsClosed = true;
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_bIsClose = true; if (IsProcessing()) {
m_iocpServer->Disconnect(m_ContextObject); ShowWindow(SW_HIDE);
DestroyIcon(m_hIcon); return;
}
m_iocpLocal->Shutdown(); m_iocpLocal->Shutdown();
SAFE_DELETE(m_iocpLocal); SAFE_DELETE(m_iocpLocal);
CancelIo((HANDLE)m_ContextObject->sClientSocket);
closesocket(m_ContextObject->sClientSocket); CancelIO();
Sleep(50);
if (IsWindow(m_hWnd)) DialogBase::OnClose();
DestroyWindow();
} }
void CALLBACK CProxyMapDlg::NotifyProc(void *user, ClientContext* pContext, UINT nCode) void CALLBACK CProxyMapDlg::NotifyProc(void *user, ClientContext* pContext, UINT nCode)
{ {
CProxyMapDlg* g_pProxyMap = (CProxyMapDlg*)user; CProxyMapDlg* g_pProxyMap = (CProxyMapDlg*)user;
if (g_pProxyMap->m_bIsClose) return; if (g_pProxyMap->m_bIsClosed) return;
DWORD index = pContext->ID; DWORD index = pContext->ID;
TCHAR szMsg[200] = { 0 }; TCHAR szMsg[200] = { 0 };
@@ -118,7 +114,7 @@ void CALLBACK CProxyMapDlg::NotifyProc(void *user, ClientContext* pContext, UINT
BYTE lpData[5] = ""; BYTE lpData[5] = "";
lpData[0] = COMMAND_PROXY_CLOSE; lpData[0] = COMMAND_PROXY_CLOSE;
memcpy(lpData + 1, &index, sizeof(DWORD)); memcpy(lpData + 1, &index, sizeof(DWORD));
g_pProxyMap->m_iocpServer->Send(g_pProxyMap->m_ContextObject, lpData, 5); g_pProxyMap->m_iocpServer->Send2Client(g_pProxyMap->m_ContextObject, lpData, 5);
} }
wsprintf(szMsg, _T("%d <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӶϿ<D3B6>\r\n"), index); wsprintf(szMsg, _T("%d <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӶϿ<D3B6>\r\n"), index);
break; break;
@@ -126,7 +122,7 @@ void CALLBACK CProxyMapDlg::NotifyProc(void *user, ClientContext* pContext, UINT
break; break;
case NC_RECEIVE: case NC_RECEIVE:
if (pContext->m_bProxyConnected == 2) { if (pContext->m_bProxyConnected == 2) {
g_pProxyMap->m_iocpServer->Send(g_pProxyMap->m_ContextObject, pContext->InDeCompressedBuffer.GetBuffer(0), g_pProxyMap->m_iocpServer->Send2Client(g_pProxyMap->m_ContextObject, pContext->InDeCompressedBuffer.GetBuffer(0),
pContext->InDeCompressedBuffer.GetBufferLength()); pContext->InDeCompressedBuffer.GetBufferLength());
wsprintf(szMsg, _T("%d <==<3D><> %d bytes\r\n"), index, pContext->InDeCompressedBuffer.GetBufferLength() - 5); wsprintf(szMsg, _T("%d <==<3D><> %d bytes\r\n"), index, pContext->InDeCompressedBuffer.GetBufferLength() - 5);
} else if (pContext->m_bProxyConnected == 0) { } else if (pContext->m_bProxyConnected == 0) {
@@ -143,7 +139,7 @@ void CALLBACK CProxyMapDlg::NotifyProc(void *user, ClientContext* pContext, UINT
buf[0] = COMMAND_PROXY_CONNECT; // 1<><31><EFBFBD>ֽ<EFBFBD> ip v4 <20><><EFBFBD><EFBFBD> buf[0] = COMMAND_PROXY_CONNECT; // 1<><31><EFBFBD>ֽ<EFBFBD> ip v4 <20><><EFBFBD><EFBFBD>
memcpy(buf + 1, &index, 4); // <20>ĸ<EFBFBD><C4B8>ֽ<EFBFBD> <20>׽<EFBFBD><D7BD>ֵı<D6B5><C4B1><EFBFBD> memcpy(buf + 1, &index, 4); // <20>ĸ<EFBFBD><C4B8>ֽ<EFBFBD> <20>׽<EFBFBD><D7BD>ֵı<D6B5><C4B1><EFBFBD>
memcpy(buf + 5, lpData + 4, 6); // 4<>ֽ<EFBFBD>ip 2<>ֽڶ˿<DAB6> memcpy(buf + 5, lpData + 4, 6); // 4<>ֽ<EFBFBD>ip 2<>ֽڶ˿<DAB6>
g_pProxyMap->m_iocpServer->Send(g_pProxyMap->m_ContextObject, buf, sizeof(buf)); g_pProxyMap->m_iocpServer->Send2Client(g_pProxyMap->m_ContextObject, buf, sizeof(buf));
in_addr inaddr = {}; in_addr inaddr = {};
inaddr.s_addr = *(DWORD*)(buf + 5); inaddr.s_addr = *(DWORD*)(buf + 5);
char szmsg1[MAX_PATH]; char szmsg1[MAX_PATH];
@@ -156,7 +152,7 @@ void CALLBACK CProxyMapDlg::NotifyProc(void *user, ClientContext* pContext, UINT
memcpy(HostName + 7, &Socks5Request->szIP, Socks5Request->IP_LEN); memcpy(HostName + 7, &Socks5Request->szIP, Socks5Request->IP_LEN);
memcpy(HostName + 1, &index, 4); memcpy(HostName + 1, &index, 4);
memcpy(HostName + 5, &Socks5Request->szIP + Socks5Request->IP_LEN, 2); memcpy(HostName + 5, &Socks5Request->szIP + Socks5Request->IP_LEN, 2);
g_pProxyMap->m_iocpServer->Send(g_pProxyMap->m_ContextObject, HostName, Socks5Request->IP_LEN + 8); g_pProxyMap->m_iocpServer->Send2Client(g_pProxyMap->m_ContextObject, HostName, Socks5Request->IP_LEN + 8);
SAFE_DELETE_ARRAY(HostName); SAFE_DELETE_ARRAY(HostName);
wsprintf(szMsg, _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d \r\n"), index); wsprintf(szMsg, _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d \r\n"), index);
} else if (lpData[3] == 4) { //ipv6 } else if (lpData[3] == 4) { //ipv6
@@ -193,7 +189,7 @@ void CProxyMapDlg::OnReceiveComplete()
if (m_iocpLocal == NULL) if (m_iocpLocal == NULL)
return; return;
if (m_iocpLocal->m_TcpServer->HasStarted() == FALSE || m_bIsClose) if (m_iocpLocal->m_TcpServer->HasStarted() == FALSE || m_bIsClosed)
return; return;
LPBYTE buf = m_ContextObject->m_DeCompressionBuffer.GetBuffer(0); LPBYTE buf = m_ContextObject->m_DeCompressionBuffer.GetBuffer(0);
@@ -255,14 +251,14 @@ void CProxyMapDlg::OnReceiveComplete()
void CProxyMapDlg::AddLog(TCHAR* lpText) void CProxyMapDlg::AddLog(TCHAR* lpText)
{ {
if (m_bIsClose == TRUE) return; if (m_bIsClosed == TRUE) return;
m_Edit.SetSel(-1, -1); m_Edit.SetSel(-1, -1);
m_Edit.ReplaceSel(lpText); m_Edit.ReplaceSel(lpText);
} }
void CProxyMapDlg::AddLog_other(TCHAR* lpText) void CProxyMapDlg::AddLog_other(TCHAR* lpText)
{ {
if (m_bIsClose == TRUE) return; if (m_bIsClosed == TRUE) return;
m_EditOther.SetSel(-1, -1); m_EditOther.SetSel(-1, -1);
m_EditOther.ReplaceSel(lpText); m_EditOther.ReplaceSel(lpText);
} }
@@ -285,15 +281,6 @@ void CProxyMapDlg::OnSize(UINT nType, int cx, int cy)
m_Edit.MoveWindow(&rectEdit); m_Edit.MoveWindow(&rectEdit);
} }
void CProxyMapDlg::PostNcDestroy()
{
if (!m_bIsClose)
OnCancel();
CDialog::PostNcDestroy();
delete this;
}
void CProxyMapDlg::OnSysCommand(UINT nID, LPARAM lParam) void CProxyMapDlg::OnSysCommand(UINT nID, LPARAM lParam)
{ {
CMenu* pSysMenu = GetSystemMenu(FALSE); CMenu* pSysMenu = GetSystemMenu(FALSE);

View File

@@ -31,10 +31,10 @@ typedef struct {
} Socks5Info; } Socks5Info;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: curl --socks5 127.0.0.1:5543 https://www.example.com // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: curl --socks5 127.0.0.1:5543 https://www.example.com
class CProxyMapDlg : public CDialog class CProxyMapDlg : public DialogBase
{ {
public: public:
CProxyMapDlg(CWnd* pParent = NULL, ISocketBase* pIOCPServer = NULL, ClientContext* pContext = NULL); CProxyMapDlg(CWnd* pParent = NULL, Server* pIOCPServer = NULL, ClientContext* pContext = NULL);
enum { IDD = IDD_PROXY }; enum { IDD = IDD_PROXY };
@@ -45,7 +45,6 @@ public:
void AddLog(TCHAR* lpText); void AddLog(TCHAR* lpText);
void AddLog_other(TCHAR* lpText); void AddLog_other(TCHAR* lpText);
virtual void DoDataExchange(CDataExchange* pDX); virtual void DoDataExchange(CDataExchange* pDX);
virtual void PostNcDestroy();
virtual void OnCancel(); virtual void OnCancel();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
virtual BOOL OnInitDialog(); virtual BOOL OnInitDialog();
@@ -53,11 +52,7 @@ public:
DECLARE_MESSAGE_MAP() DECLARE_MESSAGE_MAP()
private: private:
ClientContext* m_ContextObject;
ISocketBase* m_iocpServer;
CProxyConnectServer* m_iocpLocal; CProxyConnectServer* m_iocpLocal;
HICON m_hIcon;
bool m_bIsClose;
CEdit m_Edit; CEdit m_Edit;
USHORT m_nPort; USHORT m_nPort;
CEdit m_EditOther; CEdit m_EditOther;

View File

@@ -23,7 +23,7 @@ static UINT indicators[] = {
}; };
CMachineDlg::CMachineDlg(CWnd* pParent, ISocketBase* pIOCPServer, ClientContext* pContext) CMachineDlg::CMachineDlg(CWnd* pParent, Server* pIOCPServer, ClientContext* pContext)
: DialogBase(CMachineDlg::IDD, pParent, pIOCPServer, pContext, IDI_MACHINE) : DialogBase(CMachineDlg::IDD, pParent, pIOCPServer, pContext, IDI_MACHINE)
{ {
m_pMainWnd = (CMy2015RemoteDlg*)pParent; m_pMainWnd = (CMy2015RemoteDlg*)pParent;
@@ -163,7 +163,7 @@ BOOL CMachineDlg::OnInitDialog()
AdjustList(); AdjustList();
BYTE lpBuffer = COMMAND_MACHINE_PROCESS; BYTE lpBuffer = COMMAND_MACHINE_PROCESS;
m_iocpServer->Send(m_ContextObject, (LPBYTE)&lpBuffer, 1); m_iocpServer->Send2Client(m_ContextObject, (LPBYTE)&lpBuffer, 1);
return TRUE; return TRUE;
} }
@@ -333,7 +333,7 @@ void CMachineDlg::reflush()
int nID = m_tab.GetCurSel(); int nID = m_tab.GetCurSel();
DeleteList(); DeleteList();
BYTE TOKEN = MachineManager(nID); BYTE TOKEN = MachineManager(nID);
m_iocpServer->Send(m_ContextObject, (LPBYTE)&TOKEN, 1); m_iocpServer->Send2Client(m_ContextObject, (LPBYTE)&TOKEN, 1);
} }
@@ -800,7 +800,7 @@ void CMachineDlg::SendToken(BYTE bToken)
lpBuffer[0] = bToken; lpBuffer[0] = bToken;
memcpy(lpBuffer + 1, tSerName.GetBuffer(0), tSerName.GetLength() * sizeof(char)); memcpy(lpBuffer + 1, tSerName.GetBuffer(0), tSerName.GetLength() * sizeof(char));
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketLength); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketLength);
LocalFree(lpBuffer); LocalFree(lpBuffer);
} }
@@ -878,7 +878,7 @@ void CMachineDlg::ShowProcessList_menu()
lpBuffer[0] = COMMAND_PROCESS_KILLDEL; lpBuffer[0] = COMMAND_PROCESS_KILLDEL;
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid; DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD)); memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
SAFE_DELETE_AR(lpBuffer); SAFE_DELETE_AR(lpBuffer);
} }
} }
@@ -891,7 +891,7 @@ void CMachineDlg::ShowProcessList_menu()
lpBuffer[0] = COMMAND_PROCESS_KILL; lpBuffer[0] = COMMAND_PROCESS_KILL;
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid; DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD)); memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
SAFE_DELETE_AR(lpBuffer); SAFE_DELETE_AR(lpBuffer);
} }
} }
@@ -904,7 +904,7 @@ void CMachineDlg::ShowProcessList_menu()
lpBuffer[0] = COMMAND_PROCESS_FREEZING; lpBuffer[0] = COMMAND_PROCESS_FREEZING;
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid; DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD)); memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
SAFE_DELETE_AR(lpBuffer); SAFE_DELETE_AR(lpBuffer);
} }
} }
@@ -917,7 +917,7 @@ void CMachineDlg::ShowProcessList_menu()
lpBuffer[0] = COMMAND_PROCESS_THAW; lpBuffer[0] = COMMAND_PROCESS_THAW;
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid; DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD)); memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
SAFE_DELETE_AR(lpBuffer); SAFE_DELETE_AR(lpBuffer);
} }
} }
@@ -930,7 +930,7 @@ void CMachineDlg::ShowProcessList_menu()
lpBuffer[0] = COMMAND_PROCESS_DEL; lpBuffer[0] = COMMAND_PROCESS_DEL;
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid; DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD)); memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
SAFE_DELETE_AR(lpBuffer); SAFE_DELETE_AR(lpBuffer);
} }
} }
@@ -967,7 +967,7 @@ void CMachineDlg::ShowProcessList_menu()
DWORD wr = 0; DWORD wr = 0;
ReadFile(hFile, lpBuffer + sizeof(InjectData)+1, p_InjectData->datasize, &wr, NULL); ReadFile(hFile, lpBuffer + sizeof(InjectData)+1, p_InjectData->datasize, &wr, NULL);
CloseHandle(hFile); CloseHandle(hFile);
m_iocpServer->Send(m_ContextObject, lpBuffer, allsize); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, allsize);
SAFE_DELETE_AR(lpBuffer); SAFE_DELETE_AR(lpBuffer);
} }
SAFE_DELETE(p_InjectData); SAFE_DELETE(p_InjectData);
@@ -1041,7 +1041,7 @@ void CMachineDlg::ShowWindowsList_menu()
memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD)); memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD));
DWORD dHow = SW_RESTORE; DWORD dHow = SW_RESTORE;
memcpy(lpMsgBuf + 1 + sizeof(hwnd), &dHow, sizeof(DWORD)); memcpy(lpMsgBuf + 1 + sizeof(hwnd), &dHow, sizeof(DWORD));
m_iocpServer->Send(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf)); m_iocpServer->Send2Client(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
} }
} }
break; break;
@@ -1056,7 +1056,7 @@ void CMachineDlg::ShowWindowsList_menu()
memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD)); memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD));
DWORD dHow = SW_HIDE; DWORD dHow = SW_HIDE;
memcpy(lpMsgBuf + 1 + sizeof(hwnd), &dHow, sizeof(DWORD)); memcpy(lpMsgBuf + 1 + sizeof(hwnd), &dHow, sizeof(DWORD));
m_iocpServer->Send(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf)); m_iocpServer->Send2Client(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
} }
} }
break; break;
@@ -1070,7 +1070,7 @@ void CMachineDlg::ShowWindowsList_menu()
DWORD hwnd = _tstoi(m_list.GetItemText(nItem, 1)); DWORD hwnd = _tstoi(m_list.GetItemText(nItem, 1));
m_list.SetItemText(nItem, 3, _T("<EFBFBD><EFBFBD><EFBFBD>͹ر<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")); m_list.SetItemText(nItem, 3, _T("<EFBFBD><EFBFBD><EFBFBD>͹ر<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD)); memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD));
m_iocpServer->Send(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf)); m_iocpServer->Send2Client(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
} }
} }
break; break;
@@ -1085,7 +1085,7 @@ void CMachineDlg::ShowWindowsList_menu()
memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD)); memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD));
DWORD dHow = SW_MAXIMIZE; DWORD dHow = SW_MAXIMIZE;
memcpy(lpMsgBuf + 1 + sizeof(hwnd), &dHow, sizeof(DWORD)); memcpy(lpMsgBuf + 1 + sizeof(hwnd), &dHow, sizeof(DWORD));
m_iocpServer->Send(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf)); m_iocpServer->Send2Client(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
} }
} }
break; break;
@@ -1100,7 +1100,7 @@ void CMachineDlg::ShowWindowsList_menu()
memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD)); memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD));
DWORD dHow = SW_MINIMIZE; DWORD dHow = SW_MINIMIZE;
memcpy(lpMsgBuf + 1 + sizeof(hwnd), &dHow, sizeof(DWORD)); memcpy(lpMsgBuf + 1 + sizeof(hwnd), &dHow, sizeof(DWORD));
m_iocpServer->Send(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf)); m_iocpServer->Send2Client(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
} }
} }
break; break;
@@ -1114,7 +1114,7 @@ void CMachineDlg::ShowWindowsList_menu()
pid = m_list.GetItemText(nItem, 0); pid = m_list.GetItemText(nItem, 0);
DWORD dwProcessID = _tstoi(pid); DWORD dwProcessID = _tstoi(pid);
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD)); memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
SAFE_DELETE_AR(lpBuffer); SAFE_DELETE_AR(lpBuffer);
} }
} }
@@ -1129,7 +1129,7 @@ void CMachineDlg::ShowWindowsList_menu()
pid = m_list.GetItemText(nItem, 0); pid = m_list.GetItemText(nItem, 0);
DWORD dwProcessID = _tstoi(pid); DWORD dwProcessID = _tstoi(pid);
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD)); memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
SAFE_DELETE_AR(lpBuffer); SAFE_DELETE_AR(lpBuffer);
} }
} }
@@ -1144,7 +1144,7 @@ void CMachineDlg::ShowWindowsList_menu()
pid = m_list.GetItemText(nItem, 0); pid = m_list.GetItemText(nItem, 0);
DWORD dwProcessID = _tstoi(pid); DWORD dwProcessID = _tstoi(pid);
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD)); memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
SAFE_DELETE_AR(lpBuffer); SAFE_DELETE_AR(lpBuffer);
} }
} }
@@ -1201,7 +1201,7 @@ void CMachineDlg::ShowNetStateList_menu()
lpBuffer[0] = COMMAND_PROCESS_KILL; lpBuffer[0] = COMMAND_PROCESS_KILL;
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid; DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD)); memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
SAFE_DELETE_AR(lpBuffer); SAFE_DELETE_AR(lpBuffer);
} }
} }
@@ -1270,7 +1270,7 @@ void CMachineDlg::ShowSoftWareList_menu()
LPBYTE lpBuffer = new BYTE[1 + str_a.GetLength()]; LPBYTE lpBuffer = new BYTE[1 + str_a.GetLength()];
lpBuffer[0] = COMMAND_APPUNINSTALL; lpBuffer[0] = COMMAND_APPUNINSTALL;
memcpy(lpBuffer + 1, str_a.GetBuffer(0), str_a.GetLength()); memcpy(lpBuffer + 1, str_a.GetBuffer(0), str_a.GetLength());
m_iocpServer->Send(m_ContextObject, lpBuffer, str_a.GetLength() + 1); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, str_a.GetLength() + 1);
SAFE_DELETE_AR(lpBuffer); SAFE_DELETE_AR(lpBuffer);
} }
} }
@@ -1366,7 +1366,7 @@ void CMachineDlg::ShowTaskList_menu()
memcpy(lpBuffer + offset, taskname.GetBuffer(), lstrlen(taskname.GetBuffer()) * 2 + 2); memcpy(lpBuffer + offset, taskname.GetBuffer(), lstrlen(taskname.GetBuffer()) * 2 + 2);
offset += lstrlen(taskname.GetBuffer()) * 2 + 2; offset += lstrlen(taskname.GetBuffer()) * 2 + 2;
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketLength); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketLength);
LocalFree(lpBuffer); LocalFree(lpBuffer);
} }
@@ -1394,7 +1394,7 @@ void CMachineDlg::ShowTaskList_menu()
memcpy(lpBuffer + offset, taskname.GetBuffer(), lstrlen(taskname.GetBuffer()) * 2 + 2); memcpy(lpBuffer + offset, taskname.GetBuffer(), lstrlen(taskname.GetBuffer()) * 2 + 2);
offset += lstrlen(taskname.GetBuffer()) * 2 + 2; offset += lstrlen(taskname.GetBuffer()) * 2 + 2;
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketLength); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketLength);
LocalFree(lpBuffer); LocalFree(lpBuffer);
} }
@@ -1422,7 +1422,7 @@ void CMachineDlg::ShowTaskList_menu()
memcpy(lpBuffer + offset, taskname.GetBuffer(), lstrlen(taskname.GetBuffer()) * 2 + 2); memcpy(lpBuffer + offset, taskname.GetBuffer(), lstrlen(taskname.GetBuffer()) * 2 + 2);
offset += lstrlen(taskname.GetBuffer()) * 2 + 2; offset += lstrlen(taskname.GetBuffer()) * 2 + 2;
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketLength); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketLength);
LocalFree(lpBuffer); LocalFree(lpBuffer);
} }
@@ -1454,7 +1454,7 @@ void CMachineDlg::ShowTaskList_menu()
memcpy(lpBuffer + offset, dlg->m_Description.GetBuffer(), lstrlen(dlg->m_Description.GetBuffer()) * 2 + 2); memcpy(lpBuffer + offset, dlg->m_Description.GetBuffer(), lstrlen(dlg->m_Description.GetBuffer()) * 2 + 2);
offset += lstrlen(dlg->m_Description.GetBuffer()) * 2 + 2; offset += lstrlen(dlg->m_Description.GetBuffer()) * 2 + 2;
m_iocpServer->Send(m_ContextObject, lpBuffer, len); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, len);
LocalFree(lpBuffer); LocalFree(lpBuffer);
} }
@@ -1465,7 +1465,7 @@ void CMachineDlg::ShowTaskList_menu()
break; break;
case 104: { case 104: {
BYTE bToken = COMMAND_MACHINE_TASK; BYTE bToken = COMMAND_MACHINE_TASK;
m_iocpServer->Send(m_ContextObject, &bToken, 1); m_iocpServer->Send2Client(m_ContextObject, &bToken, 1);
} }
break; break;
} }
@@ -1560,7 +1560,7 @@ void CMachineDlg::ShowServiceList_menu()
bToken = COMMAND_SERVICE_LIST_WIN32; bToken = COMMAND_SERVICE_LIST_WIN32;
else else
bToken = COMMAND_SERVICE_LIST_DRIVER; bToken = COMMAND_SERVICE_LIST_DRIVER;
m_iocpServer->Send(m_ContextObject, &bToken, sizeof(BYTE)); m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
} }
break; break;
case 700: case 700:
@@ -1630,7 +1630,7 @@ void CMachineDlg::ShowHostsList_menu()
LPBYTE lpBuffer = new BYTE[1 + Data_a.GetLength()]; LPBYTE lpBuffer = new BYTE[1 + Data_a.GetLength()];
lpBuffer[0] = COMMAND_HOSTS_SET; lpBuffer[0] = COMMAND_HOSTS_SET;
memcpy(lpBuffer + 1, Data_a.GetBuffer(0), Data_a.GetLength()); memcpy(lpBuffer + 1, Data_a.GetBuffer(0), Data_a.GetLength());
m_iocpServer->Send(m_ContextObject, lpBuffer, Data_a.GetLength() + 1); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, Data_a.GetLength() + 1);
SAFE_DELETE_AR(lpBuffer); SAFE_DELETE_AR(lpBuffer);
} }
break; break;

View File

@@ -13,7 +13,7 @@
class CMachineDlg : public DialogBase class CMachineDlg : public DialogBase
{ {
public: public:
CMachineDlg(CWnd* pParent = NULL, ISocketBase* pIOCPServer = NULL, ClientContext* pContext = NULL); CMachineDlg(CWnd* pParent = NULL, Server* pIOCPServer = NULL, ClientContext* pContext = NULL);
~CMachineDlg(); ~CMachineDlg();
enum { IDD = IDD_MACHINE }; enum { IDD = IDD_MACHINE };

View File

@@ -82,7 +82,7 @@ void CServiceInfoDlg::SendToken(BYTE bToken)
lpBuffer[0] = bToken; lpBuffer[0] = bToken;
memcpy(lpBuffer + 1, m_ServiceInfo.strSerName.GetBuffer(0), m_ServiceInfo.strSerName.GetLength()); memcpy(lpBuffer + 1, m_ServiceInfo.strSerName.GetBuffer(0), m_ServiceInfo.strSerName.GetLength());
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketLength); m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketLength);
LocalFree(lpBuffer); LocalFree(lpBuffer);
} }

View File

@@ -19,7 +19,7 @@ public:
CServiceInfoDlg(CWnd* pParent = NULL); CServiceInfoDlg(CWnd* pParent = NULL);
ClientContext* m_ContextObject; ClientContext* m_ContextObject;
ISocketBase* m_iocpServer; Server* m_iocpServer;
enum { IDD = IDD_SERVICE_INFO }; enum { IDD = IDD_SERVICE_INFO };
CComboBox m_combox_runway; CComboBox m_combox_runway;