2025-02-28 17:05:50 +08:00
|
|
|
|
// Sgip.cpp: implementation of the CSgip class.
|
|
|
|
|
//
|
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
#include "Sgip.h"
|
|
|
|
|
|
|
|
|
|
//#include "MSgip.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
#ifdef _DEBUG
|
|
|
|
|
#undef THIS_FILE
|
|
|
|
|
static char THIS_FILE[]=__FILE__;
|
|
|
|
|
#define new DEBUG_NEW
|
|
|
|
|
#endif
|
|
|
|
|
*/
|
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
|
// Construction/Destruction
|
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CSgip::CSgip()
|
|
|
|
|
{
|
|
|
|
|
m_hSocket = INVALID_SOCKET;
|
|
|
|
|
memset( m_szIP , 0 , sizeof(m_szIP) );
|
|
|
|
|
m_lPort = 0;
|
|
|
|
|
m_bQuitThread = false;
|
|
|
|
|
m_dwEndSendTime = 0;
|
|
|
|
|
m_dwEndRecvTime = 0;
|
|
|
|
|
m_dwTestCount = 0;
|
|
|
|
|
m_bRecvFrame = false;
|
|
|
|
|
|
|
|
|
|
m_lID = 1;
|
|
|
|
|
m_pRecvProc = NULL;
|
|
|
|
|
m_bConnect = false;
|
|
|
|
|
m_bLoginSgip= -1;
|
|
|
|
|
m_bInitSgip = false;
|
|
|
|
|
|
|
|
|
|
memset(m_szSgipIP ,0,sizeof(m_szSgipIP));
|
|
|
|
|
memset(m_szSgipUser ,0,sizeof(m_szSgipUser));
|
|
|
|
|
memset(m_szSgipPasswd,0,sizeof(m_szSgipPasswd));
|
|
|
|
|
memset(m_szSgipCorpID,0,sizeof(m_szSgipCorpID));
|
|
|
|
|
|
|
|
|
|
WSADATA wsaData; //<2F><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC>socket<65>Ľṹ
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʼ<EFBFBD><CABC>SOCKET<45><54><EFBFBD><EFBFBD>
|
|
|
|
|
int iTemp=WSAStartup(0x0101,&wsaData); //<2F><>ʼ<EFBFBD><CABC>socket<65><74><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
InitializeCriticalSection(&m_CriSendSms);
|
|
|
|
|
InitializeCriticalSection(&m_CriRespList);
|
|
|
|
|
InitializeCriticalSection(&m_CriDeliverList);
|
|
|
|
|
InitializeCriticalSection(&m_CriStatusList);
|
|
|
|
|
InitializeCriticalSection(&m_CriSgipExchangeResp);
|
|
|
|
|
InitializeCriticalSection(&m_CriErrMsg);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
m_lSendID = 1;
|
|
|
|
|
m_pSendList = new Sgip_Send_List[SGIP_SMS_MAX_LIST];
|
|
|
|
|
m_pRespList = new Sgip_Send_Resp[SGIP_SMS_MAX_RESP];
|
|
|
|
|
m_pDeliverList = new Sgip_Deliver_List[SGIP_SMS_MAX_DELIVER];
|
|
|
|
|
m_pStatusList = new Sgip_Deliver_List[SGIP_SMS_MAX_STATUS];
|
|
|
|
|
m_pSgipExchangeResp = new SgipExchangeResp[SGIP_SMS_MAX_SGIPEXCHANGERESP];
|
|
|
|
|
|
|
|
|
|
memset(m_pSendList,0,sizeof(Sgip_Send_List)*SGIP_SMS_MAX_LIST);
|
|
|
|
|
memset(m_pRespList,0,sizeof(Sgip_Send_Resp)*SGIP_SMS_MAX_RESP);
|
|
|
|
|
memset(m_pDeliverList,0,sizeof(Sgip_Deliver_List)*SGIP_SMS_MAX_DELIVER);
|
|
|
|
|
memset(m_pStatusList,0,sizeof(Sgip_Deliver_List)*SGIP_SMS_MAX_STATUS);
|
|
|
|
|
memset(m_pSgipExchangeResp,0,sizeof(SgipExchangeResp)*SGIP_SMS_MAX_SGIPEXCHANGERESP);
|
|
|
|
|
|
|
|
|
|
m_lSendList = 0;
|
|
|
|
|
m_lRespList = 0;
|
|
|
|
|
m_lDeliverList=0;
|
|
|
|
|
m_lStatusList=0;
|
|
|
|
|
m_lSgipExchangeRespList=0;
|
|
|
|
|
|
|
|
|
|
m_pSgipExchange = NULL;
|
|
|
|
|
m_lSgipExchange = 0;
|
|
|
|
|
|
|
|
|
|
m_bAdc = false;
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|
|
|
|
m_hRecv_Socket = INVALID_SOCKET;
|
|
|
|
|
memset(&m_szRecvIP,0,sizeof(m_szRecvIP));
|
|
|
|
|
m_lRecvPort=8802;
|
|
|
|
|
m_bRecvInit=false;
|
|
|
|
|
m_bQuitThread_Recv=false;
|
|
|
|
|
|
|
|
|
|
m_hThread = INVALID_HANDLE_VALUE;
|
|
|
|
|
m_hThread_Recv = INVALID_HANDLE_VALUE;
|
|
|
|
|
m_hThread_Send = INVALID_HANDLE_VALUE;
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ڿ<EFBFBD><DABF>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|
|
|
|
m_dwEndSocketSendTime = 0;
|
|
|
|
|
m_lSendInterval = 0;
|
|
|
|
|
m_lSendIntervalCount = 1;
|
|
|
|
|
m_lSendIntervalIndex = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CSgip::~CSgip()
|
|
|
|
|
{
|
|
|
|
|
Stop();
|
|
|
|
|
|
|
|
|
|
if ( m_hSocket != INVALID_SOCKET )
|
|
|
|
|
closesocket(m_hSocket);
|
|
|
|
|
|
|
|
|
|
Sgip_Recv_Exit();
|
|
|
|
|
|
|
|
|
|
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if ( m_pSendList )
|
|
|
|
|
{delete m_pSendList;m_pSendList=NULL;}
|
|
|
|
|
|
|
|
|
|
if ( m_pRespList )
|
|
|
|
|
{delete m_pRespList;m_pRespList=NULL;}
|
|
|
|
|
|
|
|
|
|
if ( m_pDeliverList )
|
|
|
|
|
{delete m_pDeliverList;m_pDeliverList=NULL;}
|
|
|
|
|
|
|
|
|
|
if ( m_pStatusList )
|
|
|
|
|
{delete m_pStatusList;m_pStatusList=NULL;}
|
|
|
|
|
|
|
|
|
|
if ( m_pSgipExchangeResp )
|
|
|
|
|
{delete m_pSgipExchangeResp;m_pSgipExchangeResp=NULL;}
|
|
|
|
|
|
|
|
|
|
DeleteCriticalSection(&m_CriSendSms);
|
|
|
|
|
DeleteCriticalSection(&m_CriRespList);
|
|
|
|
|
DeleteCriticalSection(&m_CriDeliverList);
|
|
|
|
|
DeleteCriticalSection(&m_CriStatusList);
|
|
|
|
|
DeleteCriticalSection(&m_CriSgipExchangeResp);
|
|
|
|
|
DeleteCriticalSection(&m_CriErrMsg);
|
|
|
|
|
|
|
|
|
|
//<2F>˳<EFBFBD>Socket
|
|
|
|
|
WSACleanup();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::Connect(const char *pAddr, long lPort, BOOL bReConnect)
|
|
|
|
|
{
|
|
|
|
|
if ( !bReConnect && m_hSocket!=INVALID_SOCKET) //<2F><><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this->Stop(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>ֹͣ
|
|
|
|
|
|
|
|
|
|
strcpy( m_szIP,pAddr );
|
|
|
|
|
m_lPort = lPort;
|
|
|
|
|
|
|
|
|
|
sockaddr_in sAddr;
|
|
|
|
|
m_hSocket=socket(AF_INET,SOCK_STREAM,0);
|
|
|
|
|
sAddr.sin_family=AF_INET;
|
|
|
|
|
sAddr.sin_port=0;
|
|
|
|
|
sAddr.sin_addr.s_addr=htonl(INADDR_ANY);
|
|
|
|
|
if (bind(m_hSocket,(LPSOCKADDR)&sAddr,sizeof(sAddr))==SOCKET_ERROR)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
sAddr.sin_port=htons((unsigned short)lPort);
|
|
|
|
|
sAddr.sin_addr.s_addr=inet_addr(pAddr);
|
|
|
|
|
if (sAddr.sin_addr.s_addr == INADDR_NONE)
|
|
|
|
|
{
|
|
|
|
|
LPHOSTENT lphost;
|
|
|
|
|
lphost = gethostbyname(pAddr);
|
|
|
|
|
if (lphost != NULL)
|
|
|
|
|
sAddr.sin_addr.s_addr = ((LPIN_ADDR)lphost->h_addr)->s_addr;
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Close();
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (connect(m_hSocket,(LPSOCKADDR)&sAddr,sizeof(sAddr))==SOCKET_ERROR)
|
|
|
|
|
{
|
|
|
|
|
Close();
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>Socket
|
|
|
|
|
u_long ulTemp=1; //<2F><>SOCKET<45><54><EFBFBD>ɷ<EFBFBD><C9B7><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>SOCKET
|
|
|
|
|
//u_long ulTemp=0; //<2F><>SOCKET<45><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>SOCKET
|
|
|
|
|
ioctlsocket( m_hSocket,FIONBIO,&ulTemp );
|
|
|
|
|
ulTemp=1024000;
|
|
|
|
|
setsockopt( m_hSocket , SOL_SOCKET, SO_SNDBUF ,(const char *)&ulTemp ,sizeof(ulTemp)); //<2F><>緳<EFBFBD>
|
|
|
|
|
ulTemp=1024000;
|
|
|
|
|
setsockopt( m_hSocket , SOL_SOCKET, SO_RCVBUF ,(const char *)&ulTemp ,sizeof(ulTemp)); //<2F><>緳<EFBFBD>
|
|
|
|
|
|
|
|
|
|
m_bQuitThread = false;
|
|
|
|
|
DWORD dwTemp;
|
|
|
|
|
m_hThread=CreateThread(NULL,0,SocketRecv,(LPVOID)this,0,&dwTemp);
|
|
|
|
|
// if ( !::AfxBeginThread((AFX_THREADPROC)CNetSocket::SocketRecv,(LPVOID)this,THREAD_PRIORITY_LOWEST) )
|
|
|
|
|
if ( !m_hThread )
|
|
|
|
|
{
|
|
|
|
|
Close();
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
SetThreadPriority(m_hThread,THREAD_PRIORITY_LOWEST); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
|
|
|
|
|
|
|
|
|
|
m_hThread_Send = CreateThread(NULL, 0, SocketSend, (LPVOID)this, 0, &dwTemp);
|
|
|
|
|
// if ( !::AfxBeginThread((AFX_THREADPROC)CNetSocket::SocketRecv,(LPVOID)this,THREAD_PRIORITY_LOWEST) )
|
|
|
|
|
if (m_hThread_Send == INVALID_HANDLE_VALUE)
|
|
|
|
|
{
|
|
|
|
|
Close();
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
SetThreadPriority(m_hThread_Send, THREAD_PRIORITY_LOWEST); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
|
|
|
|
|
|
|
|
|
|
m_bConnect = true;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::Connect2()
|
|
|
|
|
{
|
|
|
|
|
m_bConnect = false;
|
|
|
|
|
if ( m_hSocket != INVALID_SOCKET )
|
|
|
|
|
closesocket(m_hSocket);
|
|
|
|
|
m_hSocket = INVALID_SOCKET;
|
|
|
|
|
|
|
|
|
|
sockaddr_in sAddr;
|
|
|
|
|
m_hSocket=socket(AF_INET,SOCK_STREAM,0);
|
|
|
|
|
sAddr.sin_family=AF_INET;
|
|
|
|
|
sAddr.sin_port=0;
|
|
|
|
|
sAddr.sin_addr.s_addr=htonl(INADDR_ANY);
|
|
|
|
|
if (bind(m_hSocket,(LPSOCKADDR)&sAddr,sizeof(sAddr))==SOCKET_ERROR)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
sAddr.sin_port=htons((unsigned short)m_lPort);
|
|
|
|
|
sAddr.sin_addr.s_addr=inet_addr(m_szIP);
|
|
|
|
|
if (sAddr.sin_addr.s_addr == INADDR_NONE)
|
|
|
|
|
{
|
|
|
|
|
LPHOSTENT lphost;
|
|
|
|
|
lphost = gethostbyname(m_szIP);
|
|
|
|
|
if (lphost != NULL)
|
|
|
|
|
sAddr.sin_addr.s_addr = ((LPIN_ADDR)lphost->h_addr)->s_addr;
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Close();
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (connect(m_hSocket,(LPSOCKADDR)&sAddr,sizeof(sAddr))==SOCKET_ERROR)
|
|
|
|
|
{
|
|
|
|
|
Close();
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>Socket
|
|
|
|
|
u_long ulTemp=1; //<2F><>SOCKET<45><54><EFBFBD>ɷ<EFBFBD><C9B7><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>SOCKET
|
|
|
|
|
//u_long ulTemp=0; //<2F><>SOCKET<45><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>SOCKET
|
|
|
|
|
ioctlsocket( m_hSocket,FIONBIO,&ulTemp );
|
|
|
|
|
ulTemp=1024000;
|
|
|
|
|
setsockopt( m_hSocket , SOL_SOCKET, SO_SNDBUF ,(const char *)&ulTemp ,sizeof(ulTemp)); //<2F><>緳<EFBFBD>
|
|
|
|
|
ulTemp=1024000;
|
|
|
|
|
setsockopt( m_hSocket , SOL_SOCKET, SO_RCVBUF ,(const char *)&ulTemp ,sizeof(ulTemp)); //<2F><>緳<EFBFBD>
|
|
|
|
|
|
|
|
|
|
m_bConnect = true;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::isConnect()
|
|
|
|
|
{
|
|
|
|
|
return m_bConnect;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CSgip::Stop()
|
|
|
|
|
{
|
|
|
|
|
m_bQuitThread = true;
|
|
|
|
|
if (m_hThread != INVALID_HANDLE_VALUE && WaitForSingleObject(m_hThread,2000) == WAIT_TIMEOUT ) //<2F>ȴ<EFBFBD>5<EFBFBD>룬<EFBFBD><EBA3AC><EFBFBD>߳<EFBFBD><DFB3>˳<EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
TerminateThread(m_hThread,0); //<2F><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>ʱ<EFBFBD><CAB1>ǿ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>߳<EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
m_hThread = INVALID_HANDLE_VALUE;
|
|
|
|
|
|
|
|
|
|
Sgip_Recv_Exit(); //<2F>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
if (m_hThread_Recv != INVALID_HANDLE_VALUE && WaitForSingleObject(m_hThread_Recv,2000) == WAIT_TIMEOUT ) //<2F>ȴ<EFBFBD>5<EFBFBD>룬<EFBFBD><EBA3AC><EFBFBD>߳<EFBFBD><DFB3>˳<EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
TerminateThread(m_hThread_Recv,0); //<2F><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>ʱ<EFBFBD><CAB1>ǿ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>߳<EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
m_hThread_Recv = INVALID_HANDLE_VALUE;
|
|
|
|
|
|
|
|
|
|
if (m_hThread_Send != INVALID_HANDLE_VALUE && WaitForSingleObject(m_hThread_Send, 2000) == WAIT_TIMEOUT) //<2F>ȴ<EFBFBD>5<EFBFBD>룬<EFBFBD><EBA3AC><EFBFBD>߳<EFBFBD><DFB3>˳<EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
TerminateThread(m_hThread_Send, 0); //<2F><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>ʱ<EFBFBD><CAB1>ǿ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>߳<EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
m_hThread_Send = INVALID_HANDLE_VALUE;
|
|
|
|
|
|
|
|
|
|
Close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::isSocketClose(SOCKET s)
|
|
|
|
|
{
|
|
|
|
|
BOOL bConnDropped = FALSE;
|
|
|
|
|
INT iRet = 0;
|
|
|
|
|
BOOL bOK = TRUE;
|
|
|
|
|
|
|
|
|
|
if (s == INVALID_SOCKET)
|
|
|
|
|
return TRUE;
|
|
|
|
|
|
|
|
|
|
struct timeval timeout = { 0, 0 };
|
|
|
|
|
fd_set readSocketSet;
|
|
|
|
|
FD_ZERO(&readSocketSet);
|
|
|
|
|
FD_SET(s, &readSocketSet);
|
|
|
|
|
iRet = ::select(0, &readSocketSet, NULL, NULL, &timeout);
|
|
|
|
|
bOK = (iRet > 0);
|
|
|
|
|
if(bOK)
|
|
|
|
|
{
|
|
|
|
|
bOK = FD_ISSET(s, &readSocketSet);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(bOK)
|
|
|
|
|
{
|
|
|
|
|
CHAR szBuffer[1] = "";
|
|
|
|
|
iRet = recv(s, szBuffer, 1, MSG_PEEK);
|
|
|
|
|
bOK = (iRet > 0);
|
|
|
|
|
if(!bOK)
|
|
|
|
|
{
|
|
|
|
|
INT iError = WSAGetLastError();
|
|
|
|
|
bConnDropped = (( iError == WSAENETRESET) ||
|
|
|
|
|
(iError == WSAECONNABORTED) ||
|
|
|
|
|
(iError == WSAECONNRESET) ||
|
|
|
|
|
(iError == WSAEINVAL) ||
|
|
|
|
|
(iRet == 0));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return(bConnDropped);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CSgip::Close()
|
|
|
|
|
{
|
|
|
|
|
if ( m_hSocket == INVALID_SOCKET )
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if ( m_hSocket != INVALID_SOCKET )
|
|
|
|
|
closesocket(m_hSocket);
|
|
|
|
|
|
|
|
|
|
m_hSocket = INVALID_SOCKET;
|
|
|
|
|
m_bConnect = false;
|
|
|
|
|
//m_dwEndSendTime=0;
|
|
|
|
|
//m_dwEndRecvTime=0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
long CSgip::Send(SOCKET sock,BYTE *pData, long lLen)
|
|
|
|
|
{
|
|
|
|
|
#define SOCKET_SEND_TIMEOUT 10000 //10<31>뷢<EFBFBD>ͳ<EFBFBD>ʱ
|
|
|
|
|
if ( sock == INVALID_SOCKET )
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
long lSended = 0;
|
|
|
|
|
DWORD lTimeOut = ::GetTickCount();
|
|
|
|
|
while ( 1 )
|
|
|
|
|
{
|
|
|
|
|
long lRet = send(sock,(char*)(pData+lSended), lLen-lSended,0);
|
|
|
|
|
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 >= lLen )
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Sleep_Lu( 20 ); //緳<><E7B7B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
if ( ::GetTickCount() - lTimeOut > SOCKET_SEND_TIMEOUT )
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return lSended;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DWORD WINAPI CSgip::SocketRecv(LPVOID lParam)
|
|
|
|
|
{
|
|
|
|
|
CSgip * pNet = (CSgip *)lParam;
|
|
|
|
|
Sgip_Data_Recv Drecv={0};
|
|
|
|
|
pNet->m_dwEndRecvTime = ::GetTickCount(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>֡<EFBFBD><D6A1>ʱ<EFBFBD><CAB1>
|
|
|
|
|
DWORD dwEndSendBindFrame=0;
|
|
|
|
|
while ( !pNet->m_bQuitThread )
|
|
|
|
|
{
|
|
|
|
|
if ( pNet->m_bConnect && isSocketClose(pNet->m_hSocket) )
|
|
|
|
|
{
|
|
|
|
|
pNet->Close();
|
|
|
|
|
//<2F><><EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if ( Drecv.pRecvFrame )
|
|
|
|
|
delete Drecv.pRecvFrame;
|
|
|
|
|
memset(&Drecv,0,sizeof(Drecv));
|
|
|
|
|
//pNet->InitSgip2(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
if ( ReadFrame(pNet->m_hSocket,&Drecv) ) //<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>н<EFBFBD><D0BD>յ<EFBFBD><D5B5>µ<EFBFBD>Frame
|
|
|
|
|
{
|
|
|
|
|
pNet->m_dwEndRecvTime = ::GetTickCount(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>֡<EFBFBD><D6A1>ʱ<EFBFBD><CAB1>
|
|
|
|
|
pNet->m_bRecvFrame = true;
|
|
|
|
|
pNet->RecvFrame(Drecv); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>֡
|
|
|
|
|
Drecv.lDataLen = 0;
|
|
|
|
|
delete Drecv.pRecvFrame;
|
|
|
|
|
Drecv.pRecvFrame = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F>жϽ<D0B6><CFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʱ
|
|
|
|
|
//if ( pNet->m_dwEndSendTime > 0 && !pNet->m_bRecvFrame)
|
|
|
|
|
//if ( pNet->m_dwEndSendTime>0 && ::GetTickCount() - pNet->m_dwEndRecvTime >SGIP_ACTIVE_TIMEOUT*2 ) //<2F><><EFBFBD>ճ<EFBFBD>ʱ
|
|
|
|
|
if ( pNet->m_dwEndSendTime>0 && (pNet->m_dwEndSendTime>pNet->m_dwEndRecvTime)&& (::GetTickCount() - pNet->m_dwEndSendTime >SGIP_ACTIVE_TIMEOUT*2) ) //<2F><><EFBFBD>ճ<EFBFBD>ʱ
|
|
|
|
|
{
|
|
|
|
|
pNet->m_dwEndRecvTime = ::GetTickCount()-SGIP_ACTIVE_TIMEOUT; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>
|
|
|
|
|
pNet->Close();
|
|
|
|
|
//<2F><><EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if ( Drecv.pRecvFrame )
|
|
|
|
|
delete Drecv.pRecvFrame;
|
|
|
|
|
memset(&Drecv,0,sizeof(Drecv));
|
|
|
|
|
//pNet->InitSgip2(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ӧ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD>Active_Testָ<74><D6B8>
|
|
|
|
|
if ( strlen(pNet->m_szSgipUser)<=2 && pNet->m_dwEndSendTime > 0 )
|
|
|
|
|
{
|
|
|
|
|
if ( ::GetTickCount() - pNet->m_dwEndSendTime > SGIP_ACTIVE_TESTTIME ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
Sgip_SeqID lSeq = { 0 };
|
|
|
|
|
pNet->SendFrame(pNet->m_hSocket,pNet->m_lNodeID,pNet->m_lID,pNet->m_dwEndSendTime, SGIP_ACTIVE_TEST , NULL , 0 ,lSeq );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD>
|
|
|
|
|
if ( pNet->m_bConnect && pNet->m_bLoginSgip==0 )
|
|
|
|
|
{
|
|
|
|
|
//dwEndSendBindFrame = 0;
|
|
|
|
|
//long lCount2 = pNet->Back_Send();
|
|
|
|
|
//if ( lCount2>0 )
|
|
|
|
|
// Sleep_Lu(2);
|
|
|
|
|
//else
|
|
|
|
|
// Sleep_Lu(20);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if ( pNet->m_bInitSgip && (dwEndSendBindFrame==0 || (dwEndSendBindFrame>0 && GetTickCount()-dwEndSendBindFrame>10000)) ) //<2F><><EFBFBD><EFBFBD><EFBFBD>ѳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>迴<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>ӻ<EFBFBD>û<EFBFBD><C3BB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
BOOL bReConnect=false;
|
|
|
|
|
for ( int i=0 ; i<SGIP_SMS_MAX_LIST;i++ )
|
|
|
|
|
{
|
|
|
|
|
Sgip_Send_List * pSend = &pNet->m_pSendList[i];
|
|
|
|
|
if ( pSend->lSendID != 0 )
|
|
|
|
|
{
|
|
|
|
|
bReConnect = true;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if ( bReConnect )
|
|
|
|
|
{
|
|
|
|
|
pNet->m_bLoginSgip = -1;
|
|
|
|
|
|
|
|
|
|
pNet->SetErrMsg("Sgip<EFBFBD><EFBFBD>Ϣ:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...");
|
|
|
|
|
|
|
|
|
|
pNet->InitSgip2(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
dwEndSendBindFrame = GetTickCount();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//Sleep_Lu(2);
|
|
|
|
|
}
|
|
|
|
|
if ( Drecv.pRecvFrame )
|
|
|
|
|
delete Drecv.pRecvFrame;
|
|
|
|
|
pNet->Close();
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DWORD WINAPI CSgip::SocketSend(LPVOID lParam)
|
|
|
|
|
{
|
|
|
|
|
CSgip* pNet = (CSgip*)lParam;
|
|
|
|
|
while (!pNet->m_bQuitThread)
|
|
|
|
|
{
|
2025-03-19 16:47:14 +08:00
|
|
|
|
long lCount = 0;
|
|
|
|
|
if (pNet->m_bConnect && pNet->m_bLoginSgip == 0)
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD>
|
|
|
|
|
long lCount = pNet->Back_Send();
|
|
|
|
|
}
|
2025-02-28 17:05:50 +08:00
|
|
|
|
if (lCount > 0)
|
|
|
|
|
Sleep_Lu(1);
|
|
|
|
|
else
|
|
|
|
|
Sleep_Lu(5);
|
|
|
|
|
}
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CSgip::SetRecvProc(RECVPROC proc)
|
|
|
|
|
{
|
|
|
|
|
m_pRecvProc = proc;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::ReadFrame(SOCKET s, Sgip_Data_Recv *pRecv)
|
|
|
|
|
{
|
|
|
|
|
ULONG nBytes=0;
|
|
|
|
|
ioctlsocket(s,FIONREAD, &nBytes);
|
|
|
|
|
if (nBytes <= 0 )
|
|
|
|
|
{
|
|
|
|
|
Sleep_Lu(1); //û<><C3BB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ȴ<EFBFBD>һ<EFBFBD><D2BB>ʱ<EFBFBD><CAB1>
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
if ( pRecv->lDataLen <= 0 && nBytes<= sizeof(pRecv->lDataLen) ) //δ<>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|
|
|
|
{
|
|
|
|
|
Sleep_Lu(1); //û<><C3BB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ȴ<EFBFBD>һ<EFBFBD><D2BB>ʱ<EFBFBD><CAB1>
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
long lRet;
|
|
|
|
|
if (pRecv->lDataLen <= 0 ) //δ<>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>ڿ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
lRet = recv(s, (char*)&pRecv->lDataLen,sizeof(pRecv->lDataLen),0);
|
|
|
|
|
if ( lRet > 0 )
|
|
|
|
|
{
|
|
|
|
|
pRecv->lDataLen = ntohl(pRecv->lDataLen);
|
|
|
|
|
if ( pRecv->lDataLen > 0 )
|
|
|
|
|
{
|
|
|
|
|
if ( pRecv->pRecvFrame )
|
|
|
|
|
delete pRecv->pRecvFrame;
|
|
|
|
|
pRecv->pRecvFrame = new BYTE[pRecv->lDataLen];
|
|
|
|
|
*((long*)pRecv->pRecvFrame) = pRecv->lDataLen; //<2F><><EFBFBD><EFBFBD>ǰ4<C7B0><34><EFBFBD>ֽ<EFBFBD>
|
|
|
|
|
pRecv->lRecvLen = sizeof(pRecv->lDataLen);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
|
|
|
|
ULONG lBeRecv = pRecv->lDataLen-pRecv->lRecvLen;
|
|
|
|
|
lRet = recv(s,(char*)pRecv->pRecvFrame+pRecv->lRecvLen , lBeRecv ,0);
|
|
|
|
|
if ( lRet > 0 )
|
|
|
|
|
pRecv->lRecvLen += lRet ;
|
|
|
|
|
if ( pRecv->lRecvLen == pRecv->lDataLen ) //Frame <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
pRecv->lDataLen = 0; //<2F><><EFBFBD>¿<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::RecvFrame(Sgip_Data_Recv &Drecv)
|
|
|
|
|
{
|
|
|
|
|
Sgip_Head * pHead=(Sgip_Head *)Drecv.pRecvFrame;
|
|
|
|
|
if ( pHead->Total_Length != Drecv.lRecvLen )
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
pHead->Command_Id = ntohl(pHead->Command_Id);
|
|
|
|
|
pHead->SeqID.Node_Id= ntohl(pHead->SeqID.Node_Id);
|
|
|
|
|
pHead->SeqID.Time= ntohl(pHead->SeqID.Time);
|
|
|
|
|
pHead->SeqID.Sequence_Id= ntohl(pHead->SeqID.Sequence_Id);
|
|
|
|
|
|
|
|
|
|
BYTE * pData = (BYTE*)(Drecv.pRecvFrame+sizeof(Sgip_Head));
|
|
|
|
|
long lLen = pHead->Total_Length-sizeof(Sgip_Head);
|
|
|
|
|
long lRet = 0;
|
|
|
|
|
switch( pHead->Command_Id )
|
|
|
|
|
{
|
|
|
|
|
case SGIP_BIND_RESP:
|
|
|
|
|
lRet = Process_Bind(*pHead,pData,lLen);
|
|
|
|
|
break;
|
|
|
|
|
case SGIP_SUBMIT_RESP:
|
|
|
|
|
lRet = Process_Submit(*pHead,pData,lLen);
|
|
|
|
|
break;
|
|
|
|
|
case SGIP_ACTIVE_TEST:
|
|
|
|
|
lRet = Process_Active(*pHead,pData,lLen);
|
|
|
|
|
break;
|
|
|
|
|
case SGIP_DELIVER:
|
|
|
|
|
lRet = Process_Deliver(m_hSocket,*pHead,pData,lLen);
|
|
|
|
|
break;
|
|
|
|
|
case SGIP_REPORT:
|
|
|
|
|
lRet = Process_Report(m_hSocket,*pHead,pData,lLen);
|
|
|
|
|
break;
|
|
|
|
|
case SGIP_ACTIVE_TEST_RESP:
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return lRet;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
long CSgip::Sgip_Init(const char *pIP,long lPort,long lLocalPort, const char *pUser, const char *pPasswd,const char * pCorpID,const char * pNodeID)
|
|
|
|
|
{
|
|
|
|
|
if ( !Connect(pIP,lPort) )
|
|
|
|
|
{
|
|
|
|
|
return -1; //<2F><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><>¼<EFBFBD><C2BC>Ϣ
|
|
|
|
|
strcpy(m_szSgipIP,pIP);
|
|
|
|
|
strcpy(m_szSgipUser,pUser);
|
|
|
|
|
strcpy(m_szSgipPasswd,pPasswd);
|
|
|
|
|
strcpy(m_szSgipCorpID,pCorpID);
|
|
|
|
|
m_lPort = lPort;
|
|
|
|
|
m_lLocalPort = lLocalPort;
|
|
|
|
|
m_lNodeID=atol(pNodeID)*100000+atol(pCorpID); //<2F><><EFBFBD>ɽڵ<C9BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
Sgip_Bind bind={0};
|
|
|
|
|
bind.LoginType = 1;
|
|
|
|
|
strcpy(bind.LoginName,pUser);
|
|
|
|
|
strcpy(bind.LoginPasswd,pPasswd);
|
|
|
|
|
|
|
|
|
|
char szAddNum[32]={0};
|
|
|
|
|
long lLen = strlen(pUser);
|
|
|
|
|
if ( lLen>2 )
|
|
|
|
|
{
|
|
|
|
|
m_lID=atol(pUser+(lLen-2))*0x1000000;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_lID=1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_bLoginSgip = -1;
|
|
|
|
|
Sgip_SeqID lSeq={0};
|
|
|
|
|
if ( !SendFrame(m_hSocket,m_lNodeID,m_lID,m_dwEndSendTime,SGIP_BIND,(UCHAR*)&bind,sizeof(bind),lSeq) )
|
|
|
|
|
return -2; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|
|
|
|
|
|
|
|
|
long lTime = ::GetTickCount();
|
|
|
|
|
while ( m_bLoginSgip == -1 )
|
|
|
|
|
{
|
|
|
|
|
if ( ::GetTickCount()-lTime > 30000 ) //<2F><>ʱ<EFBFBD><CAB1>
|
|
|
|
|
break;
|
|
|
|
|
Sleep_Lu(20);
|
|
|
|
|
}
|
|
|
|
|
if ( m_bLoginSgip==0 )
|
|
|
|
|
m_bInitSgip = true; //<2F>ѳ<EFBFBD>ʼ<EFBFBD><CABC>
|
|
|
|
|
if ( m_bLoginSgip == -1 )
|
|
|
|
|
return -3; //<2F><>¼<EFBFBD><C2BC>ʱ
|
|
|
|
|
else
|
|
|
|
|
return m_bLoginSgip; //<2F><>¼<EFBFBD><C2BC><EFBFBD>سɹ<D8B3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뿴<EFBFBD><EBBFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
return -4; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
long CSgip::SendFrame(SOCKET sock,ULONG lNodeID , ULONG &lID,DWORD &dwEndSendTime,ULONG lCommandID,UCHAR *pData, long lDataLen,Sgip_SeqID & lSeq )
|
|
|
|
|
{
|
|
|
|
|
Sgip_Head head={0};
|
|
|
|
|
long lAllLen;
|
|
|
|
|
head.Total_Length = sizeof(head)+lDataLen;
|
|
|
|
|
lAllLen = head.Total_Length;
|
|
|
|
|
head.Command_Id = lCommandID;
|
|
|
|
|
//if ( lID >= 0xF000000 ) //<2F><><EFBFBD>¿<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|
|
|
|
// lID = 1;
|
|
|
|
|
if ( lSeq.Sequence_Id > 0 )
|
|
|
|
|
head.SeqID = lSeq; //ֱ<><D6B1>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>ŵķ<C5B5><C4B7><EFBFBD>
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>
|
|
|
|
|
head.SeqID.Node_Id = lNodeID;
|
|
|
|
|
SYSTEMTIME t;::GetLocalTime(&t);
|
|
|
|
|
head.SeqID.Time=t.wMonth*100000000+t.wDay*1000000+t.wHour*10000+t.wMinute*100+t.wSecond;
|
|
|
|
|
head.SeqID.Sequence_Id = lID++;
|
|
|
|
|
}
|
|
|
|
|
lSeq = head.SeqID; //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
head.Total_Length = htonl(head.Total_Length);
|
|
|
|
|
head.Command_Id = htonl(head.Command_Id);
|
|
|
|
|
|
|
|
|
|
head.SeqID.Node_Id=htonl(head.SeqID.Node_Id);
|
|
|
|
|
head.SeqID.Time =htonl(head.SeqID.Time);
|
|
|
|
|
head.SeqID.Sequence_Id=htonl(head.SeqID.Sequence_Id);
|
|
|
|
|
|
|
|
|
|
dwEndSendTime = ::GetTickCount(); //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
|
|
|
|
BYTE * pSData = new BYTE[lAllLen];
|
|
|
|
|
memcpy(pSData,&head,sizeof(head));
|
|
|
|
|
memcpy(pSData+sizeof(head),pData,lDataLen);
|
|
|
|
|
BOOL bOK = Send(sock,(BYTE*)pSData , lAllLen );
|
|
|
|
|
delete pSData;
|
|
|
|
|
if ( bOK )
|
|
|
|
|
return true;
|
|
|
|
|
else
|
|
|
|
|
return false;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
long CSgip::Process_Bind(Sgip_Head head,BYTE *pData, long lLen)
|
|
|
|
|
{
|
|
|
|
|
Sgip_Bind_Resp * pResp = (Sgip_Bind_Resp *)pData;
|
|
|
|
|
|
|
|
|
|
if ( m_bInitSgip && pResp->Result != 0 ) //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD>µ<EFBFBD>¼
|
|
|
|
|
{
|
|
|
|
|
//InitCmpp2();
|
|
|
|
|
//<2F><>¼<EFBFBD><C2BC><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
this->Close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CString str;
|
|
|
|
|
str.Format(_T("Sgip<EFBFBD><EFBFBD>Ϣ:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7>ش<EFBFBD><D8B4><EFBFBD>:%d") , pResp->Result );
|
|
|
|
|
SetErrMsg(str);
|
|
|
|
|
|
|
|
|
|
m_bLoginSgip = pResp->Result;
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::SendSms(Sgip_Send_List sms)
|
|
|
|
|
{
|
|
|
|
|
for (int j = 0; j < 200; j++)
|
|
|
|
|
{
|
|
|
|
|
if (Sms_Add(sms))
|
|
|
|
|
return sms.lSendID;
|
|
|
|
|
/*
|
|
|
|
|
//<2F>ӵ<EFBFBD>ǰ<EFBFBD>㵽<EFBFBD><E3B5BD>β
|
|
|
|
|
EnterCriticalSection(&m_CriSendSms); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
for ( int i=0 ; i< SMS_MAX_LIST; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( m_pSendList[i].lSendID == 0 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
sms.lSendTime = 0;
|
|
|
|
|
sms.lReSendCount = 0;
|
|
|
|
|
m_pSendList[i] = sms;
|
|
|
|
|
LeaveCriticalSection(&m_CriSendSms); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return sms.lSendID;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
LeaveCriticalSection(&m_CriSendSms); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
*/
|
|
|
|
|
Sleep_Lu(20); //<2F><>ʱ10<31><30>
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
/*
|
|
|
|
|
for ( int j=0 ; j< 200 ; j++ )
|
|
|
|
|
{
|
|
|
|
|
//<2F>ӵ<EFBFBD>ǰ<EFBFBD>㵽<EFBFBD><E3B5BD>β
|
|
|
|
|
EnterCriticalSection(&m_CriSendSms); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
for ( int i=0 ; i< SGIP_SMS_MAX_LIST; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( m_pSendList[i].lSendID == 0 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
sms.lSendTime = 0;
|
|
|
|
|
sms.lReSendCount = 0;
|
|
|
|
|
m_pSendList[i] = sms;
|
|
|
|
|
LeaveCriticalSection(&m_CriSendSms); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return sms.lSendID;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
LeaveCriticalSection(&m_CriSendSms); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
Sleep_Lu(50); //<2F><>ʱ10<31><30>
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
*/
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::InitSgip2()
|
|
|
|
|
{
|
|
|
|
|
if ( !Connect2() )
|
|
|
|
|
{
|
|
|
|
|
return false; //<2F><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Sgip_Bind bind={0};
|
|
|
|
|
bind.LoginType = 1;
|
|
|
|
|
strcpy(bind.LoginName,m_szSgipUser);
|
|
|
|
|
strcpy(bind.LoginPasswd,m_szSgipPasswd);
|
|
|
|
|
|
|
|
|
|
m_bLoginSgip = -1;
|
|
|
|
|
Sgip_SeqID lSeq={0};
|
|
|
|
|
if ( !SendFrame(m_hSocket,m_lNodeID,m_lID,m_dwEndSendTime,SGIP_BIND,(UCHAR*)&bind,sizeof(bind),lSeq) )
|
|
|
|
|
return -2; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ҫ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
// memset(m_pSendList,0,sizeof(Sgip_Send_List)*SGIP_SMS_MAX_LIST);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
for ( int i=0 ; i< SGIP_SMS_MAX_LIST ;i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( m_pSendList[i].lSendID > 0 )
|
|
|
|
|
{
|
|
|
|
|
m_pSendList[i].lReSendCount = 0;
|
|
|
|
|
m_pSendList[i].lSendTime = 0;
|
|
|
|
|
m_pSendList[i].lSeq = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
return -4; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
long CSgip::Back_Send()
|
|
|
|
|
{
|
|
|
|
|
long lCount = 0;
|
|
|
|
|
for (int i = 0; i < 100; i++)
|
|
|
|
|
{
|
|
|
|
|
Sgip_Send_List* pSend = 0;
|
|
|
|
|
if (Sms_Get(pSend) && pSend)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
BOOL bSend = false;
|
|
|
|
|
if (pSend->lReSendCount > 0) //ǰ<>ѷ<EFBFBD><D1B7><EFBFBD><CDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<C7B7><F1B5BDB4>ط<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
{
|
|
|
|
|
if (::GetTickCount() - pSend->lSendTime > SGIP_SENDSMS_TIMEOUT)
|
|
|
|
|
bSend = true;
|
|
|
|
|
else
|
|
|
|
|
bSend = false;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
bSend = true; //<2F><>һ<EFBFBD>η<EFBFBD><CEB7><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
if (bSend)
|
|
|
|
|
{
|
|
|
|
|
if (pSend->lReSendCount >= SGIP_SENDSMS_RECOUNT) //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD>뷢<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>
|
|
|
|
|
Sgip_Send_Resp Resp = { 0 };
|
|
|
|
|
Resp.lSendID = pSend->lSendID;
|
|
|
|
|
Resp.lReSendCount = pSend->lReSendCount;
|
|
|
|
|
Resp.lResult = -1; //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|
|
|
|
SendResp_Add(Resp);
|
|
|
|
|
pSend->lSendID = 0; //<2F><>ɾ<EFBFBD><C9BE>
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (m_lSendInterval > 0) //<2F><><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
m_lSendIntervalIndex++;
|
|
|
|
|
if (m_lSendIntervalIndex >= m_lSendIntervalCount)
|
|
|
|
|
{
|
|
|
|
|
Sleep_Lu(m_lSendInterval);
|
|
|
|
|
m_lSendIntervalIndex = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_dwEndSocketSendTime = GetTickCount(); //<2F><><EFBFBD>ڿ<EFBFBD><DABF>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ΪȺ<CEAA><C8BA>
|
|
|
|
|
//sendList.AddTail(pSend);
|
|
|
|
|
//lCount ++;
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
|
|
|
|
if (Socket_SendSms(pSend))
|
|
|
|
|
lCount++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
if ( m_bLoginSgip != 0 ) //<2F><>û<EFBFBD><C3BB>¼<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
EnterCriticalSection(&m_CriSendSms); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
long lCount = 0;
|
|
|
|
|
for ( int i=0 ; i<SGIP_SMS_MAX_LIST;i++ )
|
|
|
|
|
{
|
|
|
|
|
Sgip_Send_List * pSend = &m_pSendList[i];
|
|
|
|
|
if ( pSend->lSendID == 0 )
|
|
|
|
|
continue;
|
|
|
|
|
BOOL bSend = false;
|
|
|
|
|
if ( pSend->lReSendCount > 0 ) //ǰ<>ѷ<EFBFBD><D1B7><EFBFBD><CDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<C7B7><F1B5BDB4>ط<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
{
|
|
|
|
|
if ( ::GetTickCount()-pSend->lSendTime>SGIP_SENDSMS_TIMEOUT )
|
|
|
|
|
bSend = true;
|
|
|
|
|
else
|
|
|
|
|
bSend = false;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
bSend = true; //<2F><>һ<EFBFBD>η<EFBFBD><CEB7><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
if ( bSend )
|
|
|
|
|
{
|
|
|
|
|
if ( pSend->lReSendCount >= SGIP_SENDSMS_RECOUNT ) //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD>뷢<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>
|
|
|
|
|
Sgip_Send_Resp Resp={0};
|
|
|
|
|
Resp.lSendID = pSend->lSendID;
|
|
|
|
|
Resp.lReSendCount = pSend->lReSendCount;
|
|
|
|
|
Resp.lResult = -1; //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|
|
|
|
SendResp_Add(Resp);
|
|
|
|
|
pSend->lSendID = 0 ; //<2F><>ɾ<EFBFBD><C9BE>
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (m_lSendInterval>0 ) //<2F><><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
long lDelay=m_lSendInterval-(long)(GetTickCount()-m_dwEndSocketSendTime);
|
|
|
|
|
if ( lDelay>0 && lDelay<m_lSendInterval+5 )
|
|
|
|
|
//Sleep_Lu(lDelay-lDelay/15);
|
|
|
|
|
Sleep_Lu(lDelay);
|
|
|
|
|
}
|
|
|
|
|
m_dwEndSocketSendTime = GetTickCount(); //<2F><><EFBFBD>ڿ<EFBFBD><DABF>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|
|
|
|
|
|
|
|
|
if ( Socket_SendSms(pSend) )
|
|
|
|
|
lCount ++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
LeaveCriticalSection(&m_CriSendSms); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
*/
|
|
|
|
|
return lCount;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::Socket_SendSms(Sgip_Send_List *pSend)
|
|
|
|
|
{
|
|
|
|
|
long lSize = sizeof(pSend->Submit)+pSend->Submit.MessageLength+8; //<2F><><EFBFBD>㷢<EFBFBD><E3B7A2><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BYTE * pData = new BYTE[lSize];
|
|
|
|
|
memset(pData,0,lSize);
|
|
|
|
|
Sgip_Submit * pSubmit = (Sgip_Submit*)pData;
|
|
|
|
|
BYTE * pMsg = (BYTE*)(pData+sizeof(Sgip_Submit));
|
|
|
|
|
*pSubmit = pSend->Submit;
|
|
|
|
|
memcpy(pMsg,pSend->Msg,pSend->Submit.MessageLength);
|
|
|
|
|
pSubmit->MessageLength = htonl(pSend->Submit.MessageLength); //<2F>ֽ<EFBFBD>ת<EFBFBD><D7AA>
|
|
|
|
|
Sgip_SeqID lSeq={0};
|
|
|
|
|
if ( pSend->lSgipSeq.Sequence_Id>0 )
|
|
|
|
|
lSeq = pSend->lSgipSeq;
|
|
|
|
|
|
|
|
|
|
BOOL b = SendFrame(m_hSocket,m_lNodeID,m_lID,m_dwEndSendTime,SGIP_SUBMIT,pData,lSize,lSeq);
|
|
|
|
|
//if ( b )
|
|
|
|
|
//{
|
|
|
|
|
pSend->lReSendCount ++;
|
|
|
|
|
pSend->lSendTime = ::GetTickCount();
|
|
|
|
|
pSend->lSeq = lSeq;
|
|
|
|
|
//}
|
|
|
|
|
delete pData;
|
|
|
|
|
return b;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
long CSgip::Process_Submit(Sgip_Head head,BYTE *pData, long lLen)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
Sgip_Submit_Resp * pResp = (Sgip_Submit_Resp *)pData;
|
|
|
|
|
|
|
|
|
|
//<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>أ<EFBFBD><D8A3>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD>в<EFBFBD><D0B2>ҷ<EFBFBD><D2B7><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|
|
|
|
Sgip_Send_List * pSendSms = NULL;
|
|
|
|
|
BOOL bFind = false;
|
|
|
|
|
Sgip_SeqID lSeq = head.SeqID;
|
|
|
|
|
for ( int i=0 ; i<SGIP_SMS_MAX_LIST;i++ )
|
|
|
|
|
{
|
|
|
|
|
pSendSms = &m_pSendList[i];
|
|
|
|
|
if ( pSendSms->lSendID!=0 && pSendSms->lSeq.Sequence_Id == lSeq.Sequence_Id )
|
|
|
|
|
{
|
|
|
|
|
bFind = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( bFind )
|
|
|
|
|
{
|
|
|
|
|
if ( pSendSms->lSendID <= MAX_SGIPEXCHANGE+10 ) //С<><D0A1>-100<30><30>ʾcmppת<70><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
SgipExchangeResp resp={0};
|
|
|
|
|
resp.lType = 0;
|
|
|
|
|
resp.lSendID = pSendSms->lSendID;
|
|
|
|
|
resp.lLen = lLen;
|
|
|
|
|
resp.lCmd = head.Command_Id;
|
|
|
|
|
//resp.lSeq = pSendSms->lSgipSeq;
|
|
|
|
|
resp.lSeq = head.SeqID;
|
|
|
|
|
memcpy(resp.Data , pData , lLen );
|
|
|
|
|
SgipExchangeResp_Add(resp);
|
|
|
|
|
|
|
|
|
|
pSendSms->lSendID = 0; //ɾ<><C9BE><EFBFBD>˼<EFBFBD>¼
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Sgip_Send_Resp Resp={0};
|
|
|
|
|
Resp.lSendID = pSendSms->lSendID;
|
|
|
|
|
Resp.lReSendCount = pSendSms->lReSendCount;
|
|
|
|
|
|
|
|
|
|
Resp.lMsgID = lSeq;
|
|
|
|
|
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڣ<D6BD>id
|
|
|
|
|
//Resp.lMsgID.Node_Id=ntohl(Resp.lMsgID.Node_Id);
|
|
|
|
|
//Resp.lMsgID.Time =ntohl(Resp.lMsgID.Time);
|
|
|
|
|
//Resp.lMsgID.Sequence_Id=ntohl(Resp.lMsgID.Sequence_Id);
|
|
|
|
|
|
|
|
|
|
Resp.lResult = pResp->Result;
|
|
|
|
|
SendResp_Add(Resp);
|
|
|
|
|
|
|
|
|
|
pSendSms->lSendID = 0; //ɾ<><C9BE><EFBFBD>˼<EFBFBD>¼
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::GetSendResp(Sgip_Send_Resp &resp)
|
|
|
|
|
{
|
|
|
|
|
EnterCriticalSection(&m_CriRespList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
//<2F>ӵ<EFBFBD>ǰ<EFBFBD>㵽<EFBFBD><E3B5BD>β
|
|
|
|
|
for ( int i=m_lRespList ; i< SGIP_SMS_MAX_RESP; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( m_pRespList[i].lSendID != 0 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
m_lRespList = i+1;
|
|
|
|
|
resp = m_pRespList[i];
|
|
|
|
|
m_pRespList[i].lSendID = 0;
|
|
|
|
|
LeaveCriticalSection(&m_CriRespList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F>ӿ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>
|
|
|
|
|
for ( i=0 ; i<m_lRespList; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( m_pRespList[i].lSendID != 0 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
m_lRespList = i+1;
|
|
|
|
|
resp = m_pRespList[i];
|
|
|
|
|
m_pRespList[i].lSendID = 0;
|
|
|
|
|
LeaveCriticalSection(&m_CriRespList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
m_lRespList = 0;
|
|
|
|
|
LeaveCriticalSection(&m_CriRespList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
long CSgip::Process_Active(Sgip_Head head, BYTE *pData, long lLen)
|
|
|
|
|
{
|
|
|
|
|
m_dwTestCount = 0; //<2F>յ<EFBFBD>activeָ<65><EFBFBD><EEA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>
|
|
|
|
|
Sgip_SeqID lReq = head.SeqID;
|
|
|
|
|
SendFrame(m_hSocket, m_lNodeID, m_lID, m_dwEndSendTime, SGIP_DELIVER_RESP, NULL, 0, lReq);
|
|
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
long CSgip::Process_Deliver(SOCKET sock,Sgip_Head head, BYTE *pData, long lLen)
|
|
|
|
|
{
|
|
|
|
|
Sgip_Deliver * pDeliver = (Sgip_Deliver *)pData;
|
|
|
|
|
BYTE * pMsgData = pData+sizeof(Sgip_Deliver);
|
|
|
|
|
//<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD>cmppת<70>ӵĶ<D3B5><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
BOOL bExchange=false;
|
|
|
|
|
if ( m_pSgipExchange )
|
|
|
|
|
{
|
|
|
|
|
long lExNum=0;
|
|
|
|
|
for ( int i=0 ; i<m_lSgipExchange;i++ )
|
|
|
|
|
{
|
|
|
|
|
if (m_pSgipExchange[i].sock != 0 && m_pSgipExchange[i].sock != INVALID_SOCKET &&
|
|
|
|
|
strlen(m_pSgipExchange[i].szNum)>0 &&
|
|
|
|
|
!strncmp((char*)pDeliver->SPNumber,m_pSgipExchange[i].szNum,strlen(m_pSgipExchange[i].szNum) ) )
|
|
|
|
|
{
|
|
|
|
|
SgipExchangeResp resp={0};
|
|
|
|
|
resp.lType = 1;
|
|
|
|
|
strcpy(resp.szNum , m_pSgipExchange[i].szNum );
|
|
|
|
|
resp.lExNum = lExNum; //adc<64><63><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ʱ<EFBFBD>õ<EFBFBD>
|
|
|
|
|
resp.lLen = lLen;
|
|
|
|
|
resp.lCmd = head.Command_Id;
|
|
|
|
|
resp.lSeq = head.SeqID;
|
|
|
|
|
memcpy(resp.Data , pData , lLen );
|
|
|
|
|
SgipExchangeResp_Add(resp);
|
|
|
|
|
bExchange = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if ( !bExchange)
|
|
|
|
|
{
|
|
|
|
|
Sgip_Deliver_List Deliver={0};
|
|
|
|
|
Deliver.lSendID = 1;
|
|
|
|
|
|
|
|
|
|
Deliver.lMsgID = head.SeqID;
|
|
|
|
|
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڣ<D6BD>id
|
|
|
|
|
Deliver.lMsgID.Node_Id=ntohl(Deliver.lMsgID.Node_Id);
|
|
|
|
|
Deliver.lMsgID.Time =ntohl(Deliver.lMsgID.Time);
|
|
|
|
|
Deliver.lMsgID.Sequence_Id=ntohl(Deliver.lMsgID.Sequence_Id);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Deliver.deliver = *pDeliver;
|
|
|
|
|
|
|
|
|
|
Deliver.deliver.MessageLength = ntohl(Deliver.deliver.MessageLength);
|
|
|
|
|
|
|
|
|
|
memcpy(Deliver.szMsg,pMsgData,Deliver.deliver.MessageLength ); //ȡ<><C8A1>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
//Status_Add(Deliver); //<2F><><EFBFBD>ӵ<EFBFBD><D3B5>б<EFBFBD>
|
|
|
|
|
Deliver_Add(Deliver); //<2F><><EFBFBD>ӵ<EFBFBD><D3B5>б<EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>
|
|
|
|
|
Sgip_Deliver_Resp sresp={0};
|
|
|
|
|
sresp.Result = 0;
|
|
|
|
|
Sgip_SeqID lReq=head.SeqID;
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if ( sock == m_hSocket )
|
|
|
|
|
{
|
|
|
|
|
SendFrame(sock,m_lNodeID,m_lID,m_dwEndSendTime,SGIP_DELIVER_RESP,(BYTE*)&sresp,sizeof(sresp),lReq);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
DWORD dwEndSendTime=0;
|
|
|
|
|
SendFrame(sock,m_lNodeID,m_lID,dwEndSendTime,SGIP_DELIVER_RESP,(BYTE*)&sresp,sizeof(sresp),lReq);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
long CSgip::Process_Report(SOCKET sock,Sgip_Head head, BYTE *pData, long lLen)
|
|
|
|
|
{
|
|
|
|
|
Sgip_Report * pReport = (Sgip_Report *)pData;
|
|
|
|
|
BYTE * pMsgData = pData+sizeof(Sgip_Deliver);
|
|
|
|
|
|
|
|
|
|
Sgip_SeqID lMsgID=pReport->lMsgID;
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڣ<D6BD>id
|
|
|
|
|
lMsgID.Node_Id=ntohl(lMsgID.Node_Id);
|
|
|
|
|
lMsgID.Time =ntohl(lMsgID.Time);
|
|
|
|
|
lMsgID.Sequence_Id=ntohl(lMsgID.Sequence_Id);
|
|
|
|
|
//<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD>cmppת<70>ӵĶ<D3B5><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
BOOL bExchange=false;
|
|
|
|
|
if ( m_pSgipExchange )
|
|
|
|
|
{
|
|
|
|
|
long lExNum=0;
|
|
|
|
|
/*
|
|
|
|
|
if ( m_bAdc ) //&& pDeliver->Registered_Deliveryֻת<D6BB><D7AA>״̬<D7B4><CCAC><EFBFBD>棬<EFBFBD><E6A3AC><EFBFBD>ж<EFBFBD><D0B6>Ų<EFBFBD>ת<EFBFBD><D7AA>
|
|
|
|
|
{
|
|
|
|
|
char szTemp[32]={0};
|
|
|
|
|
strcpy( szTemp , (char*)pDeliver->Dest_Id+10 );
|
|
|
|
|
szTemp[4]=0;
|
|
|
|
|
lExNum = atol(szTemp);
|
|
|
|
|
if ( lExNum>=3800 && lExNum<4499 && lExNum!=4474 )
|
|
|
|
|
{
|
|
|
|
|
strcpy(szTemp , (char*)pDeliver->Dest_Id+14 );
|
|
|
|
|
szTemp[6]=0;
|
|
|
|
|
wsprintf((char*)pDeliver->Dest_Id , "1065710055%s",szTemp ); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ֱ<EFBFBD><D6B1>ʹ<EFBFBD><CAB9><EFBFBD>ܶ˿<DCB6>
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
for ( int i=0 ; i<m_lSgipExchange;i++ )
|
|
|
|
|
{
|
|
|
|
|
ULONG lExID=lMsgID.Sequence_Id/0x1000000;
|
|
|
|
|
if (m_pSgipExchange[i].sock != 0 && m_pSgipExchange[i].sock != INVALID_SOCKET &&
|
|
|
|
|
strlen(m_pSgipExchange[i].szNum)>0 &&
|
|
|
|
|
(lExID == m_pSgipExchange[i].lExID || lMsgID.Node_Id == m_pSgipExchange[i].lNodeID) )
|
|
|
|
|
{
|
|
|
|
|
SgipExchangeResp resp={0};
|
|
|
|
|
resp.lType = 1;
|
|
|
|
|
strcpy(resp.szNum , m_pSgipExchange[i].szNum );
|
|
|
|
|
resp.lExNum = lExNum; //adc<64><63><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ʱ<EFBFBD>õ<EFBFBD>
|
|
|
|
|
resp.lLen = lLen;
|
|
|
|
|
resp.lCmd = head.Command_Id;
|
|
|
|
|
resp.lSeq = head.SeqID;
|
|
|
|
|
memcpy(resp.Data , pData , lLen );
|
|
|
|
|
SgipExchangeResp_Add(resp);
|
|
|
|
|
bExchange = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( !bExchange)
|
|
|
|
|
{
|
|
|
|
|
Sgip_Deliver_List Deliver={0};
|
|
|
|
|
Deliver.lSendID = 1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Deliver.lMsgID = lMsgID;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Deliver.status = *pReport;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Status_Add(Deliver); //<2F><><EFBFBD>ӵ<EFBFBD><D3B5>б<EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>
|
|
|
|
|
Sgip_Deliver_Resp sresp={0};
|
|
|
|
|
sresp.Result = 0;
|
|
|
|
|
Sgip_SeqID lReq=head.SeqID;
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if ( sock == m_hSocket )
|
|
|
|
|
{
|
|
|
|
|
SendFrame(sock,m_lNodeID,m_lID,m_dwEndSendTime,SGIP_REPORT_RESP,(BYTE*)&sresp,sizeof(sresp),lReq);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
DWORD dwEndSendTime=0;
|
|
|
|
|
SendFrame(sock,m_lNodeID,m_lID,dwEndSendTime,SGIP_REPORT_RESP,(BYTE*)&sresp,sizeof(sresp),lReq);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::GetDeliver(Sgip_Deliver_List &deliver)
|
|
|
|
|
{
|
|
|
|
|
EnterCriticalSection(&m_CriDeliverList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
//<2F>ӵ<EFBFBD>ǰ<EFBFBD>㵽<EFBFBD><E3B5BD>β
|
|
|
|
|
for ( int i=m_lDeliverList ; i< SGIP_SMS_MAX_DELIVER; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( m_pDeliverList[i].lSendID != 0 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
m_lDeliverList = i+1;
|
|
|
|
|
deliver = m_pDeliverList[i];
|
|
|
|
|
m_pDeliverList[i].lSendID = 0;
|
|
|
|
|
LeaveCriticalSection(&m_CriDeliverList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F>ӿ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>
|
|
|
|
|
for ( i=0 ; i<m_lDeliverList; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( m_pDeliverList[i].lSendID != 0 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
m_lDeliverList = i+1;
|
|
|
|
|
deliver = m_pDeliverList[i];
|
|
|
|
|
m_pDeliverList[i].lSendID = 0;
|
|
|
|
|
LeaveCriticalSection(&m_CriDeliverList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
m_lDeliverList = 0;
|
|
|
|
|
LeaveCriticalSection(&m_CriDeliverList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::Sgip_Exit()
|
|
|
|
|
{
|
|
|
|
|
m_bInitSgip = false; //<2F>ѳ<EFBFBD>ʼ<EFBFBD><CABC>
|
|
|
|
|
Sgip_SeqID lSeq={0};
|
|
|
|
|
SendFrame(m_hSocket,m_lNodeID,m_lID,m_dwEndSendTime,SGIP_UNBIND,NULL,0,lSeq);
|
|
|
|
|
|
|
|
|
|
Stop(); //ֹͣ
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
void CSgip::UCS2ToAscii2(char *pUCS2, char *pAscii, long lSrcLen)
|
|
|
|
|
{
|
|
|
|
|
UINT nLen = 0;
|
|
|
|
|
for(int i = 0; i < lSrcLen/2; i++)
|
|
|
|
|
*((unsigned short*)pUCS2 + i) = ntohs(*((unsigned short*)pUCS2 + i));
|
|
|
|
|
|
|
|
|
|
nLen = WideCharToMultiByte(936, WC_COMPOSITECHECK,
|
|
|
|
|
(WCHAR*)pUCS2, lSrcLen/2, pAscii,lSrcLen, NULL, NULL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::SendResp_Add(Sgip_Send_Resp resp)
|
|
|
|
|
{
|
|
|
|
|
EnterCriticalSection(&m_CriRespList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
//<2F>ӵ<EFBFBD>ǰ<EFBFBD>㵽<EFBFBD><E3B5BD>β
|
|
|
|
|
for ( int i=m_lRespList ; i< SGIP_SMS_MAX_RESP; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( m_pRespList[i].lSendID == 0 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
m_pRespList[i] = resp;
|
|
|
|
|
LeaveCriticalSection(&m_CriRespList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F>ӿ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>
|
|
|
|
|
for ( i=0 ; i<m_lRespList; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( m_pRespList[i].lSendID == 0 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
m_pRespList[i] = resp;
|
|
|
|
|
LeaveCriticalSection(&m_CriRespList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
LeaveCriticalSection(&m_CriRespList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::Deliver_Add(Sgip_Deliver_List Deliver)
|
|
|
|
|
{
|
|
|
|
|
EnterCriticalSection(&m_CriDeliverList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
//<2F>ӵ<EFBFBD>ǰ<EFBFBD>㵽<EFBFBD><E3B5BD>β
|
|
|
|
|
for ( int i=m_lDeliverList ; i< SGIP_SMS_MAX_DELIVER; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( m_pDeliverList[i].lSendID == 0 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
m_pDeliverList[i] = Deliver;
|
|
|
|
|
LeaveCriticalSection(&m_CriDeliverList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F>ӿ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>
|
|
|
|
|
for ( i=0 ; i<m_lDeliverList; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( m_pDeliverList[i].lSendID == 0 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
m_pDeliverList[i] = Deliver;
|
|
|
|
|
LeaveCriticalSection(&m_CriDeliverList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
LeaveCriticalSection(&m_CriDeliverList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
long CSgip::Sgip_SendSms(const char * SendNo , const char * RecvNo,long Msg_Fmt,long udhi,long Msg_Length,BOOL bHandFree,const BYTE * Msg ,const char * Service_Id,long Fee_UserType,const char * FeeType, const char * FeeCode ,long Registered_Delivery,const char *ValId_Time,const char *At_Time,long lSendID,char * MsgID, BOOL bNo86)
|
|
|
|
|
{
|
|
|
|
|
if ( !m_bInitSgip )
|
|
|
|
|
return -1; //<2F>ӿ<EFBFBD>δ<EFBFBD><CEB4>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//m_lSendID ++; //<2F><><EFBFBD><EFBFBD>ID<49><44>1
|
|
|
|
|
m_lSendID = lSendID; //ʹ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
|
|
|
|
|
Sgip_Send_List list={0};
|
|
|
|
|
list.lSendID = m_lSendID; //SendID
|
|
|
|
|
|
|
|
|
|
//ȡԭ<C8A1><D4AD>ַ<EFBFBD><D6B7><EFBFBD>Ͳ<EFBFBD>ת<EFBFBD><D7AA>
|
|
|
|
|
strcpy( (char*)list.Submit.SPNumber , SendNo ); //Դ<><D4B4><EFBFBD><EFBFBD>
|
|
|
|
|
//ȡĿ<C8A1><C4BF><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>Ͳ<EFBFBD>ת<EFBFBD><D7AA>
|
|
|
|
|
//GetMobilePhoneTON( RecvNo , (char*)list.Submit.ChargeNumber ); //<2F><><EFBFBD>Ѻ<EFBFBD><D1BA><EFBFBD>
|
|
|
|
|
strcpy((char*)list.Submit.ChargeNumber , "000000000000000000000" );
|
|
|
|
|
list.Submit.UserCount = 1; //<2F>û<EFBFBD><C3BB><EFBFBD>
|
|
|
|
|
|
|
|
|
|
if (bNo86)
|
|
|
|
|
strcpy((char*)list.Submit.UserNumber, RecvNo); //Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
else
|
|
|
|
|
GetMobilePhoneTON( RecvNo , (char*)list.Submit.UserNumber ); //Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
strcpy((char*)list.Submit.CorpId , m_szSgipCorpID); //<2F><>ҵID
|
|
|
|
|
strcpy((char*)list.Submit.ServiceType , Service_Id ); //ҵ<><D2B5>ID
|
|
|
|
|
//list.Submit.FeeType = 0x31; //<2F>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD>,<2C><>Ѷƽ̨
|
|
|
|
|
list.Submit.FeeType = 0x01; //<2F>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ƽ̨
|
|
|
|
|
strcpy((char*)list.Submit.FeeValue , "000000" );//<2F>շ<EFBFBD>
|
|
|
|
|
strcpy((char*)list.Submit.GivenValue , "000000" );//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
list.Submit.AgentFlag = 0x00; //<2F>շѱ<D5B7>־
|
|
|
|
|
list.Submit.MorelatetoMTFlag = 2; //<2F><><EFBFBD><EFBFBD>MT<4D><54>Ϣ<EFBFBD><CFA2>ԭ<EFBFBD><D4AD>
|
|
|
|
|
list.Submit.Priority = 5; //<2F><><EFBFBD>ȼ<EFBFBD>
|
|
|
|
|
strcpy((char*)list.Submit.ExpireTime , "" ); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
strcpy((char*)list.Submit.ScheduleTime , "" ); //<2F><>ʱʱ<CAB1><CAB1>
|
|
|
|
|
list.Submit.ReportFlag = (unsigned char )Registered_Delivery; //״̬<D7B4><CCAC><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
list.Submit.TP_pid = 0; /*Э<><D0AD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>ȱʡΪ0<CEAA><30>*/
|
|
|
|
|
list.Submit.TP_udhi=(UCHAR)udhi; /*<2A><><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>ʾUserData<74>Ƿ<EFBFBD><C7B7>ǽṹ,0,<2C><><EFBFBD><EFBFBD>,1<>ṹ*/
|
|
|
|
|
list.Submit.MessageCoding =0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
list.Submit.MessageType = 0; //<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
|
|
|
|
list.Submit.MessageLength=0; //Ĭ<><C4AC><EFBFBD><EFBFBD>Ϊ0
|
|
|
|
|
//list.Submit.MessageContent
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char * pMsgSrc= (char*)Msg;
|
|
|
|
|
char * pMsgOK = (char*)list.Msg;
|
|
|
|
|
long ludhiLen=0;
|
|
|
|
|
if ( list.Submit.TP_udhi == 1 )
|
|
|
|
|
{
|
|
|
|
|
memcpy(pMsgOK,pMsgSrc,6); //ԭ<>ֽ<EFBFBD>ͷ
|
|
|
|
|
|
|
|
|
|
//list.Submit.Pk_total = pMsgOK[4]; //*<2A><>ͬMsg_id<69><64><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>ʼ*/
|
|
|
|
|
//list.Submit.Pk_number = pMsgOK[5]; /*<2A><>ͬMsg_id<69><64><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD>1<EFBFBD><31>ʼ*/
|
|
|
|
|
|
|
|
|
|
pMsgSrc = pMsgSrc+6;
|
|
|
|
|
pMsgOK = pMsgOK+6; //<2F><><EFBFBD><EFBFBD>6λ<36><CEBB><EFBFBD>Ķ<EFBFBD><C4B6>ŷָ<C5B7>
|
|
|
|
|
ludhiLen = 6;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( Msg_Fmt==0 && Msg_Length==0 )
|
|
|
|
|
{
|
|
|
|
|
//ȡ<><C8A1><EFBFBD>뷽ʽ
|
|
|
|
|
//if ( isChinese((char*)pMsgSrc,strlen((char*)pMsgSrc) ) )
|
|
|
|
|
if ( true )
|
|
|
|
|
{
|
|
|
|
|
if ( bHandFree )
|
|
|
|
|
list.Submit.MessageCoding = 0x18;//UCS2<53><32><EFBFBD><EFBFBD>
|
|
|
|
|
else
|
|
|
|
|
list.Submit.MessageCoding = 8;//UCS2<53><32><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
unsigned short * pusSrc = (unsigned short *)pMsgSrc;
|
|
|
|
|
unsigned short * pusTag = (unsigned short *)pMsgOK;
|
|
|
|
|
long lSrcLen = wcslen((WCHAR*)pMsgSrc);
|
|
|
|
|
if ( lSrcLen>(70-ludhiLen/2) ) lSrcLen=(70-ludhiLen/2);
|
|
|
|
|
for ( int i=0 ; i<lSrcLen ; i++ )
|
|
|
|
|
{
|
|
|
|
|
pusTag[i] = htons(pusSrc[i]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//wcscpy((WCHAR*)pMsgOK,(WCHAR*)pMsgSrc);
|
|
|
|
|
//((WCHAR*)pMsgOK)[70]=0;
|
|
|
|
|
|
|
|
|
|
list.Submit.MessageLength = lSrcLen*2+ludhiLen;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if ( bHandFree )
|
|
|
|
|
list.Submit.MessageCoding = 0x10;//7Bit<69><74><EFBFBD><EFBFBD>
|
|
|
|
|
else
|
|
|
|
|
list.Submit.MessageCoding = 0;//7Bit<69><74><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
char szBuf[1024]={0};
|
|
|
|
|
UCS2ToAscii((WCHAR*)pMsgSrc,szBuf);
|
|
|
|
|
char * pMsg = (char*)szBuf;
|
|
|
|
|
pMsg[160]=0; //<2F><>ֹ<EFBFBD><D6B9><EFBFBD>ų<EFBFBD><C5B3><EFBFBD>
|
|
|
|
|
list.Submit.MessageLength = (UCHAR)(strlen((char*)pMsg)+ludhiLen);
|
|
|
|
|
strcpy((char*)pMsgOK,(char*)pMsg);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
list.Submit.MessageCoding = (unsigned char)Msg_Fmt;//hex<65><78><EFBFBD><EFBFBD>
|
|
|
|
|
list.Submit.MessageLength = (unsigned char)(Msg_Length/2);
|
|
|
|
|
HexToAscii((const char*)pMsgSrc,(char*)pMsgOK);
|
|
|
|
|
//memcpy(list.Msg,Msg,Msg_Length);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return SendSms(list); //<2F><><EFBFBD>뷢<EFBFBD><EBB7A2><EFBFBD>б<EFBFBD>
|
|
|
|
|
/*
|
|
|
|
|
//<2F><><EFBFBD>¼<EFBFBD><C2BC>ⷢ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>
|
|
|
|
|
DWORD dwTime = ::GetTickCount();
|
|
|
|
|
while ( ::GetTickCount()-dwTime < SGIP_SENDSMS_TIMEOUT + 5000 )
|
|
|
|
|
{
|
|
|
|
|
Sgip_Send_Resp resp={0};
|
|
|
|
|
if ( GetSendResp(resp) &&
|
|
|
|
|
resp.lSendID == m_lSendID)
|
|
|
|
|
{
|
|
|
|
|
sprintf( MsgID , "%I64u" , resp.lMsgID );
|
|
|
|
|
return resp.lResult; //<2F><><EFBFBD>ͳɹ<CDB3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>cmpp<70>ķ<EFBFBD><C4B7>ز<EFBFBD><D8B2><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
Sleep_Lu( 100 );
|
|
|
|
|
}
|
|
|
|
|
return -3; //<2F><><EFBFBD>ͳ<EFBFBD>ʱ
|
|
|
|
|
*/
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
unsigned char CSgip::GetMobilePhoneTON(const char *pSrc, char *pOrg)
|
|
|
|
|
{
|
|
|
|
|
char szTemp[32]={0};
|
|
|
|
|
long lBegin = 0;
|
|
|
|
|
long lLen = strlen( pSrc );
|
|
|
|
|
unsigned lTON = 2; //2,<2C><><EFBFBD>ں<EFBFBD><DABA><EFBFBD>,1,<2C><><EFBFBD>ʺ<EFBFBD><CABA><EFBFBD>
|
|
|
|
|
if ( pSrc[0] == '+')
|
|
|
|
|
lBegin = 1; //ȥ<><C8A5>"+"<22><>
|
|
|
|
|
if ( pSrc[lBegin] == '0' && pSrc[lBegin+1] == '0' )
|
|
|
|
|
lBegin += 2; //ȥ<><C8A5>"00"
|
|
|
|
|
|
|
|
|
|
strcpy( szTemp , pSrc+lBegin ); //<2F><><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5>"+"<22><><EFBFBD><EFBFBD>"00"<22>ĺ<EFBFBD><C4BA><EFBFBD>
|
|
|
|
|
if ( szTemp[0]=='8' && szTemp[1] =='6' ) //<2F><><EFBFBD>к<EFBFBD><D0BA>붼Ҫ<EBB6BC><D2AA>86<38><36>ͷ
|
|
|
|
|
{
|
|
|
|
|
strcpy( pOrg,szTemp);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef SGIP_3_0
|
|
|
|
|
sprintf( pOrg , "%s",szTemp);
|
|
|
|
|
#else
|
|
|
|
|
sprintf( pOrg , "86%s",szTemp);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// if ( pSrc[lBegin]=='8' && pSrc[lBegin+1] =='6' ) //<2F><>Ϊ86<38><36>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// lTON = 1; //<2F><><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return lTON;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::isChinese(const TCHAR *pSrc, long lSrcLen)
|
|
|
|
|
{
|
|
|
|
|
long lLen = lSrcLen;
|
|
|
|
|
if ( lLen <=0 )
|
|
|
|
|
lLen = _tcslen(pSrc);
|
|
|
|
|
|
|
|
|
|
#ifdef _UNICODE
|
|
|
|
|
for ( long i=0 ; i<lLen ; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( (BYTE)pSrc[i]>128 )
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
#else
|
|
|
|
|
char szBuf[4096];
|
|
|
|
|
long l = MultiByteToWideChar( CP_ACP,NULL,pSrc,lLen, (LPWSTR)szBuf , sizeof(szBuf) );
|
|
|
|
|
if ( l == lLen )
|
|
|
|
|
return false;
|
|
|
|
|
else
|
|
|
|
|
return true;
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
long CSgip::UCS2ToAscii( const WCHAR * pUCS2 , char * pAscii)
|
|
|
|
|
{
|
|
|
|
|
long lLen = wcslen( pUCS2 );
|
|
|
|
|
long l = WideCharToMultiByte(CP_ACP,NULL,pUCS2,lLen, pAscii , 4096 ,NULL,NULL);
|
|
|
|
|
pAscii[l]=0;
|
|
|
|
|
return l;
|
|
|
|
|
}
|
|
|
|
|
long CSgip::AsciiToUCS2(const char *pAscii, WCHAR *pUCS2)
|
|
|
|
|
{
|
|
|
|
|
long lLen = strlen( pAscii );
|
|
|
|
|
long l = MultiByteToWideChar( CP_ACP,NULL,pAscii,lLen, pUCS2 , 4096 );
|
|
|
|
|
pUCS2[l]=0;
|
|
|
|
|
return l;
|
|
|
|
|
// szName2[l*2]=0;
|
|
|
|
|
/*
|
|
|
|
|
AsciiToHex( szName2 , pUCS2 , l*2);
|
|
|
|
|
ExchangeUniCode( pUCS2 );
|
|
|
|
|
*/
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CSgip::HexToAscii(const 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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CSgip::ExchangeUniCode(char *pData)
|
|
|
|
|
{
|
|
|
|
|
char pEx[4];
|
|
|
|
|
long lLen = strlen( pData );
|
|
|
|
|
for ( int i = 0 ; i< lLen/4 ; i++ )
|
|
|
|
|
{
|
|
|
|
|
memcpy( pEx , pData+i*4 , 2 );
|
|
|
|
|
memcpy( pData+i*4 , pData+i*4+2 , 2 );
|
|
|
|
|
memcpy( pData+i*4+2 , pEx , 2 );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CSgip::AsciiToHex(const char *pszOrgRandom, TCHAR *pszDesRandom, long lLen)
|
|
|
|
|
{
|
|
|
|
|
#ifdef _UNICODE
|
|
|
|
|
TCHAR *p = (TCHAR *)pszDesRandom;
|
|
|
|
|
//long lLen = lstrlen( (char*)pszOrgRandom);
|
|
|
|
|
for( long i = 0; i < lLen; ++i )
|
|
|
|
|
{
|
|
|
|
|
_stprintf(p, _T("%02X"), (BYTE)pszOrgRandom[i] );
|
|
|
|
|
p += 2;
|
|
|
|
|
}
|
|
|
|
|
*p=0;
|
|
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
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;
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CSgip::CharHex(char ch)
|
|
|
|
|
{
|
|
|
|
|
//if( isdigit( ch ) ) return( atoi( &ch) );
|
|
|
|
|
if( ch >='0' && ch <= '9' ) return( atoi( &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 );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::GetStatus(Sgip_Deliver_List &deliver)
|
|
|
|
|
{
|
|
|
|
|
EnterCriticalSection(&m_CriStatusList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
//<2F>ӵ<EFBFBD>ǰ<EFBFBD>㵽<EFBFBD><E3B5BD>β
|
|
|
|
|
for ( int i=m_lStatusList ; i< SGIP_SMS_MAX_STATUS; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( m_pStatusList[i].lSendID != 0 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
m_lStatusList = i+1;
|
|
|
|
|
deliver = m_pStatusList[i];
|
|
|
|
|
m_pStatusList[i].lSendID = 0;
|
|
|
|
|
LeaveCriticalSection(&m_CriStatusList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F>ӿ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>
|
|
|
|
|
for ( i=0 ; i<m_lStatusList; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( m_pStatusList[i].lSendID != 0 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
m_lStatusList = i+1;
|
|
|
|
|
deliver = m_pStatusList[i];
|
|
|
|
|
m_pStatusList[i].lSendID = 0;
|
|
|
|
|
LeaveCriticalSection(&m_CriStatusList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
m_lStatusList = 0;
|
|
|
|
|
LeaveCriticalSection(&m_CriStatusList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::Status_Add(Sgip_Deliver_List Deliver)
|
|
|
|
|
{
|
|
|
|
|
EnterCriticalSection(&m_CriStatusList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
//<2F>ӵ<EFBFBD>ǰ<EFBFBD>㵽<EFBFBD><E3B5BD>β
|
|
|
|
|
for ( int i=m_lStatusList ; i< SGIP_SMS_MAX_STATUS; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( m_pStatusList[i].lSendID == 0 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
m_pStatusList[i] = Deliver;
|
|
|
|
|
LeaveCriticalSection(&m_CriStatusList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F>ӿ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>
|
|
|
|
|
for ( i=0 ; i<m_lStatusList; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( m_pStatusList[i].lSendID == 0 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
m_pStatusList[i] = Deliver;
|
|
|
|
|
LeaveCriticalSection(&m_CriStatusList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
LeaveCriticalSection(&m_CriStatusList); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
long CSgip::Sgip_Get(TCHAR *SendNo,TCHAR * RecvNo, BYTE *Msg, TCHAR *Msg_Fmt, TCHAR *Msg_Length ,long & lLongMsgRand ,long & lLongMsgAll, long & lLongMsgIndex)
|
|
|
|
|
{
|
|
|
|
|
Sgip_Deliver_List deliver={0};
|
|
|
|
|
|
|
|
|
|
if ( GetDeliver(deliver) )
|
|
|
|
|
{
|
|
|
|
|
_tcsncpy( SendNo , CA2W((char*)deliver.deliver.UserNumber),21 );
|
|
|
|
|
_tcsncpy( RecvNo , CA2W((char*)deliver.deliver.SPNumber),21 );
|
|
|
|
|
BYTE * pMsg = (BYTE *)deliver.szMsg;
|
|
|
|
|
long lMsgLen=deliver.deliver.MessageLength;
|
|
|
|
|
|
|
|
|
|
//if ( deliver.deliver.TP_udhi == 1 ) //<2F>ж<EFBFBD><D0B6>Ƿ<C7B7><F1B3A4B6><EFBFBD>
|
|
|
|
|
//{
|
|
|
|
|
if ( pMsg[0]==5 && pMsg[1]==0 && pMsg[2]==3 )
|
|
|
|
|
{
|
|
|
|
|
lLongMsgRand = pMsg[3];
|
|
|
|
|
lLongMsgAll = pMsg[4];
|
|
|
|
|
lLongMsgIndex = pMsg[5];
|
|
|
|
|
|
|
|
|
|
pMsg = pMsg+6;
|
|
|
|
|
lMsgLen -=6;
|
|
|
|
|
}
|
|
|
|
|
if ( pMsg[0]==6 && pMsg[1]==8 && pMsg[2]==4 )
|
|
|
|
|
{
|
|
|
|
|
lLongMsgRand = pMsg[3]*100+pMsg[4];
|
|
|
|
|
lLongMsgAll = pMsg[5];
|
|
|
|
|
lLongMsgIndex = pMsg[6];
|
|
|
|
|
|
|
|
|
|
pMsg = pMsg+7;
|
|
|
|
|
lMsgLen -=7;
|
|
|
|
|
}
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
if ( Msg_Fmt==NULL && Msg_Length==NULL ) //<2F>Զ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
if (deliver.deliver.MessageCoding == 15 ) //gbk<62><6B><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
_tcscpy((WCHAR*)Msg,CA2W((char*)pMsg));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (deliver.deliver.MessageCoding & 8 ) //ucs2,Ҫ<><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
unsigned short * pusSrc = (unsigned short *)pMsg;
|
|
|
|
|
unsigned short * pusTag = (unsigned short *)Msg;
|
|
|
|
|
long lSrcLen = lMsgLen/2;
|
|
|
|
|
for ( int i=0 ; i<lSrcLen ; i++ )
|
|
|
|
|
{
|
|
|
|
|
pusTag[i] = ntohs(pusSrc[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (deliver.deliver.MessageCoding & 4 )// hex<65><78><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
_tcscpy((TCHAR*)Msg,_T("HEX16:"));
|
|
|
|
|
if ( deliver.deliver.MessageLength>70 )
|
|
|
|
|
deliver.deliver.MessageLength=70;
|
|
|
|
|
AsciiToHex((const char*)pMsg,((TCHAR*)Msg)+6,lMsgLen);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
_tcscpy((WCHAR*)Msg,CA2W((char*)pMsg));
|
|
|
|
|
//AsciiToUCS2((const char*)pMsg , (TCHAR*)Msg);
|
|
|
|
|
//memcpy(Msg,pMsg,lMsgLen);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
AsciiToHex((const char*)deliver.szMsg,(TCHAR*)Msg,deliver.deliver.MessageLength); //ת<><D7AA><EFBFBD><EFBFBD>Hex<65><78><EFBFBD><EFBFBD>
|
|
|
|
|
//memcpy(Msg,deliver.szMsg,deliver.deliver.Msg_Length);
|
|
|
|
|
if ( Msg_Fmt )
|
|
|
|
|
_stprintf( Msg_Fmt , _T("%d") , deliver.deliver.MessageCoding );
|
|
|
|
|
if ( Msg_Length )
|
|
|
|
|
_stprintf( Msg_Length , _T("%d") , deliver.deliver.MessageLength*2 );
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return -1; //û<><C3BB><EFBFBD><EFBFBD>Ϣ
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
long CSgip::Sgip_GetReport(TCHAR *No, TCHAR *Stat, TCHAR *Done_time, TCHAR *MsgID)
|
|
|
|
|
{
|
|
|
|
|
Sgip_Deliver_List deliver={0};
|
|
|
|
|
|
|
|
|
|
if ( GetStatus(deliver) )
|
|
|
|
|
{
|
|
|
|
|
_tcscpy( No , CA2W((char*)deliver.status.UserNumber) );
|
|
|
|
|
//strcpy( Stat , (char*)deliver.status.Stat );
|
|
|
|
|
if ( deliver.status.State == 2 ) //<2F>д<EFBFBD><D0B4><EFBFBD>
|
|
|
|
|
_stprintf( Stat , _T("%d") , deliver.status.ErrorCode );
|
|
|
|
|
else
|
|
|
|
|
_tcscpy( Stat , _T("DELIVRD"));
|
|
|
|
|
//strcpy( Done_time , (char*)deliver.status.Done_time );
|
|
|
|
|
//strncpy( Done_time , (char*)deliver.status.Done_time , 10 );
|
|
|
|
|
_stprintf( MsgID , _T("%010u%010u%010u") , deliver.lMsgID.Node_Id,deliver.lMsgID.Time,deliver.lMsgID.Sequence_Id );
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
return -1; //û<><C3BB><EFBFBD><EFBFBD>Ϣ
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::GetSgipExchangeResp(SgipExchangeResp &resp)
|
|
|
|
|
{
|
|
|
|
|
EnterCriticalSection(&m_CriSgipExchangeResp); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
//<2F>ӵ<EFBFBD>ǰ<EFBFBD>㵽<EFBFBD><E3B5BD>β
|
|
|
|
|
for ( int i=m_lSgipExchangeRespList ; i< SGIP_SMS_MAX_SGIPEXCHANGERESP; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( m_pSgipExchangeResp[i].lLen != 0 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
m_lSgipExchangeRespList = i+1;
|
|
|
|
|
resp = m_pSgipExchangeResp[i];
|
|
|
|
|
m_pSgipExchangeResp[i].lLen = 0;
|
|
|
|
|
LeaveCriticalSection(&m_CriSgipExchangeResp); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F>ӿ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>
|
|
|
|
|
for ( i=0 ; i<m_lSgipExchangeRespList; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( m_pSgipExchangeResp[i].lLen != 0 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
m_lSgipExchangeRespList = i+1;
|
|
|
|
|
resp = m_pSgipExchangeResp[i];
|
|
|
|
|
m_pSgipExchangeResp[i].lLen = 0;
|
|
|
|
|
LeaveCriticalSection(&m_CriSgipExchangeResp); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
m_lSgipExchangeRespList = 0;
|
|
|
|
|
LeaveCriticalSection(&m_CriSgipExchangeResp); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::SgipExchangeResp_Add(SgipExchangeResp resp)
|
|
|
|
|
{
|
|
|
|
|
EnterCriticalSection(&m_CriSgipExchangeResp); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
//<2F>ӵ<EFBFBD>ǰ<EFBFBD>㵽<EFBFBD><E3B5BD>β
|
|
|
|
|
for ( int i=m_lSgipExchangeRespList ; i< SGIP_SMS_MAX_SGIPEXCHANGERESP; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( m_pSgipExchangeResp[i].lLen == 0 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
m_pSgipExchangeResp[i] = resp;
|
|
|
|
|
LeaveCriticalSection(&m_CriSgipExchangeResp); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F>ӿ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>
|
|
|
|
|
for ( i=0 ; i<m_lSgipExchangeRespList; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( m_pSgipExchangeResp[i].lLen == 0 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
m_pSgipExchangeResp[i] = resp;
|
|
|
|
|
LeaveCriticalSection(&m_CriSgipExchangeResp); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
LeaveCriticalSection(&m_CriSgipExchangeResp); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CSgip::SetSgipExchangeNum(CmppExchange * pSgipExchange , long lSgipExchange)
|
|
|
|
|
{
|
|
|
|
|
m_pSgipExchange = pSgipExchange;
|
|
|
|
|
m_lSgipExchange = lSgipExchange;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
long CSgip::Sgip_Recv(const char *pIP, long lPort)
|
|
|
|
|
{
|
|
|
|
|
if ( m_bRecvInit && m_hRecv_Socket!=NULL && m_hRecv_Socket!= INVALID_SOCKET )
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
strcpy(m_szRecvIP , pIP );
|
|
|
|
|
m_lRecvPort = lPort;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ö˿<C3B6>
|
|
|
|
|
sockaddr_in Addr; //<2F><><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD>SOCKET
|
|
|
|
|
m_hRecv_Socket=socket(AF_INET,SOCK_STREAM,0);
|
|
|
|
|
Addr.sin_family=AF_INET;
|
|
|
|
|
Addr.sin_port=htons( (unsigned short)m_lRecvPort ); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϣ<EFBFBD>˿<EFBFBD>
|
|
|
|
|
Addr.sin_addr.s_addr=htonl(INADDR_ANY);
|
|
|
|
|
|
|
|
|
|
if (bind(m_hRecv_Socket,(LPSOCKADDR)&Addr,sizeof(Addr))==SOCKET_ERROR)
|
|
|
|
|
{
|
|
|
|
|
//AddLogMsg(Send, "Sgip Bind<6E>˿<EFBFBD>ʧ<EFBFBD><CAA7>" );
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
if ( listen(m_hRecv_Socket,5)==SOCKET_ERROR )
|
|
|
|
|
{
|
|
|
|
|
//AddLogMsg(Send, "Sgip listen<65>˿<EFBFBD>ʧ<EFBFBD><CAA7>" );
|
|
|
|
|
return -2;
|
|
|
|
|
}
|
|
|
|
|
m_bQuitThread_Recv = false;
|
|
|
|
|
m_bRecvInit = true;
|
|
|
|
|
DWORD ID;
|
|
|
|
|
m_hThread_Recv = CreateThread( NULL , 0 , (LPTHREAD_START_ROUTINE)Sgip_Recv_Accept , (LPVOID)this , 0 , &ID );
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UINT CSgip::Sgip_Recv_Accept(LPVOID sParam)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
CSgip * pSgip = (CSgip *)sParam;
|
|
|
|
|
|
|
|
|
|
while ( pSgip->m_bRecvInit && !pSgip->m_bQuitThread_Recv )
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>Զ<EFBFBD>˵<EFBFBD>SOCKET<45><54><EFBFBD><EFBFBD>
|
|
|
|
|
sockaddr_in sAccecpAddr; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>socket<65>õ<EFBFBD><C3B5>Ľṹ
|
|
|
|
|
int lAccecpAddrLen=sizeof(sockaddr);
|
|
|
|
|
SOCKET sCli;
|
|
|
|
|
sCli = accept( pSgip->m_hRecv_Socket ,(struct sockaddr far *)&sAccecpAddr,&lAccecpAddrLen);
|
|
|
|
|
if ( sCli!=INVALID_SOCKET && sCli!=SOCKET_ERROR )
|
|
|
|
|
{
|
|
|
|
|
//CString str;
|
|
|
|
|
//str.Format( "Sgip <20>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>:%s:%d" , inet_ntoa(sAccecpAddr.sin_addr),inet_ntoa(sAccecpAddr.sin_addr) );
|
|
|
|
|
//AddLogMsg(Send, str );
|
|
|
|
|
|
|
|
|
|
Sgip_Recv_ProcessT * pSend = new Sgip_Recv_ProcessT;
|
|
|
|
|
pSend->p = (LPVOID)pSgip;
|
|
|
|
|
pSend->sock = sCli;
|
|
|
|
|
DWORD ID;
|
|
|
|
|
CreateThread( NULL , 0 , (LPTHREAD_START_ROUTINE)Sgip_Recv_Process , (LPVOID)pSend , 0 , &ID );
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
break;//ֹͣ<CDA3>˷<EFBFBD><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>˳<EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
closesocket(pSgip->m_hRecv_Socket);
|
|
|
|
|
pSgip->m_hRecv_Socket = INVALID_SOCKET;
|
|
|
|
|
pSgip->m_bRecvInit = false;
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UINT CSgip::Sgip_Recv_Process(LPVOID sParam)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
Sgip_Recv_ProcessT * pSend = (Sgip_Recv_ProcessT*)sParam;
|
|
|
|
|
Sgip_Recv_ProcessT Send = *pSend;
|
|
|
|
|
delete pSend;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CSgip * pSgip = (CSgip *)Send.p;
|
|
|
|
|
SOCKET sock = Send.sock;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ULONG lID=0;
|
|
|
|
|
DWORD dwEndSendTime=0;
|
|
|
|
|
BOOL bLogin=false;
|
|
|
|
|
Sgip_Data_Recv Drecv={0};
|
|
|
|
|
DWORD m_dwEndRecvTime=::GetTickCount();
|
|
|
|
|
long dwReCountTime=0;
|
|
|
|
|
DWORD dwIdleTime = 0;
|
|
|
|
|
while ( pSgip->m_bRecvInit && !pSgip->m_bQuitThread_Recv )
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if ( CSgip::isSocketClose(sock) )
|
|
|
|
|
{
|
|
|
|
|
//AddLogMsg(Send, "Sgip <20>Զ<EFBFBD><D4B6>ѹر<D1B9>" );
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if ( CSgip::ReadFrame(sock,&Drecv) ) //<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>н<EFBFBD><D0BD>յ<EFBFBD><D5B5>µ<EFBFBD>Frame
|
|
|
|
|
{
|
|
|
|
|
m_dwEndRecvTime = ::GetTickCount(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>֡<EFBFBD><D6A1>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
|
|
|
|
//pNet->RecvFrame(Drecv); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>֡
|
|
|
|
|
|
|
|
|
|
Sgip_Head * pHead=(Sgip_Head *)Drecv.pRecvFrame;
|
|
|
|
|
if ( pHead->Total_Length != Drecv.lRecvLen ) //<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
//AddLogMsg(Send, "Sgip <20>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>֡" );
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pHead->Command_Id = ntohl(pHead->Command_Id);
|
|
|
|
|
pHead->SeqID.Node_Id= ntohl(pHead->SeqID.Node_Id);
|
|
|
|
|
pHead->SeqID.Time= ntohl(pHead->SeqID.Time);
|
|
|
|
|
pHead->SeqID.Sequence_Id= ntohl(pHead->SeqID.Sequence_Id);
|
|
|
|
|
|
|
|
|
|
BYTE * pData = (BYTE*)(Drecv.pRecvFrame+sizeof(Sgip_Head));
|
|
|
|
|
long lLen = pHead->Total_Length-sizeof(Sgip_Head);
|
|
|
|
|
long lRet = 0;
|
|
|
|
|
switch( pHead->Command_Id )
|
|
|
|
|
{
|
|
|
|
|
case SGIP_BIND:
|
|
|
|
|
{
|
|
|
|
|
Sgip_Bind * pBind = (Sgip_Bind *)pData;
|
|
|
|
|
Sgip_Bind_Resp resp={0};
|
|
|
|
|
resp.Result= 0;
|
|
|
|
|
Sgip_SeqID lReq=pHead->SeqID;
|
|
|
|
|
|
|
|
|
|
CSgip::SendFrame(sock,0,lID,dwEndSendTime,SGIP_BIND_RESP,(BYTE*)&resp,sizeof(resp),lReq);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case SGIP_SUBMIT:
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case SGIP_DELIVER:
|
|
|
|
|
{
|
|
|
|
|
lRet = pSgip->Process_Deliver(sock,*pHead,pData,lLen);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case SGIP_REPORT:
|
|
|
|
|
{
|
|
|
|
|
lRet = pSgip->Process_Report(sock,*pHead,pData,lLen);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case SGIP_ACTIVE_TEST:
|
|
|
|
|
lRet = 0;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Drecv.lDataLen = 0;
|
|
|
|
|
delete Drecv.pRecvFrame;
|
|
|
|
|
Drecv.pRecvFrame = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F>жϽ<D0B6><CFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʱ
|
|
|
|
|
dwIdleTime = ::GetTickCount() - m_dwEndRecvTime;
|
|
|
|
|
if (dwIdleTime > 2000) //2<><32>û<EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>ʱ20<32><30><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
Sleep(20);
|
|
|
|
|
}
|
|
|
|
|
if (dwIdleTime >SGIP_ACTIVE_TIMEOUT*2 ) //<2F><><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
//Sleep_Lu(5);
|
|
|
|
|
}
|
|
|
|
|
if ( Drecv.pRecvFrame )
|
|
|
|
|
delete Drecv.pRecvFrame;
|
|
|
|
|
closesocket(sock);
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::Sgip_Recv_Exit()
|
|
|
|
|
{
|
|
|
|
|
if ( m_hRecv_Socket == INVALID_SOCKET || m_hRecv_Socket == NULL)
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
m_bQuitThread_Recv= true;
|
|
|
|
|
Sleep_Lu(200);
|
|
|
|
|
closesocket(m_hRecv_Socket);
|
|
|
|
|
m_hRecv_Socket = INVALID_SOCKET;
|
|
|
|
|
m_bRecvInit = false;
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CSgip::SetSendSpeed(long lSpeed)
|
|
|
|
|
{
|
|
|
|
|
if (lSpeed <= 0)
|
|
|
|
|
{
|
|
|
|
|
m_lSendInterval = 0;
|
|
|
|
|
m_lSendIntervalCount = 1;
|
|
|
|
|
m_lSendIntervalIndex = 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
double dwInterval = ((double)1000 / (double)lSpeed) * 0.9f;
|
|
|
|
|
m_lSendInterval = (long)(dwInterval + 0.5f);
|
|
|
|
|
if (m_lSendInterval >= 15)
|
|
|
|
|
{
|
|
|
|
|
m_lSendIntervalCount = 1;
|
|
|
|
|
m_lSendIntervalIndex = 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_lSendInterval = 15;
|
|
|
|
|
m_lSendIntervalCount = (int)((double)m_lSendInterval / dwInterval + 0.5f);
|
|
|
|
|
if (m_lSendIntervalCount * dwInterval > m_lSendInterval)
|
|
|
|
|
m_lSendInterval = (int)(m_lSendIntervalCount * dwInterval + 0.5f);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
long CSgip::GetReportSms()
|
|
|
|
|
{
|
|
|
|
|
long lReport=0;
|
|
|
|
|
//<2F>ӵ<EFBFBD>ǰ<EFBFBD>㵽<EFBFBD><E3B5BD>β
|
|
|
|
|
for ( int i=0 ; i< SGIP_SMS_MAX_STATUS; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( m_pStatusList[i].lSendID != 0 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
lReport++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return lReport;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CString CSgip::GetErrMsg()
|
|
|
|
|
{
|
|
|
|
|
EnterCriticalSection(&m_CriErrMsg); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
|
|
|
|
|
CString strRet;
|
|
|
|
|
if ( m_strErrMsg.GetLength()>0 )
|
|
|
|
|
{
|
|
|
|
|
strRet = m_strErrMsg;
|
|
|
|
|
m_strErrMsg = CString(_T(""));
|
|
|
|
|
}
|
|
|
|
|
LeaveCriticalSection(&m_CriErrMsg); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return strRet;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CSgip::SetErrMsg(CString str)
|
|
|
|
|
{
|
|
|
|
|
EnterCriticalSection(&m_CriErrMsg); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
|
|
|
|
|
m_strErrMsg = str;
|
|
|
|
|
|
|
|
|
|
LeaveCriticalSection(&m_CriErrMsg); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::isConnectGateWay()
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
//sgip<69><70><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD>ӣ<EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD>һֱ<D2BB><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
/*
|
|
|
|
|
if ( m_bLoginSgip == 0 )
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
*/
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
long CSgip::GetWFSms()
|
|
|
|
|
{
|
|
|
|
|
long lWF=0;
|
|
|
|
|
//<2F>ӵ<EFBFBD>ǰ<EFBFBD>㵽<EFBFBD><E3B5BD>β
|
|
|
|
|
for ( int i=0 ; i< SGIP_SMS_MAX_LIST; i++ )
|
|
|
|
|
{
|
|
|
|
|
if ( m_pSendList[i].lSendID != 0 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
lWF++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return lWF;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::Sms_Get(Sgip_Send_List*& pSms)
|
|
|
|
|
{
|
|
|
|
|
EnterCriticalSection(&m_CriSendSms); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
//<2F>ӵ<EFBFBD>ǰ<EFBFBD>㵽<EFBFBD><E3B5BD>β
|
|
|
|
|
int i = 0;
|
|
|
|
|
for (i = m_lSendList; i < SGIP_SMS_MAX_LIST; i++)
|
|
|
|
|
{
|
|
|
|
|
if (m_pSendList[i].lSendID != 0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
m_lSendList = i + 1;
|
|
|
|
|
pSms = &m_pSendList[i];
|
|
|
|
|
//m_pSendList[i].lSendID = 0;
|
|
|
|
|
LeaveCriticalSection(&m_CriSendSms); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F>ӿ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>
|
|
|
|
|
for (i = 0; i < m_lSendList; i++)
|
|
|
|
|
{
|
|
|
|
|
if (m_pSendList[i].lSendID != 0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
m_lSendList = i + 1;
|
|
|
|
|
pSms = &m_pSendList[i];
|
|
|
|
|
//m_pSendList[i].lSendID = 0;
|
|
|
|
|
LeaveCriticalSection(&m_CriSendSms); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
m_lSendList = 0;
|
|
|
|
|
LeaveCriticalSection(&m_CriSendSms); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CSgip::Sms_Add(Sgip_Send_List sms)
|
|
|
|
|
{
|
|
|
|
|
EnterCriticalSection(&m_CriSendSms); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
//<2F>ӵ<EFBFBD>ǰ<EFBFBD>㵽<EFBFBD><E3B5BD>β
|
|
|
|
|
int i = 0;
|
|
|
|
|
for (i = m_lSendList; i < SGIP_SMS_MAX_LIST; i++)
|
|
|
|
|
{
|
|
|
|
|
if (m_pSendList[i].lSendID == 0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
m_pSendList[i] = sms;
|
|
|
|
|
LeaveCriticalSection(&m_CriSendSms); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F>ӿ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>
|
|
|
|
|
for (i = 0; i < m_lSendList; i++)
|
|
|
|
|
{
|
|
|
|
|
if (m_pSendList[i].lSendID == 0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0ʱ<30><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
{
|
|
|
|
|
m_pSendList[i] = sms;
|
|
|
|
|
LeaveCriticalSection(&m_CriSendSms); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
LeaveCriticalSection(&m_CriSendSms); //<2F><>ֹ<EFBFBD><D6B9>ͻ
|
|
|
|
|
return false;
|
|
|
|
|
}
|