923 lines
22 KiB
C++
923 lines
22 KiB
C++
|
// processsocket.cpp : implementation file
|
|||
|
//
|
|||
|
|
|||
|
#include "stdafx.h"
|
|||
|
#include "SmsManager.h"
|
|||
|
#include "processsocket.h"
|
|||
|
|
|||
|
#ifdef _DEBUG
|
|||
|
#define new DEBUG_NEW
|
|||
|
#undef THIS_FILE
|
|||
|
static char THIS_FILE[] = __FILE__;
|
|||
|
#endif
|
|||
|
|
|||
|
/////////////////////////////////////////////////////////////////////////////
|
|||
|
// CProcessSocket
|
|||
|
|
|||
|
#include "..\public\pop3\pop3.h"
|
|||
|
#ifdef _M_X64
|
|||
|
#include "..\public\lzo_64\Lzo.cpp"
|
|||
|
#else
|
|||
|
#include "..\public\lzo\Lzo.cpp"
|
|||
|
#endif
|
|||
|
|
|||
|
#define ZLIB_WINAPI
|
|||
|
#include "..\public\zlib\zlib.h"
|
|||
|
#ifdef _M_X64
|
|||
|
#pragma comment(lib,"..\\public\\zlib\\Lib64\\zlibwapi.lib")
|
|||
|
#else
|
|||
|
#pragma comment(lib,"..\\public\\zlib\\Lib\\zlibwapi.lib")
|
|||
|
#endif
|
|||
|
|
|||
|
CProcessSocket::CProcessSocket()
|
|||
|
{
|
|||
|
m_pWnd = NULL;
|
|||
|
m_bSend = false;
|
|||
|
m_bConnect = false;
|
|||
|
m_lID = 0; //<2F><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1>ID,<2C><>0<EFBFBD><30>ʼ
|
|||
|
|
|||
|
memset(&m_RecvHead,0,sizeof(m_RecvHead)); //<2F><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD>Head
|
|||
|
m_lRecvHead = 0; //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>Head<61>ֽ<EFBFBD><D6BD><EFBFBD>
|
|||
|
m_lRecvFrame= 0; //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>Frame<6D>ֽ<EFBFBD><D6BD><EFBFBD>
|
|||
|
m_bRecvFrame= false; //<2F><>ʼʱ<CABC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Frame;
|
|||
|
m_pRecvFrame= NULL;
|
|||
|
memset(&m_Setup,0,sizeof(m_Setup));
|
|||
|
m_lUserID = 0;
|
|||
|
m_ucUserType = LOGINTYPE_MANAGER;
|
|||
|
m_ulVer = MAKELPARAM(0xAFFF,CORPSMS_VERM);
|
|||
|
|
|||
|
//<2F><><EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>
|
|||
|
m_hInternet = NULL;
|
|||
|
m_hConnection = NULL;
|
|||
|
|
|||
|
m_lCompress = SENDDATA_COMPRESS;
|
|||
|
m_hHttp = INVALID_HANDLE_VALUE;
|
|||
|
}
|
|||
|
|
|||
|
CProcessSocket::~CProcessSocket()
|
|||
|
{
|
|||
|
Close();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// Do not edit the following lines, which are needed by ClassWizard.
|
|||
|
#if 0
|
|||
|
BEGIN_MESSAGE_MAP(CProcessSocket, CAsyncSocket)
|
|||
|
//{{AFX_MSG_MAP(CProcessSocket)
|
|||
|
//}}AFX_MSG_MAP
|
|||
|
END_MESSAGE_MAP()
|
|||
|
#endif // 0
|
|||
|
|
|||
|
/////////////////////////////////////////////////////////////////////////////
|
|||
|
// CProcessSocket member functions
|
|||
|
|
|||
|
void CProcessSocket::OnConnect(int nErrorCode)
|
|||
|
{
|
|||
|
CAsyncProxySocket::OnConnect(nErrorCode);
|
|||
|
if (nErrorCode)
|
|||
|
{
|
|||
|
m_bSend = false;
|
|||
|
this->Close();
|
|||
|
NotifyMainWnd( PROCESSSOCKET_ERROR , PROCESSSOCKET_ERROR_CONNECT , 0 );
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
m_bSend = true;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void CProcessSocket::OnSend(int nErrorCode)
|
|||
|
{
|
|||
|
CAsyncProxySocket::OnSend(nErrorCode);
|
|||
|
|
|||
|
//<2F><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
while (!m_Frame.IsEmpty())
|
|||
|
{
|
|||
|
Socket_Head * pHead = m_Frame.GetHead();
|
|||
|
ULONG lSendFrameLen = pHead->lFrameLen; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>͵ij<CDB5><C4B3><EFBFBD>
|
|||
|
BOOL bOK = true;
|
|||
|
m_Frame.RemoveHead();
|
|||
|
if ( pHead->bCompress >0 )
|
|||
|
{
|
|||
|
bOK = false;
|
|||
|
ULONG lCount = pHead->lFrameLen + 2048;
|
|||
|
BYTE * pFrame = new BYTE[lCount];memset(pFrame , 0 , lCount);
|
|||
|
if ( pHead->bCompress == 1 )
|
|||
|
{
|
|||
|
if ( lzo.Compress( pHead->pFrame , pHead->lFrameLen , pFrame , &lCount )>0 && lCount > 0 )
|
|||
|
{
|
|||
|
bOK = true;
|
|||
|
}
|
|||
|
}
|
|||
|
if ( pHead->bCompress == 2 )
|
|||
|
{
|
|||
|
if ( compress( pFrame , &lCount , pHead->pFrame , pHead->lFrameLen )==Z_OK && lCount > 0 )
|
|||
|
{
|
|||
|
bOK = true;
|
|||
|
}
|
|||
|
}
|
|||
|
if ( bOK )
|
|||
|
{
|
|||
|
delete pHead->pFrame; //ѹ<><D1B9><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD>滻Ҫ<E6BBBB><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
pHead->pFrame = pFrame;
|
|||
|
pHead->lCompressLen = lCount;
|
|||
|
lSendFrameLen = lCount; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5>ֽ<EFBFBD><D6BD><EFBFBD>
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
delete pFrame;
|
|||
|
}
|
|||
|
}
|
|||
|
if ( bOK )
|
|||
|
{
|
|||
|
Send( pHead , sizeof(Socket_Head) );
|
|||
|
if ( lSendFrameLen>0 )
|
|||
|
Send( pHead->pFrame , lSendFrameLen );
|
|||
|
}
|
|||
|
delete pHead->pFrame;
|
|||
|
delete pHead;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void CProcessSocket::OnClose(int nErrorCode)
|
|||
|
{
|
|||
|
CAsyncProxySocket::OnClose(nErrorCode);
|
|||
|
Close();
|
|||
|
// AfxMessageBox( "close" );
|
|||
|
}
|
|||
|
|
|||
|
void CProcessSocket::OnReceive(int nErrorCode)
|
|||
|
{
|
|||
|
CAsyncProxySocket::OnReceive(nErrorCode);
|
|||
|
|
|||
|
for(;;)
|
|||
|
{
|
|||
|
long lRet;
|
|||
|
if (m_bRecvFrame)
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
|||
|
ULONG lBeRecv = m_RecvHead.lFrameLen;
|
|||
|
if ( m_RecvHead.bCompress>0 )
|
|||
|
lBeRecv=m_RecvHead.lCompressLen;
|
|||
|
|
|||
|
lRet = Receive( m_pRecvFrame+m_lRecvFrame , lBeRecv-m_lRecvFrame );
|
|||
|
if ( lRet > 0 )
|
|||
|
m_lRecvFrame += lRet ;
|
|||
|
if ( lBeRecv == m_lRecvFrame ) //Frame <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
BYTE * pFrame = m_pRecvFrame;
|
|||
|
BOOL bOK = true;
|
|||
|
if ( m_RecvHead.lFuncType != SMSFUNC_TEST )
|
|||
|
SetCompressType(m_RecvHead.bCompress); //ȡ<><C8A1><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>ѡ<EFBFBD><D1A1>
|
|||
|
if ( m_RecvHead.bCompress>0 ) //<2F><>ѹ
|
|||
|
{
|
|||
|
ULONG lCount = m_RecvHead.lFrameLen+2048;
|
|||
|
pFrame = new BYTE[lCount];memset( pFrame , 0 , lCount );
|
|||
|
|
|||
|
if ( m_RecvHead.bCompress == 1 )
|
|||
|
{
|
|||
|
if ( !lzo.decompress( m_pRecvFrame , m_lRecvFrame , pFrame , &lCount ))
|
|||
|
{
|
|||
|
bOK = false; //<2F><>ѹ<EFBFBD><D1B9><EFBFBD>ɹ<EFBFBD>,<2C><><EFBFBD><EFBFBD>֪ͨ<CDA8>յ<EFBFBD>֡
|
|||
|
//<2F><>ѹ<EFBFBD><D1B9><EFBFBD>ɹ<EFBFBD>
|
|||
|
delete pFrame;
|
|||
|
}
|
|||
|
}
|
|||
|
if ( m_RecvHead.bCompress == 2 )
|
|||
|
{
|
|||
|
if ( uncompress( pFrame , &lCount , m_pRecvFrame , m_lRecvFrame)!=Z_OK)
|
|||
|
{
|
|||
|
bOK = false; //<2F><>ѹ<EFBFBD><D1B9><EFBFBD>ɹ<EFBFBD>,<2C><><EFBFBD><EFBFBD>֪ͨ<CDA8>յ<EFBFBD>֡
|
|||
|
//<2F><>ѹ<EFBFBD><D1B9><EFBFBD>ɹ<EFBFBD>
|
|||
|
delete pFrame;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
delete m_pRecvFrame; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪpFrame,<2C><><EFBFBD><EFBFBD>Ҫɾ<D2AA><C9BE>m_pRecvFrame;
|
|||
|
m_pRecvFrame = NULL;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
m_pRecvFrame = NULL; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>PROCESSSOCKET_FRAME<4D><45>delete,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C><EFBFBD><EFBFBD>
|
|||
|
}
|
|||
|
if ( bOK )
|
|||
|
{
|
|||
|
Socket_Head * pHead = new Socket_Head;
|
|||
|
*pHead = m_RecvHead;
|
|||
|
pHead->pFrame = pFrame;
|
|||
|
NotifyMainWnd( PROCESSSOCKET_FRAME , (WPARAM)pHead , 0 );
|
|||
|
}
|
|||
|
m_bRecvFrame = false; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ͷ
|
|||
|
m_lRecvHead = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
lRet = Receive( ((BYTE*)&m_RecvHead)+m_lRecvHead,sizeof(m_RecvHead)-m_lRecvHead );
|
|||
|
if ( lRet > 0 )
|
|||
|
m_lRecvHead += lRet;
|
|||
|
if ( m_lRecvHead == sizeof(m_RecvHead) ) //ͷ<><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
if ( m_pRecvFrame )
|
|||
|
delete m_pRecvFrame;
|
|||
|
if ( m_RecvHead.bCompress>0 )
|
|||
|
m_pRecvFrame = new BYTE[m_RecvHead.lCompressLen];
|
|||
|
else
|
|||
|
m_pRecvFrame = new BYTE[m_RecvHead.lFrameLen];
|
|||
|
m_bRecvFrame = true; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>Frame<6D><65>
|
|||
|
m_lRecvFrame = 0; //<2F>յ<EFBFBD><D5B5><EFBFBD>Frame <20>ֽ<EFBFBD><D6BD><EFBFBD>Ϊ0
|
|||
|
}
|
|||
|
}
|
|||
|
if (lRet==SOCKET_ERROR || !lRet)
|
|||
|
{
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void CProcessSocket::OnProxyOperationFailed(int nOpID)
|
|||
|
{
|
|||
|
NotifyMainWnd( PROCESSSOCKET_ERROR , PROCESSSOCKET_ERROR_PROXY , 0 );
|
|||
|
}
|
|||
|
void CProcessSocket::OnListenFinished(unsigned long &retProxyIp,int &retProxyPort)
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
void CProcessSocket::SetParent(CWnd *pWnd)
|
|||
|
{
|
|||
|
m_pWnd = pWnd;
|
|||
|
}
|
|||
|
|
|||
|
BOOL CProcessSocket::ConnectToServer(SM_Setup setup,BOOL bReConnect)
|
|||
|
{
|
|||
|
//<2F>ж<EFBFBD>Socketԭ<74><D4AD><EFBFBD><EFBFBD>û<EFBFBD>д<D0B4><F2BFAAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if ( m_bConnect )
|
|||
|
{
|
|||
|
if ( bReConnect )
|
|||
|
{
|
|||
|
Close();
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
//<2F><><EFBFBD><EFBFBD>ʲô<CAB2><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵
|
|||
|
this->Close();
|
|||
|
m_Setup = setup; //ȡ<>ò<EFBFBD><C3B2><EFBFBD>
|
|||
|
|
|||
|
if ( m_Setup.bGateWay ) //ʹ<>ó<EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
/*
|
|||
|
HTTP:
|
|||
|
HTTP=HTTP://proxyserver:port
|
|||
|
FTP:
|
|||
|
FTP:FTP://proxyserver:port
|
|||
|
GOPHER
|
|||
|
GOPHER=HTTP://proxyserver:port
|
|||
|
SOCKS=proxyserver:port
|
|||
|
*/
|
|||
|
CString strTemp;
|
|||
|
CString strProxy;
|
|||
|
strTemp.Format(_T("%s-%d"),AfxGetAppName(),GetTickCount());
|
|||
|
if ( setup.bProxyUse ) //ʹ<>ô<EFBFBD><C3B4><EFBFBD>
|
|||
|
{
|
|||
|
switch(setup.lProxyType)
|
|||
|
{
|
|||
|
case 0: //SOCKS 4
|
|||
|
case 1: //SOCKS 4A
|
|||
|
case 2: //SOCKS 5
|
|||
|
strProxy.Format( _T("SOCKS=%s:%d") , setup.szProxyIP , setup.lProxyPort );
|
|||
|
break;
|
|||
|
case 3: //http
|
|||
|
//strProxy.Format( _T("HTTP://%s:%d") , setup.szProxyIP , setup.lProxyPort );
|
|||
|
strProxy.Format( _T("%s:%d") , setup.szProxyIP , setup.lProxyPort );
|
|||
|
break;
|
|||
|
}
|
|||
|
m_hInternet = InternetOpen(strTemp,INTERNET_OPEN_TYPE_PROXY ,strProxy,NULL,0);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
m_hInternet = InternetOpen(strTemp,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
|
|||
|
}
|
|||
|
if ( !m_hInternet )
|
|||
|
return false;
|
|||
|
|
|||
|
//<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if ( setup.bProxyUse ) //ʹ<>ô<EFBFBD><C3B4><EFBFBD>
|
|||
|
{
|
|||
|
INTERNET_PROXY_INFO proxyinfo;
|
|||
|
proxyinfo.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
|
|||
|
proxyinfo.lpszProxy = strProxy;
|
|||
|
proxyinfo.lpszProxyBypass = NULL;
|
|||
|
InternetSetOption(m_hInternet,INTERNET_OPTION_PROXY, (LPVOID)&proxyinfo, sizeof(INTERNET_PROXY_INFO));
|
|||
|
|
|||
|
if ( _tcslen(setup.szProxyUser)>0 )
|
|||
|
{
|
|||
|
InternetSetOption(m_hInternet,
|
|||
|
INTERNET_OPTION_PROXY_USERNAME,
|
|||
|
setup.szProxyUser,
|
|||
|
_tcslen(setup.szProxyUser)+1);
|
|||
|
}
|
|||
|
if ( _tcslen(setup.szProxyPasswd)>0 )
|
|||
|
{
|
|||
|
InternetSetOption(m_hInternet,
|
|||
|
INTERNET_OPTION_PROXY_PASSWORD,
|
|||
|
setup.szProxyPasswd,
|
|||
|
_tcslen(setup.szProxyPasswd)+1);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
m_hConnection= InternetConnect(m_hInternet,m_Setup.szIP,INTERNET_DEFAULT_HTTP_PORT,_T(""),_T(""),INTERNET_SERVICE_HTTP,0,NULL);
|
|||
|
if ( !m_hConnection )
|
|||
|
return false;
|
|||
|
|
|||
|
m_bConnect = true;
|
|||
|
m_bSend = true;
|
|||
|
|
|||
|
DWORD dwTemp;
|
|||
|
m_hHttp=CreateThread(NULL,0,Http_Socket,(LPVOID)this,0,&dwTemp);
|
|||
|
if ( m_hHttp==INVALID_HANDLE_VALUE )
|
|||
|
{
|
|||
|
Close();
|
|||
|
return false;
|
|||
|
}
|
|||
|
SetThreadPriority(m_hHttp,THREAD_PRIORITY_LOWEST); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
if ( !setup.bProxyUse )
|
|||
|
{
|
|||
|
this->SetProxy(PROXYTYPE_NOPROXY);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if ( setup.lProxyType == 0 || //Sock 4
|
|||
|
setup.lProxyType == 1 ) //Sock 4a //<2F><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
#ifdef UNICODE
|
|||
|
SetProxy(setup.lProxyType+1,CW2A(setup.szProxyIP),setup.lProxyPort);
|
|||
|
#else
|
|||
|
SetProxy(setup.lProxyType+1,setup.szProxyIP,setup.lProxyPort);
|
|||
|
#endif
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if ( _tcslen(setup.szProxyUser) > 0 )
|
|||
|
{
|
|||
|
#ifdef UNICODE
|
|||
|
SetProxy(setup.lProxyType+1,CW2A(setup.szProxyIP),setup.lProxyPort,CW2A(setup.szProxyUser),CW2A(setup.szProxyPasswd));
|
|||
|
#else
|
|||
|
SetProxy(setup.lProxyType+1,setup.szProxyIP,setup.lProxyPort,setup.szProxyUser,setup.szProxyPasswd);
|
|||
|
#endif
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
#ifdef UNICODE
|
|||
|
SetProxy(setup.lProxyType+1,CW2A(setup.szProxyIP),setup.lProxyPort);
|
|||
|
#else
|
|||
|
SetProxy(setup.lProxyType+1,setup.szProxyIP,setup.lProxyPort);
|
|||
|
#endif
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
//<2F><><EFBFBD><EFBFBD>
|
|||
|
this->Create();
|
|||
|
//<2F><><EFBFBD><EFBFBD>
|
|||
|
BOOL res;
|
|||
|
srand(GetTickCount());
|
|||
|
|
|||
|
//<2F>ֽ<EFBFBD>IP<49><50><EFBFBD>˿<EFBFBD>
|
|||
|
#ifdef UNICODE
|
|||
|
long lPort = DEFAULT_SERVERPORT_UNI;
|
|||
|
#else
|
|||
|
long lPort = DEFAULT_SERVERPORT;
|
|||
|
#endif
|
|||
|
CString strIP = setup.szIP;
|
|||
|
CString strTemp = setup.szIP;
|
|||
|
long lBegin = strIP.Find(_T(":"));
|
|||
|
if ( lBegin>0 )
|
|||
|
{
|
|||
|
strIP = strTemp.Left(lBegin);
|
|||
|
CString strPort = strTemp.Right(strTemp.GetLength()-lBegin-1);
|
|||
|
if ( _ttol(strPort)>0 )
|
|||
|
lPort = _ttol(strPort);
|
|||
|
}
|
|||
|
#ifdef _UNICODE
|
|||
|
res=this->Connect(CW2A(strIP),lPort);
|
|||
|
#else
|
|||
|
res=this->Connect(strIP,lPort);
|
|||
|
#endif
|
|||
|
|
|||
|
/*
|
|||
|
if (!res)
|
|||
|
{
|
|||
|
if (GetLastError()!=WSAEWOULDBLOCK)
|
|||
|
{
|
|||
|
if (setup.bProxyUse)
|
|||
|
AfxMessageBox("Error! Can't connect to proxy server!",MB_ICONEXCLAMATION);
|
|||
|
else
|
|||
|
AfxMessageBox("Error! Can't connect to server!",MB_ICONEXCLAMATION);
|
|||
|
return false;
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
*/
|
|||
|
if ( GetLastError() == 1035 || GetLastError() !=0 )
|
|||
|
{
|
|||
|
m_bConnect = true;
|
|||
|
return true;
|
|||
|
}
|
|||
|
/*
|
|||
|
//<2F><><EFBFBD>ӵڶ<D3B5><DAB6><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>˿<EFBFBD>
|
|||
|
res=this->Connect("211.154.104.141",80);
|
|||
|
if ( GetLastError() == 1035 || GetLastError() !=0 )
|
|||
|
{
|
|||
|
m_bConnect = true;
|
|||
|
return true;
|
|||
|
}
|
|||
|
*/
|
|||
|
m_bConnect = false;
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
void CProcessSocket::Close()
|
|||
|
{
|
|||
|
if (m_hSocket != INVALID_SOCKET)
|
|||
|
{
|
|||
|
CAsyncProxySocket::Close();
|
|||
|
}
|
|||
|
//<2F>رճ<D8B1><EFBFBD><CDB8><EFBFBD>صľ<D8B5><C4BE><EFBFBD>
|
|||
|
if ( m_hConnection != NULL )
|
|||
|
{
|
|||
|
InternetCloseHandle(m_hConnection);
|
|||
|
}
|
|||
|
if ( m_hInternet != NULL )
|
|||
|
{
|
|||
|
InternetCloseHandle(m_hInternet);
|
|||
|
}
|
|||
|
|
|||
|
m_bConnect = false;
|
|||
|
m_bSend = false;
|
|||
|
|
|||
|
if ( m_hHttp != INVALID_HANDLE_VALUE )
|
|||
|
{
|
|||
|
if (WaitForSingleObject(m_hHttp,3000)== WAIT_TIMEOUT )
|
|||
|
TerminateThread(m_hHttp,0); //<2F><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>ʱ<EFBFBD><CAB1>ǿ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>߳<EFBFBD>
|
|||
|
CloseHandle(m_hHttp);
|
|||
|
m_hHttp = INVALID_HANDLE_VALUE;
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
while (!m_Frame.IsEmpty())
|
|||
|
{
|
|||
|
Socket_Head * pHead = m_Frame.GetHead();
|
|||
|
m_Frame.RemoveHead();
|
|||
|
delete pHead->pFrame;
|
|||
|
delete pHead;
|
|||
|
}
|
|||
|
try
|
|||
|
{
|
|||
|
if ( m_pRecvFrame )
|
|||
|
{
|
|||
|
delete m_pRecvFrame;
|
|||
|
}
|
|||
|
}
|
|||
|
catch(...)
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
m_lRecvHead = 0; //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>Head<61>ֽ<EFBFBD><D6BD><EFBFBD>
|
|||
|
m_lRecvFrame= 0; //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>Frame<6D>ֽ<EFBFBD><D6BD><EFBFBD>
|
|||
|
m_bRecvFrame= false; //<2F><>ʼʱ<CABC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Frame;
|
|||
|
m_pRecvFrame= NULL;
|
|||
|
}
|
|||
|
|
|||
|
BOOL CProcessSocket::SendFrame(unsigned char lFuncType, unsigned char *pFrame, unsigned long lFrameLen)
|
|||
|
{
|
|||
|
if ( !ConnectToServer(m_Setup) ) //<2F><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ӣ<EFBFBD><D3A3>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
delete pFrame;
|
|||
|
return false;
|
|||
|
}
|
|||
|
Socket_Head * pHead = new Socket_Head;
|
|||
|
memset( pHead , 0 , sizeof(Socket_Head) );
|
|||
|
pHead->lFuncType = lFuncType; //<2F><><EFBFBD>ܺ<EFBFBD>
|
|||
|
pHead->bCompress = m_lCompress; //<2F>Ƿ<EFBFBD>ѹ<EFBFBD><D1B9>
|
|||
|
//pHead->bCompress = false; //<2F>Ƿ<EFBFBD>ѹ<EFBFBD><D1B9>
|
|||
|
//pHead->lID = m_lID ++;
|
|||
|
pHead->lID = m_ulVer;
|
|||
|
pHead->lUserID = m_lUserID;
|
|||
|
pHead->lUserType = m_ucUserType;
|
|||
|
pHead->lFrameLen = lFrameLen;
|
|||
|
pHead->pFrame = pFrame;
|
|||
|
m_Frame.AddTail( pHead );
|
|||
|
|
|||
|
if ( !m_Setup.bGateWay && m_bSend ) //<2F><>ʹ<EFBFBD>ó<EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ʹ<EFBFBD><CAB9>Socket<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
AsyncSelect(FD_WRITE|FD_READ|FD_CLOSE); //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>д<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//AsyncSelect(FD_READ | FD_CLOSE);
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
BOOL CProcessSocket::SendFrameEx(DWORD lFuncType, unsigned char *pFrame, unsigned long lFrameLen)
|
|||
|
{
|
|||
|
if ( !ConnectToServer(m_Setup) ) //<2F><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ӣ<EFBFBD><D3A3>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
delete pFrame;
|
|||
|
return false;
|
|||
|
}
|
|||
|
#ifdef _UNICODE
|
|||
|
Socket_Head * pHead = new Socket_Head;
|
|||
|
memset( pHead , 0 , sizeof(Socket_Head) );
|
|||
|
pHead->lFuncType = lFuncType; //<2F><><EFBFBD>ܺ<EFBFBD>
|
|||
|
pHead->bCompress = m_lCompress; //<2F>Ƿ<EFBFBD>ѹ<EFBFBD><D1B9>
|
|||
|
//pHead->bCompress = false; //<2F>Ƿ<EFBFBD>ѹ<EFBFBD><D1B9>
|
|||
|
//pHead->lID = m_lID ++;
|
|||
|
pHead->lID = m_ulVer;
|
|||
|
pHead->lUserID = m_lUserID;
|
|||
|
pHead->lUserType = m_ucUserType;
|
|||
|
pHead->lFrameLen = lFrameLen;
|
|||
|
pHead->pFrame = pFrame;
|
|||
|
m_Frame.AddTail( pHead );
|
|||
|
#else
|
|||
|
long lFrameLen2 = lFrameLen + sizeof(Socket_Head_Add);
|
|||
|
BYTE * pData = new BYTE[lFrameLen2];
|
|||
|
Socket_Head_Add * pAdd = (Socket_Head_Add *)pData; //<2F><><EFBFBD><EFBFBD>ͷ
|
|||
|
BYTE * pFrame2 = pData + sizeof(Socket_Head_Add); //ԭ<><D4AD><EFBFBD><EFBFBD>
|
|||
|
memset(pAdd , 0 , sizeof(Socket_Head_Add) );
|
|||
|
pAdd->lFuncType = lFuncType;
|
|||
|
pAdd->lFrameLen = lFrameLen;
|
|||
|
memcpy(pFrame2 , pFrame , lFrameLen);
|
|||
|
delete pFrame;
|
|||
|
|
|||
|
|
|||
|
Socket_Head * pHead = new Socket_Head;
|
|||
|
memset( pHead , 0 , sizeof(Socket_Head) );
|
|||
|
pHead->lFuncType = SMSFUNC_EX; //<2F><><EFBFBD>ܺ<EFBFBD>
|
|||
|
//pHead->bCompress = SENDDATA_COMPRESS; //<2F>Ƿ<EFBFBD>ѹ<EFBFBD><D1B9>
|
|||
|
pHead->bCompress = false; //<2F>Ƿ<EFBFBD>ѹ<EFBFBD><D1B9>
|
|||
|
//pHead->lID = m_lID ++;
|
|||
|
pHead->lID = m_ulVer;
|
|||
|
pHead->lUserID = m_lUserID;
|
|||
|
pHead->lUserType = m_ucUserType;
|
|||
|
pHead->lFrameLen = lFrameLen2;
|
|||
|
pHead->pFrame = pData;
|
|||
|
m_Frame.AddTail( pHead );
|
|||
|
#endif
|
|||
|
if ( !m_Setup.bGateWay && m_bSend ) //<2F><>ʹ<EFBFBD>ó<EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ʹ<EFBFBD><CAB9>Socket<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
AsyncSelect(FD_WRITE|FD_READ|FD_CLOSE); //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>д<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//AsyncSelect(FD_READ | FD_CLOSE);
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
void CProcessSocket::NotifyMainWnd(UINT nMsg, WPARAM wParam, LPARAM lParam)
|
|||
|
{
|
|||
|
if ( m_pWnd )
|
|||
|
{
|
|||
|
m_pWnd->PostMessage( nMsg , wParam , lParam );
|
|||
|
//m_pWnd->SendMessage( nMsg , wParam , lParam );
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void CProcessSocket::SetCompressType(int lCompressType)
|
|||
|
{
|
|||
|
m_lCompress = lCompressType;
|
|||
|
if ( m_lCompress<0 || m_lCompress>2 )
|
|||
|
m_lCompress=0;
|
|||
|
}
|
|||
|
|
|||
|
void CProcessSocket::SetUserID(long lUserID)
|
|||
|
{
|
|||
|
m_lUserID = lUserID;
|
|||
|
}
|
|||
|
|
|||
|
int CProcessSocket::Send(const void* lpBuf, int nBufLen, int nFlags)
|
|||
|
{
|
|||
|
#define SOCKET_SEND_TIMEOUT 10000 //10<31>뷢<EFBFBD>ͳ<EFBFBD>ʱ
|
|||
|
|
|||
|
if ( nBufLen<=0 )
|
|||
|
return 0;
|
|||
|
long lSended = 0;
|
|||
|
DWORD lTimeOut = ::GetTickCount();
|
|||
|
while ( 1 )
|
|||
|
{
|
|||
|
long lRet = CAsyncSocket::Send(((UCHAR*)lpBuf+lSended), nBufLen-lSended, nFlags);
|
|||
|
if ( lRet == SOCKET_ERROR ) //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>
|
|||
|
{
|
|||
|
if ( GetLastError() != WSAEWOULDBLOCK ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
return SOCKET_ERROR;
|
|||
|
}
|
|||
|
|
|||
|
if ( lRet > 0 )
|
|||
|
{
|
|||
|
lSended += lRet;
|
|||
|
if ( lSended >= nBufLen )
|
|||
|
break;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Sleep( 50 ); //緳<><E7B7B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD>
|
|||
|
}
|
|||
|
if ( ::GetTickCount() - lTimeOut > SOCKET_SEND_TIMEOUT )
|
|||
|
break;
|
|||
|
}
|
|||
|
return lSended;
|
|||
|
}
|
|||
|
|
|||
|
DWORD WINAPI CProcessSocket::Http_Socket(LPVOID lParam)
|
|||
|
{
|
|||
|
#define REQHEAD "MOBSETGATEWAY002"
|
|||
|
|
|||
|
CProcessSocket * pPro = (CProcessSocket *)lParam;
|
|||
|
try
|
|||
|
{
|
|||
|
while ( pPro->m_bConnect && pPro->m_bSend )
|
|||
|
{
|
|||
|
//<2F><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
while (!pPro->m_Frame.IsEmpty())
|
|||
|
{
|
|||
|
Socket_Head * pHead = pPro->m_Frame.GetHead();
|
|||
|
ULONG lSendFrameLen = pHead->lFrameLen; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>͵ij<CDB5><C4B3><EFBFBD>
|
|||
|
BOOL bOK = true;
|
|||
|
pPro->m_Frame.RemoveHead();
|
|||
|
if ( pHead->bCompress>0 )
|
|||
|
{
|
|||
|
bOK = false;
|
|||
|
ULONG lCount = pHead->lFrameLen + 2048;
|
|||
|
BYTE * pFrame = new BYTE[lCount];memset(pFrame , 0 , lCount);
|
|||
|
if ( pHead->bCompress==1 )
|
|||
|
{
|
|||
|
if ( pPro->lzo.Compress( pHead->pFrame , pHead->lFrameLen , pFrame , &lCount )>0 && lCount > 0 )
|
|||
|
{
|
|||
|
bOK = true;
|
|||
|
}
|
|||
|
}
|
|||
|
if ( pHead->bCompress==2 )
|
|||
|
{
|
|||
|
if ( compress( pFrame , &lCount,pHead->pFrame , pHead->lFrameLen )==Z_OK && lCount > 0 )
|
|||
|
{
|
|||
|
bOK = true;
|
|||
|
}
|
|||
|
}
|
|||
|
if ( bOK )
|
|||
|
{
|
|||
|
delete pHead->pFrame; //ѹ<><D1B9><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD>滻Ҫ<E6BBBB><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
pHead->pFrame = pFrame;
|
|||
|
pHead->lCompressLen = lCount;
|
|||
|
lSendFrameLen = lCount; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5>ֽ<EFBFBD><D6BD><EFBFBD>
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
delete pFrame;
|
|||
|
}
|
|||
|
}
|
|||
|
if ( bOK )
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5>ֽ<EFBFBD><D6BD><EFBFBD>
|
|||
|
long lSendBytes = (sizeof(Socket_Head)+lSendFrameLen)*2;
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
char szBegin[256]={0};strcpy(szBegin,"SMS=");strcat(szBegin,REQHEAD);
|
|||
|
char szBegin2[256]={0};sprintf(szBegin2,"%010d",lSendBytes);
|
|||
|
strcat(szBegin,szBegin2); //ͷ+<2B><><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD>
|
|||
|
char szEnd[256]={0};strcpy(szEnd,"&Submit=%CC%E1%BD%BB");
|
|||
|
lSendBytes=lSendBytes+strlen(szBegin)+strlen(szEnd);
|
|||
|
char * pSend = new char[lSendBytes+10];
|
|||
|
memset(pSend ,0,lSendBytes+10);
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>ͷ
|
|||
|
strcpy(pSend,szBegin);
|
|||
|
char * pSend2 = pSend + strlen(szBegin);
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
AsciiToHex((char*)pHead ,pSend2,sizeof(Socket_Head));pSend2=pSend2+sizeof(Socket_Head)*2;
|
|||
|
AsciiToHex((char*)pHead->pFrame,pSend2,lSendFrameLen);pSend2=pSend2+lSendFrameLen*2;
|
|||
|
//<2F><><EFBFBD><EFBFBD>β
|
|||
|
strcpy(pSend2,szEnd);
|
|||
|
|
|||
|
char szAcceptType[32]={0};
|
|||
|
strcpy(szAcceptType,"*/*");
|
|||
|
|
|||
|
HINTERNET hHttpFile = HttpOpenRequest(pPro->m_hConnection,
|
|||
|
_T("POST"),
|
|||
|
SUPPERGATEWAY_POST,
|
|||
|
HTTP_VERSION,
|
|||
|
NULL,
|
|||
|
NULL,
|
|||
|
INTERNET_FLAG_RELOAD,
|
|||
|
0);
|
|||
|
|
|||
|
//<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>
|
|||
|
|
|||
|
//<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if ( pPro->m_Setup.bProxyUse ) //ʹ<>ô<EFBFBD><C3B4><EFBFBD>
|
|||
|
{
|
|||
|
/*
|
|||
|
CString strProxy;
|
|||
|
INTERNET_PROXY_INFO proxyinfo;
|
|||
|
proxyinfo.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
|
|||
|
proxyinfo.lpszProxy = strProxy;
|
|||
|
proxyinfo.lpszProxyBypass = NULL;
|
|||
|
InternetSetOption(m_hInternet,INTERNET_OPTION_PROXY, (LPVOID)&proxyinfo, sizeof(INTERNET_PROXY_INFO));
|
|||
|
*/
|
|||
|
|
|||
|
if ( _tcslen(pPro->m_Setup.szProxyUser)>0 )
|
|||
|
{
|
|||
|
InternetSetOption(hHttpFile,
|
|||
|
INTERNET_OPTION_PROXY_USERNAME,
|
|||
|
pPro->m_Setup.szProxyUser,
|
|||
|
_tcslen(pPro->m_Setup.szProxyUser)+1);
|
|||
|
}
|
|||
|
if ( _tcslen(pPro->m_Setup.szProxyPasswd)>0 )
|
|||
|
{
|
|||
|
InternetSetOption(hHttpFile,
|
|||
|
INTERNET_OPTION_PROXY_PASSWORD,
|
|||
|
pPro->m_Setup.szProxyPasswd,
|
|||
|
_tcslen(pPro->m_Setup.szProxyPasswd)+1);
|
|||
|
}
|
|||
|
}
|
|||
|
//TRACE(pSend);
|
|||
|
// Send the request.
|
|||
|
CString Head=_T("Content-Type: application/x-www-form-urlencoded");
|
|||
|
BOOL bSendRequest = ::HttpSendRequest(hHttpFile, Head,Head.GetLength(), pSend, lSendBytes);
|
|||
|
// Get the length of the file.
|
|||
|
char bufQuery[32] ;
|
|||
|
DWORD dwIndex=0;
|
|||
|
DWORD dwLengthBufQuery = sizeof(bufQuery);
|
|||
|
BOOL bQuery = HttpQueryInfo(hHttpFile,
|
|||
|
HTTP_QUERY_CONTENT_LENGTH,
|
|||
|
bufQuery,
|
|||
|
&dwLengthBufQuery,
|
|||
|
&dwIndex);
|
|||
|
|
|||
|
// Convert length from ASCII string to a DWORD.
|
|||
|
DWORD dwFileSize = (DWORD)atol(bufQuery) ;
|
|||
|
if ( dwFileSize >0 )
|
|||
|
{
|
|||
|
// Allocate a buffer for the file.
|
|||
|
char* pRecv = new char[dwFileSize+10] ;
|
|||
|
|
|||
|
// Read the file into the buffer.
|
|||
|
DWORD dwBytesRead ;
|
|||
|
BOOL bRead = ::InternetReadFile(hHttpFile,
|
|||
|
pRecv,
|
|||
|
dwFileSize+1,
|
|||
|
&dwBytesRead);
|
|||
|
// Put a zero on the end of the buffer.
|
|||
|
pRecv[dwBytesRead] = 0 ;
|
|||
|
/*
|
|||
|
CFile file(_T("e:\\abc.htm") , CFile::modeCreate|CFile::modeReadWrite);
|
|||
|
file.Write(pRecv , dwBytesRead);
|
|||
|
file.Close();
|
|||
|
*/
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
if (!strncmp(pRecv,REQHEAD,strlen(REQHEAD)) ) //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>Ϣ
|
|||
|
{
|
|||
|
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
dwBytesRead = dwBytesRead-strlen(REQHEAD);
|
|||
|
BYTE * pData = new BYTE[dwBytesRead];
|
|||
|
memset(pData,0,dwBytesRead);
|
|||
|
HexToAscii((char*)(pRecv+strlen(REQHEAD)),(char*)pData);
|
|||
|
long lDataLen = dwBytesRead/2;
|
|||
|
|
|||
|
for ( int i=0 ; i<lDataLen ; i++ )
|
|||
|
{
|
|||
|
Socket_Head SHead={0};
|
|||
|
memcpy(&SHead,pData+i,sizeof(Socket_Head)); i=i+sizeof(Socket_Head);
|
|||
|
long lGetLen=SHead.lFrameLen;
|
|||
|
if ( SHead.bCompress>0 )
|
|||
|
lGetLen = SHead.lCompressLen;
|
|||
|
if ( i+lGetLen>lDataLen) //<2F><><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>
|
|||
|
{
|
|||
|
break;
|
|||
|
}
|
|||
|
BYTE * pFrame = NULL;
|
|||
|
BOOL bOK = true;
|
|||
|
if ( SHead.lFuncType != SMSFUNC_TEST )
|
|||
|
pPro->SetCompressType(SHead.bCompress); //ȡ<><C8A1><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>ѡ<EFBFBD><D1A1>
|
|||
|
if ( SHead.bCompress>0 ) //<2F><>ѹ
|
|||
|
{
|
|||
|
ULONG lCount = SHead.lFrameLen+2048;
|
|||
|
pFrame = new BYTE[lCount];memset( pFrame , 0 , lCount );
|
|||
|
|
|||
|
if ( SHead.bCompress == 1 )
|
|||
|
{
|
|||
|
if ( !pPro->lzo.decompress( pData+i , lGetLen , pFrame , &lCount ))
|
|||
|
{
|
|||
|
bOK = false; //<2F><>ѹ<EFBFBD><D1B9><EFBFBD>ɹ<EFBFBD>,<2C><><EFBFBD><EFBFBD>֪ͨ<CDA8>յ<EFBFBD>֡
|
|||
|
//<2F><>ѹ<EFBFBD><D1B9><EFBFBD>ɹ<EFBFBD>
|
|||
|
delete pFrame;
|
|||
|
}
|
|||
|
}
|
|||
|
if ( SHead.bCompress == 2 )
|
|||
|
{
|
|||
|
if ( uncompress( pFrame , &lCount , pData+i , lGetLen )!=Z_OK)
|
|||
|
{
|
|||
|
bOK = false; //<2F><>ѹ<EFBFBD><D1B9><EFBFBD>ɹ<EFBFBD>,<2C><><EFBFBD><EFBFBD>֪ͨ<CDA8>յ<EFBFBD>֡
|
|||
|
//<2F><>ѹ<EFBFBD><D1B9><EFBFBD>ɹ<EFBFBD>
|
|||
|
delete pFrame;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ULONG lCount = lGetLen+512;
|
|||
|
pFrame = new BYTE[lCount];memset( pFrame , 0 , lCount );
|
|||
|
memcpy(pFrame,pData+i,lGetLen);
|
|||
|
}
|
|||
|
if ( bOK )
|
|||
|
{
|
|||
|
Socket_Head * pHead = new Socket_Head;
|
|||
|
*pHead = SHead;
|
|||
|
pHead->pFrame = pFrame;
|
|||
|
pPro->NotifyMainWnd( PROCESSSOCKET_FRAME , (WPARAM)pHead , 0 );
|
|||
|
}
|
|||
|
i=i+lGetLen;
|
|||
|
i=i-1;
|
|||
|
}
|
|||
|
delete pData;
|
|||
|
}
|
|||
|
delete pRecv;
|
|||
|
}
|
|||
|
|
|||
|
delete pSend;
|
|||
|
InternetCloseHandle(hHttpFile);
|
|||
|
}
|
|||
|
delete pHead->pFrame;
|
|||
|
delete pHead;
|
|||
|
}
|
|||
|
|
|||
|
Sleep(100); //<2F><><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD>Ϣһ<CFA2>¡<EFBFBD>
|
|||
|
}
|
|||
|
}
|
|||
|
catch(...)
|
|||
|
{
|
|||
|
//<2F><><EFBFBD>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
|
|||
|
DWORD dwTemp;
|
|||
|
pPro->m_hHttp = CreateThread(NULL,0,Http_Socket,(LPVOID)pPro,0,&dwTemp);
|
|||
|
if ( pPro->m_hHttp != INVALID_HANDLE_VALUE )
|
|||
|
{
|
|||
|
SetThreadPriority(pPro->m_hHttp,THREAD_PRIORITY_LOWEST); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
|
|||
|
}
|
|||
|
return -1;
|
|||
|
}
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
void CProcessSocket::AsciiToHex(char *pszOrgRandom, char *pszDesRandom, long lLen)
|
|||
|
{
|
|||
|
char *p = (char *)pszDesRandom;
|
|||
|
//long lLen = lstrlen( (char*)pszOrgRandom);
|
|||
|
for( long i = 0; i < lLen; ++i )
|
|||
|
{
|
|||
|
sprintf(p, "%02X", (BYTE)pszOrgRandom[i] );
|
|||
|
p += 2;
|
|||
|
}
|
|||
|
*p=0;
|
|||
|
}
|
|||
|
|
|||
|
void CProcessSocket::HexToAscii(char *pszOrgRandom, char *pszDesRandom)
|
|||
|
{
|
|||
|
char Buf[4];
|
|||
|
char *pDes = (char *)pszDesRandom;
|
|||
|
char *pOrg = (char *)pszOrgRandom;
|
|||
|
long lLen = strlen( pOrg);
|
|||
|
long lTemp;
|
|||
|
for( int i = 0; i < lLen/2; ++i )
|
|||
|
{
|
|||
|
memcpy( Buf , pOrg+i*2 , 2 );
|
|||
|
Buf[2] = 0;
|
|||
|
lTemp = CharHex(Buf[0])*16 + CharHex(Buf[1]);
|
|||
|
pDes[i] = (char)lTemp;
|
|||
|
}
|
|||
|
pDes[i] = 0;
|
|||
|
}
|
|||
|
|
|||
|
int CProcessSocket::CharHex(TCHAR ch)
|
|||
|
{
|
|||
|
//if( isdigit( ch ) ) return( atoi( &ch) );
|
|||
|
if( ch >='0' && ch <= '9' ) return( _ttoi( &ch) );
|
|||
|
else {
|
|||
|
if( ch == 'a' || ch == 'A' ) return( 10 );
|
|||
|
if( ch == 'b' || ch == 'B' ) return( 11 );
|
|||
|
if( ch == 'c' || ch == 'C' ) return( 12 );
|
|||
|
if( ch == 'd' || ch == 'D' ) return( 13 );
|
|||
|
if( ch == 'e' || ch == 'E' ) return( 14 );
|
|||
|
if( ch == 'f' || ch == 'F' ) return( 15 );
|
|||
|
}
|
|||
|
return( 0 );
|
|||
|
}
|
|||
|
|
|||
|
void CProcessSocket::SetUserType(unsigned char ucUserType)
|
|||
|
{
|
|||
|
m_ucUserType = ucUserType;
|
|||
|
}
|
|||
|
|
|||
|
void CProcessSocket::SetVer(unsigned long ulVer)
|
|||
|
{
|
|||
|
m_ulVer = ulVer;
|
|||
|
}
|