MobsetWeb/Sms.cpp

1402 lines
33 KiB
C++
Raw Permalink Normal View History

2025-02-27 17:04:38 +08:00
// Sms.cpp : CSms <20><>ʵ<EFBFBD><CAB5>
#include "stdafx.h"
#include "Sms.h"
#include "..\public\LuTool.h"
#include "..\public\SendPub.h"
#include "..\public\sendpub.cpp" //<2F><><EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EBA3AC><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>CW2A
#include "..\public\StringSort\StringSort.h"
#include "..\public\SAStatusLog\SAStatusLog.cpp" //<2F><><EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EBA3AC><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>CW2A
#include "..\public\CMarkup\Markup.h"
#include "..\public\AutoCoInitializeEx\AutoCoInitializeEx.h"
// CSms
STDMETHODIMP CSms::CheckPasswd(BSTR User, BSTR Passwd, BSTR Encrypt, LONG Purview, LONG* pRet)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//ȡ<><C8A1>User ,Passwd
char szUser[64]={0};
char szPasswd[128]={0};
char szPasswd2[128]={0};
char szEncrypt[128]={0};
strcpy( szUser , CW2A(User) );
strcpy( szPasswd , CW2A(Passwd) );
strcpy( szEncrypt , CW2A(Encrypt) );
if (strlen(szUser) <= 0 || strlen(szPasswd)<=0) //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD>֤<EFBFBD><D6A4>ͨ<EFBFBD><CDA8>
{
*pRet = 0;
return S_OK;
}
CDes des;
long lLen=sizeof(Passwd);
des.Encrypt( szPasswd , strlen(szPasswd) , szPasswd2 , lLen , szUser , 8 );
if ( !strcmp( szPasswd2 , szEncrypt ) )
{
*pRet = 1;
}
else
{
*pRet = 0;
}
if ( !(Purview&PURVIEW_LOGIN) )
{
*pRet = -1;
}
/*
if ( !(Purview&PURVIEW_SENDP) )
{
*pRet = -2;
}
*/
return S_OK;
}
STDMETHODIMP CSms::CheckPasswd2(LONG CorpID, BSTR User, BSTR Passwd, BSTR TimeStamp, BSTR Encrypt, LONG Purview, LONG* pRet)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//ȡ<><C8A1>User ,Passwd
char szUser[64] = { 0 };
char szPasswd[128] = { 0 };
char szPasswd2[128] = { 0 };
char szEncrypt[128] = { 0 };
TCHAR szPasswdU2[128] = { 0 };
strcpy(szUser, CW2A(User));
strcpy(szPasswd, CW2A(Passwd));
strcpy(szEncrypt, CW2A(Encrypt));
if (strlen(szUser) <= 0 || strlen(szPasswd) <= 0) //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD>֤<EFBFBD><D6A4>ͨ<EFBFBD><CDA8>
{
*pRet = 0;
return S_OK;
}
CDes des;
long lOut = sizeof(szPasswd2);
des.Decrypt(szEncrypt, (long)strlen(szEncrypt), szPasswd2, lOut, szUser, 8);
_tcscpy(szPasswdU2, CA2W(szPasswd2));
CString strCorpID;
strCorpID.Format(_T("%d"), CorpID);
CString strPasswd2 = szPasswdU2;
CString strTimeStamp = TimeStamp;
CString strMd5 = Passwd;
strMd5.MakeUpper();
CString strMd52 = CSendPub::GetMD5(strCorpID + strPasswd2 + strTimeStamp, false);
strMd52.MakeUpper();
if (strMd5 == strMd52)
{
*pRet = 1;
}
else
{
*pRet = 0;
}
if (!(Purview&PURVIEW_LOGIN))
{
*pRet = -1;
}
/*
if (!(Purview&PURVIEW_SENDP))
{
*pRet = -2;
}
*/
return S_OK;
}
STDMETHODIMP CSms::GetPasswd(BSTR User, BSTR Passwd, BSTR* pRet)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//ȡ<><C8A1>User ,Passwd
char szUser[64]={0};
char szPasswd[128]={0};
char szPasswd2[128]={0};
char szEncrypt[128]={0};
strcpy( szUser , CW2A(User) );
strcpy( szPasswd , CW2A(Passwd) );
CDes des;
long lLen=sizeof(szPasswd2);
des.Encrypt(szPasswd , strlen(szPasswd) , szPasswd2 , lLen , szUser , 8 );
*pRet = ::SysAllocString(CA2W(szPasswd2));
return S_OK;
}
STDMETHODIMP CSms::DePasswd(BSTR User, BSTR Passwd, BSTR* pRet)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
*pRet = ::SysAllocString(CA2W("ERROR"));
/*
//ȡ<><C8A1>User ,Passwd
char szUser[64]={0};
char szPasswd[128]={0};
char szPasswd2[128]={0};
char szEncrypt[128]={0};
strcpy( szUser , CW2A(User) );
strcpy( szPasswd , CW2A(Passwd) );
CDes des;
long lLen=sizeof(szPasswd2);
des.Decrypt(szPasswd , strlen(szPasswd) , szPasswd2 , lLen , szUser , 8 );
*pRet = ::SysAllocString(CA2W(szPasswd2));
*/
return S_OK;
}
void CSms::GetCurrentPath(TCHAR *pPath)
{
::GetModuleFileName(AfxGetInstanceHandle(), pPath, 512);
int j = lstrlen(pPath);
for (; j>0; j--)
{
if (pPath[j] == '\\')
break;
}
pPath[j + 1] = 0;
}
STDMETHODIMP CSms::EncSPMS(BSTR Key, BSTR Src, BSTR* pRet)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
/*
//ȡ<><C8A1>User ,Passwd
char szKey[512]={0};
char szSrc[512]={0};
char szRet[512]={0};
strcpy( szKey , CW2A(Key) );
strcpy( szSrc , CW2A(Src) );
CDES des;
if ( !des.EncSPMS(szKey,szSrc,szRet) )
{
strcpy( szRet , "ERROR" );
}
*pRet = ::SysAllocString(CA2W(szRet));
*/
return S_OK;
}
STDMETHODIMP CSms::GetPurview(LONG PurviewType, LONG* pRet)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
long lPurview=0;
if ( PurviewType == PURVIEWTYPE_INPUT ) //<2F><><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>Ա
{
lPurview = lPurview|PURVIEW_LOGIN|PURVIEW_GADDRESS_SEE|PURVIEW_GADDRESS_MODIFY|PURVIEW_GADDRESS_ADD;
}
if ( PurviewType == PURVIEWTYPE_USERS ) //һ<><D2BB>Ա<EFBFBD><D4B1>
{
lPurview = lPurview|PURVIEW_LOGIN|PURVIEW_SENDG|PURVIEW_RECVP|PURVIEW_GADDRESS_SEE;
}
if ( PurviewType == PURVIEWTYPE_KF ) //<2F>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>Ա
{
lPurview = lPurview|PURVIEW_LOGIN|PURVIEW_SENDG|PURVIEW_SENDP|PURVIEW_RECVP|PURVIEW_RECVG|PURVIEW_GADDRESS_SEE|PURVIEW_PADDRESS;
}
if ( PurviewType == PURVIEWTYPE_ADMIN ) //<2F><><EFBFBD><EFBFBD>Ա
{
lPurview = -1;
}
*pRet = lPurview;
return S_OK;
}
STDMETHODIMP CSms::HasSWTPre(LONG lSDK, LONG* pRet)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
if ( lSDK & SDK_SWT )
*pRet = 1;
else
*pRet = 0;
return S_OK;
}
STDMETHODIMP CSms::isHasPurview(LONG Purview, LONG AllPurview, LONG* pRet)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
if ( AllPurview & Purview )
*pRet = 1;
else
*pRet = 0;
return S_OK;
}
STDMETHODIMP CSms::SendSms(IDispatch* pAdoConnect, LONG lCorpID, LONG lUserID, LONG lLongSms, LONG lFD, BSTR Timer, BSTR IP, BSTR AddNum, BSTR Recver, BSTR Mobiles, BSTR Msg, LONG* pSendCount)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//AutoCoInitializeEx AutoCoInit(true); //<2F>Զ<EFBFBD><D4B6><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Com<6F><6D><EFBFBD><EFBFBD>
*pSendCount = 0;
m_strSendRet=_T("-10,<2C><><EFBFBD><EFBFBD><EFBFBD>쳣!");
DWORD lSendAllTime = GetTickCount();
//m_strSendRet.Format(_T("AdoConnect:%x,CorpID:%d,UserID,%d,longSms,%d,Timer,%s\\nIP=%s\\nMobiles=%s\\nMsg=%s"),pAdoConnect,lCorpID,lUserID,lLongSms,Timer,IP,Mobiles,Msg);
//return S_OK;
try
{
if (!pAdoConnect)
{
m_strSendRet=_T("-11,<2C><><EFBFBD><EFBFBD><EFBFBD>쳣!");
return S_OK;
}
//CComQIPtr<_ConnectionPtr> pAdo = pAdoConnect;
_ConnectionPtr pAdo = pAdoConnect;
//pAdoConnect->QueryInterface(
//CAdoConnection adoConnection((_ConnectionPtr)pAdo);
//CAdoConnection adoc2;
/*
if ( !m_AdoConnection.IsOpen() )
{
m_AdoConnection.SetConnection(pAdoConnect);
}
CString strConnectionString = m_AdoConnection.GetConnectionString();
if (strConnectionString.GetLength() <= 6)
{
m_strSendRet = _T("-15,ϵͳ<CFB5>쳣1!");
return S_OK;
}
*/
TCHAR szName[512] = { 0 };
GetCurrentPath(szName);
SC_Setup setup = { 0 };
CFile file;
CString strFileName;
//<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD>ݵ<EFBFBD>
for (int j = 0; j<3; j++)
{
strFileName.Format(_T("%s..\\%s"), szName, _T("SmsCenterW.dat"));
switch (j)
{
case 1:
strFileName.Format(_T("%s..\\%s"), szName, _T("SmsCenterW_b1.dat"));
break;
case 2:
strFileName.Format(_T("%s%s"), szName, _T("SmsCenterW.dat"));
break;
}
if (file.Open(strFileName, CFile::modeRead|CFile::shareDenyNone) )
{
if (file.GetLength() > 50)
break;
else
file.Close();
}
}
if (j >= 3)
{
//m_strSendRet = _T("-21,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>쳣!");
//m_strSendRet.Format(_T("-21,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>쳣!%s"),strFileName);
//return S_OK;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>ʹ<EFBFBD><CAB9>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (!m_AdoConnection.IsOpen())
{
m_AdoConnection.SetConnection(pAdoConnect);
}
}
else
{
file.Read(&setup, sizeof(setup));
file.Close();
CString DBServer = setup.szDBName;
CString DBName = _T("corpsms");
CString DBUser = setup.szDBUser;
CString DBProvider = setup.szProvider;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>
char szSrc[64] = { 0 };
char szUser[64] = { 0 };
char szTag[64] = { 0 };
TCHAR szNewPasswd[64] = { 0 };
long lOut = sizeof(szTag);
strcpy(szSrc, CW2A(setup.szDBPasswd));
strcpy(szUser, CW2A(setup.szDBUser));
CDes des;
des.Decrypt(szSrc, strlen(szSrc), szTag, lOut, szUser, 8);
_tcscpy(szNewPasswd, CA2W(szTag));
CString DBPasswd = szNewPasswd;
if (!m_AdoConnection.ConnectSQLServer2(DBServer, DBName, DBUser, DBPasswd, DBProvider))
{
m_strSendRet = _T("-16,ϵͳ<CFB5>쳣2<ECB3A3><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>ʧ<EFBFBD><CAA7>!");
return S_OK;
}
}
//m_AdoConnection.SetCursorLocation(adUseServer); //<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD>
CAdoRecordSet AdoRS;
CAdoRecordSet AdoRS2;
AdoRS.SetCursorLocation(adUseClient);//adUseNone adUseServer
AdoRS.SetCursorLocation(adUseClient);
AdoRS.SetAdoConnection(&m_AdoConnection);
AdoRS2.SetAdoConnection(&m_AdoConnection);
AdoRS.SetCursorLocation(adUseClient);
AdoRS2.SetCursorLocation(adUseClient);
CString str;
CString strErrMsg;
CString strMsgID;
CString strMsg = Msg;
CString strIP = IP;
CString strRecver = Recver;
CString strAddNum = AddNum;
BOOL bSDK=false;
if ( strRecver==CString(_T("WebSDK")) || strRecver == CString(_T("WebSDK2")))
bSDK = true;
if (strMsg.GetLength()<=0 || strMsg.GetLength()>900)
{
m_strSendRet=_T("-12,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>!");
return S_OK;
}
//<2F>滻ǩ<E6BBBB><C7A9><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>ǩ<EFBFBD><C7A9>
/*
strMsg.Replace(_T("["), _T("(")); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
strMsg.Replace(_T("]"), _T(")"));
strMsg.Replace(_T("<EFBFBD><EFBFBD>"), _T("(")); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
strMsg.Replace(_T("<EFBFBD><EFBFBD>"), _T(")"));
*/
BOOL bEnableXY=false; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׷<EFBFBD><D7B7><EFBFBD>
BOOL bAtTime=false;
COleDateTime tTimer;
CString strTimer = Timer;
strTimer.Replace(_T("/") , _T("-"));
try
{
tTimer.ParseDateTime(strTimer);
}
catch(...)
{
}
CString strSelect;
//ȡͨ<C8A1><CDA8>
TCHAR szSmsTD[32]={0};
//ȡǩ<C8A1><C7A9>
CString strCM;
long lFStep=1; //Ĭ<><C4AC>Ϊ1<CEAA><31>
long lSmsFStep = 99; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
strSelect.Format(_T("select * from corp with(nolock) where corpid=%d") , lCorpID );
if ( AdoRS.Open(strSelect) && !AdoRS.IsEOF() )
{
AdoRS.GetCollect(_T("cm") , strCM );
AdoRS.GetCollect(_T("FStep"),lFStep);
AdoRS.GetCollect(_T("FiltStep"), lSmsFStep);
AdoRS.GetCollect( _T("SMSTD") , szSmsTD ); _tcscat(szSmsTD,_T("000000")); //ȡ<>ö<EFBFBD><C3B6><EFBFBD>ͨ<EFBFBD><CDA8>
DWORD dwCorpSDK=0;
AdoRS.GetCollect(_T("SDK") , dwCorpSDK ); //SDK
if ( dwCorpSDK & SDK_XY ) //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8>
{
bEnableXY = true;
}
}
long lCorpID2 = 0;
strSelect.Format(_T("select * from users with(nolock) where userid=%d") , lUserID );
if ( AdoRS.Open(strSelect) && !AdoRS.IsEOF() )
{
AdoRS.GetCollect(_T("CorpID") , lCorpID2 );
if ( lCorpID2 != lCorpID )
{
m_strSendRet=_T("-13,<2C><>ҵID<49><44><EFBFBD>û<EFBFBD>ID<49><44><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ!");
return S_OK;
}
CString strCM2;
AdoRS.GetCollect(_T("cm2") , strCM2 );
if ( strCM2.GetLength()>0 )
strCM = strCM2;
}
if (strCM==CString(_T("+"))) //ǩ<><C7A9>Ϊ+<2B><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD>ѱ<EFBFBD><D1B1><EFBFBD>ǩ<EFBFBD><C7A9>
{
//<2F><><EFBFBD><EFBFBD>ǩ<EFBFBD><C7A9>
CString strGetCM;
long lMsgLen = strMsg.GetLength();
if (lMsgLen > 1 && strMsg.Left(1) == CString(_T("<EFBFBD><EFBFBD>"))) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȴ<EFBFBD><C8B4><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD><D4A1><EFBFBD>ͷ<EFBFBD><CDB7>
{
for (int i = 1; i < lMsgLen && i < 20; i++)
{
if (strMsg.Mid(i, 1) == CString(_T("<EFBFBD><EFBFBD>")))
{
strGetCM = strMsg.Mid(1, i - 1);
break;
}
}
}
if (strGetCM.GetLength() >= 2)
{
strSelect.Format(_T("select * from SignName with(nolock) where corpid=%d and SignName='%s' and status=1"), lCorpID, SqlStr(strGetCM));
if (AdoRS.Open(strSelect) && AdoRS.IsEOF())
{
m_strSendRet = _T("-17,ǩ<><C7A9>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ<EFBFBD><C7A9>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>!");
return S_OK;
}
}
else
{
m_strSendRet = _T("-17,ǩ<><C7A9>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ<EFBFBD><C7A9>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>!");
return S_OK;
}
strCM=CString( _T("")); //+<2B><>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD>Ϊ<EFBFBD>ա<EFBFBD>
}
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
BOOL bFilt=false;
strSelect.Format(_T("select * from filt where FStep>=%d and CHARINDEX(word,'%s')>0") , lFStep,SqlStr(strMsg) );
if ( AdoRS.Open(strSelect) && !AdoRS.IsEOF() )
{
bFilt = 1;
//m_strSendRet=_T("-101,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ!");
//return S_OK;
}
if (!bFilt) //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>˵ģ<CBB5><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><D5B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϹؼ<CFB9><D8BC><EFBFBD>
{
long lSrcLen = strMsg.GetLength();
CString strNoSpace = strMsg;
strNoSpace.Replace(_T(" "), _T(""));
strNoSpace.Replace(_T("<EFBFBD><EFBFBD>"), _T(""));
long lNoSpaceLen = strNoSpace.GetLength();
if (lFStep<3 && (lSrcLen - lNoSpaceLen >4) ) //<2F><><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD>ո<EFBFBD><D5B8><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
bFilt = 1;
}
if (!bFilt && (lSrcLen - lNoSpaceLen >2 )) //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>˵ģ<CBB5><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><D5B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϹؼ<CFB9><D8BC><EFBFBD>
{
strSelect.Format(_T("select * from filt where FStep>=%d and CHARINDEX(word,'%s')>0"), lFStep, SqlStr(strNoSpace));
if (AdoRS.Open(strSelect) && !AdoRS.IsEOF())
{
bFilt = 1;
}
}
}
//<2F>ж<EFBFBD><D0B6>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
CString strMobiles = Mobiles;
long lMobiles = strMobiles.GetLength() / 12;
if (!bSDK && (lMobiles >= lSmsFStep || lMobiles>=10) )
{
bFilt = 1;
}
if ( bSDK && strRecver == CString(_T("WebSDK")) && lMobiles>58) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SDK1<4B><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>50<35><30>ʱ<EFBFBD><CAB1>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>˵ġ<CBB5>
{
bFilt = 1;
}
if (strRecver == CString(_T("WebF")))
{
bFilt = 1;
}
if ( lSmsFStep == 5185 || lSmsFStep == 51850 ) //<2F><><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>518<31><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˱<EFBFBD>־
{
bFilt = 0;
}
#ifdef SMSCENTER_DGSB //<2F><>ݸ<EFBFBD>
bFilt = 0;
#endif
//<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ϊ<EFBFBD>Ŷη<C5B6><CEB7>ͣ<EFBFBD><CDA3><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
/*
if ( true )
{
CString strMobiles = Mobiles;
strMobiles+=CString(_T(",")); //<2F><><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ռ<EFBFBD>¼
long lLen = strMobiles.GetLength();
TCHAR szMobile[32]={0};
long lMobileLen=0;
CStringSort sort;
for ( int i=0 ; i<lLen ; i++ )
{
TCHAR c = strMobiles.GetAt(i);
if ( c=='\r' || c=='\n' || c=='\t'
|| c==';' || c=='<EFBFBD><EFBFBD>'
|| c==',' || c=='<EFBFBD><EFBFBD>'
|| c=='.' || c=='<EFBFBD><EFBFBD>'
|| c==':' || c=='<EFBFBD><EFBFBD>'
|| c==' ' || c=='<EFBFBD><EFBFBD>'
|| i == lLen-1)
{
if ( lMobileLen>=9 && lMobileLen<=18 ) //<2F><><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EBB3A4>
{
TCHAR szBuf[32]={0};
_tcscpy(szBuf , szMobile);
CSendPub::ExMobileGZM(szBuf);
if ( CSendPub::isNumSup2(szBuf) )
{
sort.Add(szBuf,true);
lMobileLen = 0; //<2F><><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD>ʼ
memset(szMobile , 0 , sizeof(szMobile));
}
}
else
{
lMobileLen = 0; //<2F><><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD>ʼ
memset(szMobile , 0 , sizeof(szMobile));
}
}
else
{
if ( c>='0' && c<='9' && lMobileLen<19 )
{
szMobile[lMobileLen] = c;
lMobileLen ++;
}
}
}
//<2F><><EFBFBD>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD>Ӻ<EFBFBD><D3BA>볬10<31><30>
//9λ<39>Ŷγ<C5B6>30<33><30>
//8λ<38>Ŷγ<C5B6>300<30><30>
long lLX1=10;
long lLX2=30;
long lLX3=300;
BOOL bLX = false;
long lMobileCount2=sort.GetCount();
LONGLONG lLXOldMobile1=0;
LONGLONG lLXOldMobile2=0;
LONGLONG lLXOldMobile3=0;
long lLXCount1=0;
long lLXCount2=0;
long lLXCount3=0;
for ( int i=0 ; i<lMobileCount2 ; i++ )
{
CString strMobile = sort.GetAt(i);
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>
if ( (LONGLONG)(_ttof(strMobile)) != lLXOldMobile1+1 )
{
lLXCount1 = 0;
lLXOldMobile1 = (LONGLONG)(_ttof(strMobile));
}
else
{
lLXOldMobile1 = lLXOldMobile1+1;
lLXCount1 += 1;
if ( lLXCount1 >= lLX1 )
{
bLX = true;
break;
}
}
//<2F>ж<EFBFBD>ǰ9λ<39><CEBB><EFBFBD><EFBFBD>
if ( (LONGLONG)(_ttol(strMobile)/1000000000) != lLXOldMobile2 )
{
lLXCount2 = 0;
lLXOldMobile2 = (long)(_ttol(strMobile)/1000000000);
}
else
{
lLXCount2 += 1;
if ( lLXCount2 >= lLX2 )
{
bLX = true;
break;
}
}
//<2F>ж<EFBFBD>ǰ8λ<38><CEBB><EFBFBD><EFBFBD>
if ( (LONGLONG)(_ttol(strMobile)/100000000) != lLXOldMobile3 )
{
lLXCount3 = 0;
lLXOldMobile3 = (long)(_ttol(strMobile)/100000000);
}
else
{
lLXCount3 += 1;
if ( lLXCount3 >= lLX3 )
{
bLX = true;
break;
}
}
}
if ( bLX )
{
bFilt = 1;
m_strSendRet=_T("-101,<2C><><EFBFBD>ܰ<EFBFBD><DCB0>Ŷν<C5B6><CEBD>з<EFBFBD><D0B7>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>ֹͣ!");
return S_OK;
}
}
*/
//<2F>Ƚ<EFBFBD><C8BD><EFBFBD><EFBFBD>ݷֶ<DDB7>
//<2F><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>
CStringArray saMsg;
//<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD>ֶη<D6B6><CEB7><EFBFBD>
TCHAR szSrcMsg[2048]={0};
_tcscpy(szSrcMsg , strMsg);
long lMsgAll=0;
long lMsgIndex = 1;
BOOL bGetMsg2;
TCHAR szSendMsg1[512]={0};
TCHAR szSendMsg2[512]={0};
long lMaxSendLen = MSG_MAXSENDLEN;
long lZDCMLen = 0;
#if defined(SMSCENTER_NX) && !defined(SMSCENTER_GDDX) //ũ<><C5A9><EFBFBD>Դ<EFBFBD>ǩ<EFBFBD><C7A9>6<EFBFBD><36><EFBFBD><EFBFBD>
lZDCMLen = 6;
#endif
#if defined(SMSCENTER_NX) && defined(SMSCENTER_DGSB) //<2F><EFBFBD>ֵ<EFBFBD>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>7<EFBFBD><37><EFBFBD><EFBFBD>
lZDCMLen = 6; //ǩ<><C7A9><EFBFBD>ǡ<EFBFBD><C7A1><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
#endif
ANS_GetTD2Data td={0};
if ( CSendPub::GetTDPro(&AdoRS,szSmsTD,td,MOBILE_TYPE_CMCC)) //ȡ<><C8A1><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if ( td.lContentLen>10 && td.lContentLen<70 )
lZDCMLen = MSG_MAXSENDLEN-td.lContentLen;
}
lMaxSendLen = lMaxSendLen-lZDCMLen;
long lSignLen = 0;
#ifdef UNICODE
lSignLen = _tcslen(strCM);
#else
lSignLen = MultiByteToWideChar( CP_ACP,NULL,userPro.szCM,_tcslen(userPro.szCM), NULL,0);
#endif
if ( lSignLen>0 )
lSignLen = lSignLen+2; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long lMsgLen =0;
#ifdef UNICODE
lMsgLen = _tcslen(szSrcMsg);
#else
lMsgLen = MultiByteToWideChar( CP_ACP,NULL,szSrcMsg,_tcslen(szSrcMsg), NULL,0);
#endif
//<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>Գ<EFBFBD><D4B3><EFBFBD><EFBFBD>ŷ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
BOOL bLongSms=false;
if ( lLongSms>0 )
bLongSms = true;
//<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>Էֶη<D6B6>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
BOOL bFD=false;
/*
if ( lFD>0 && !bLongSms) //<2F><><EFBFBD>dz<EFBFBD><C7B3><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2>ֶܷ<DCB7>
bFD = true;
*/
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>÷ֶι<D6B6><CEB9>ܡ<EFBFBD>lFD<46><44><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>ǩ<EFBFBD><C7A9>ǰ<EFBFBD><C7B0>
BOOL bSignFront = false;
if (lFD > 0)
bSignFront = true;
long lRand=0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if ( lMsgLen+lSignLen<=lMaxSendLen ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>dz<EFBFBD><C7B3><EFBFBD><EFBFBD>ŷ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>
{
bLongSms = false;
bFD = false;
}
if ( bLongSms && lSignLen>0) //<2F>Գ<EFBFBD><D4B3><EFBFBD><EFBFBD>ŷ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ<EFBFBD><C7A9>
{
/*
if (bSignFront) //ǩ<><C7A9>ǰ<EFBFBD><C7B0>
{
CString strSignTemp;
strSignTemp.Format(_T("[%s]%s"), strCM, szSrcMsg);
_tcscpy(szSrcMsg, strSignTemp);
}
else
{
_tcscat(szSrcMsg, _T("["));
_tcscat(szSrcMsg, strCM);
_tcscat(szSrcMsg, _T("]"));
}
*/
//ͳһǰ<D2BB><C7B0>ǩ<EFBFBD><C7A9>
CString strSignTemp;
strSignTemp.Format(_T("<EFBFBD><EFBFBD>%s<><73>%s"), strCM, szSrcMsg);
_tcscpy(szSrcMsg, strSignTemp);
}
if ( !bLongSms ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD><C7B3><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫǩ<D2AA><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ż<EFBFBD>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
lMaxSendLen = lMaxSendLen-lSignLen;
if ( bFD )
lMaxSendLen = lMaxSendLen-4; //<2F>ֶα<D6B6>ʶ
}
else
{
lMaxSendLen = MSG_MAXSENDLEN-3;
}
while ( true )
{
memset( szSendMsg2 , 0 , sizeof(szSendMsg2) );
//if ( isChinese( szSrcMsg,_tcslen(szSrcMsg) ) )
//{
bGetMsg2 = GetSpiltUnicodeMsg( szSrcMsg , szSendMsg1 , lMsgIndex , lMaxSendLen ,lMsgAll);
//}
//else
//{
// bGetMsg2 = GetSpiltAsciiMsg( szSrcMsg , szSendMsg2 , lMsgIndex , MSG_MAXSENDLEN*2+MSG_MAXSENDLEN*2/7 ,lMsgAll);
//}
if ( bGetMsg2 )
{
if ( !bLongSms && lSignLen>0 ) //<2F><><EFBFBD>dz<EFBFBD><C7B3><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD>Ҫ<EFBFBD><D2AA>ǩ<EFBFBD><C7A9>
{
/*
if (bSignFront) //ǩ<><C7A9>ǰ<EFBFBD><C7B0>
{
CString strSignTemp;
strSignTemp.Format(_T("[%s]%s"), strCM, szSendMsg1);
_tcscpy(szSendMsg1, strSignTemp);
}
else
{
_tcscat(szSendMsg1, _T("["));
_tcscat(szSendMsg1, strCM);
_tcscat(szSendMsg1, _T("]"));
}
*/
//ͳһǰ<D2BB><C7B0>ǩ<EFBFBD><C7A9>
CString strSignTemp;
strSignTemp.Format(_T("<EFBFBD><EFBFBD>%s<><73>%s"), strCM, szSendMsg1);
_tcscpy(szSendMsg1, strSignTemp);
}
saMsg.Add(szSendMsg1);
}
else
{
break;
}
lMsgIndex ++;
}
if ( lZDCMLen >0 ) //<2F><><EFBFBD>Դ<EFBFBD>ǩ<EFBFBD><C7A9>
{
if ( bLongSms && saMsg.GetSize()>0)
{
strSelect = saMsg.GetAt(saMsg.GetSize()-1); //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifdef UNICODE
lMsgLen = _tcslen(strSelect);
#else
lMsgLen = MultiByteToWideChar( CP_ACP,NULL,strSelect,_tcslen(strSelect), NULL,0);
#endif
if ( lMsgLen>lMaxSendLen-lZDCMLen )
{
saMsg.Add(CString(_T("<EFBFBD><EFBFBD>"))); //<2F>Ӷ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ<EFBFBD><C7A9>
}
}
}
lMsgAll = saMsg.GetSize();
if ( lMsgAll<=0 || lMsgAll>=15 )
{
m_strSendRet.Format(_T("-14,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>,%d<><64>!"),lMsgAll);
return S_OK;
}
/*
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׷<EFBFBD><D7B7><EFBFBD>
CSqlPool XYSqlPool; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ͨ
TCHAR buf[MAX_PATH+1];
DWORD res = GetModuleFileName(AfxGetInstanceHandle(), buf, MAX_PATH);
int j=lstrlen(buf);
int iXCount=0;
for ( ; j>0 ; j-- )
{
if (buf[j]=='\\' )
{
iXCount ++;
if ( iXCount>=2)
break;
}
}
if ( j>0 )
buf[j+1]=0;
_tcscat( buf , _T("XYSerup.xml") );
CMarkup xml;
if ( xml.Load(buf) )
{
CString strEnable,strSQLServer,strSQLDB,strSQLUser,strSQLPasswd,strSQLMaxConnection;
if ( xml.FindElem(_T("/Setup/Enable")) )
strEnable = xml.GetData();
if ( xml.FindElem(_T("/Setup/XYServer/DBServer")) )
strSQLServer = xml.GetData();
if ( xml.FindElem(_T("/Setup/XYServer/DBName")) )
strSQLDB=xml.GetData();
if ( xml.FindElem(_T("/Setup/XYServer/DBUser")) )
strSQLUser=xml.GetData();
if ( xml.FindElem(_T("/Setup/XYServer/DBPasswd")) )
strSQLPasswd=xml.GetData();
if ( xml.FindElem(_T("/Setup/XYServer/MaxConnection")) )
strSQLMaxConnection=xml.GetData();
BOOL bEnable = _ttol(strEnable);
long lSqlCount=_ttol(strSQLMaxConnection);
if ( lSqlCount<1 || lSqlCount>20 )
lSqlCount=5;
XYSqlPool.SetTimeOut(5,5);//<2F><><EFBFBD>ó<EFBFBD>ʱʱ<CAB1><EFBFBD><E4A3AC><EFBFBD>̡<EFBFBD>
if (bEnable && XYSqlPool.Init(lSqlCount,strSQLServer,strSQLUser,strSQLPasswd,strSQLDB))
{
}
else
{
bEnableXY=false;
}
}
*/
//InitRand(); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>ظ<EFBFBD>
long lMaxSendCount=50; //ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0B7A2>50<35><30>
//long lZDSmsCount=lMsgAll * lMaxSendCount; //<2F><><EFBFBD><EFBFBD>Ӧ<EFBFBD>ÿ۷<C3BF><DBB7><EFBFBD><EFBFBD><EFBFBD>
long lSendCount = lMaxSendCount * lMsgAll;
ANS_SendData2 * pSmsData = new ANS_SendData2[lSendCount];
memset(pSmsData , 0 , sizeof(ANS_SendData2)*lSendCount);
//<2F><><EFBFBD>ڼ<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
long * pSmsIDIndex = new long[lMaxSendCount];
memset(pSmsIDIndex , 0,sizeof(long)*lMaxSendCount);
//ȡ<>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>
/*CString*/ strMobiles = Mobiles;
strMobiles+=CString(_T(",")); //<2F><><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ռ<EFBFBD>¼
long lLen = strMobiles.GetLength();
TCHAR szMobile[32]={0};
long lMobileLen=0;
long lMobileAllCount=0;
long lMobileCount=0;
long lMobileIndex=0;
long lMsgIDCount=0;
BOOL bSendBreak=false;
for ( int i=0 ; i<lLen ; i++ )
{
TCHAR c = strMobiles.GetAt(i);
if ( c=='\r' || c=='\n' || c=='\t'
|| c==';' || c=='<EFBFBD><EFBFBD>'
|| c==',' || c=='<EFBFBD><EFBFBD>'
|| c=='.' || c=='<EFBFBD><EFBFBD>'
|| c==':' || c=='<EFBFBD><EFBFBD>'
|| c==' ' || c=='<EFBFBD><EFBFBD>'
|| i == lLen-1)
{
if ( lMobileLen>=9 && lMobileLen<=18 ) //<2F><><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EBB3A4>
{
TCHAR szBuf[32]={0};
_tcscpy(szBuf , szMobile);
CSendPub::ExMobileGZM(szBuf);
if ( CSendPub::isNumSup2(szBuf) )
{
pSmsData[lMobileIndex].lCorpID = lCorpID;
pSmsData[lMobileIndex].lUserID = lUserID;
if ( bFilt ) //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD>˵Ķ<CBB5><C4B6><EFBFBD>
pSmsData[lMobileIndex].lStatus = SEND_STATUS_SUB_FILT;
_tcsncpy( pSmsData[lMobileIndex].szSendNum , strAddNum ,10); //<2F><>չ<EFBFBD><D5B9>
_tcscpy( pSmsData[lMobileIndex].szMobile , szBuf );
_tcscpy( pSmsData[lMobileIndex].szName , strRecver );
if ( tTimer.GetStatus() == COleDateTime::valid ) //<2F><>ʱʱ<CAB1><CAB1>
{
tTimer.GetAsSystemTime(pSmsData[lMobileIndex].tTimer );
}
lRand = rand()%254;
if ( lRand<0 )
lRand=-lRand;
for ( int h=1 ; h<=lMsgAll ; h++ )
{
if ( h>1 )
{
pSmsData[lMobileIndex] = pSmsData[lMobileIndex-1]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2B8B4>ǰһ<C7B0><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
if ( bLongSms )
{
_stprintf( pSmsData[lMobileIndex].szMsg , _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>%02X%X%X:%s") , lRand,lMsgAll,h,saMsg.GetAt(h-1));
}
else
{
if ( bFD )
_stprintf( pSmsData[lMobileIndex].szMsg , _T("%X/%X:%s") , h,lMsgAll,saMsg.GetAt(h-1));
else
_tcscpy(pSmsData[lMobileIndex].szMsg , saMsg.GetAt(h-1) );
}
pSmsData[lMobileIndex].tOvrTime.wSecond = lRand;
pSmsData[lMobileIndex].tOvrTime.wDayOfWeek =(WORD)(h*100+lMsgAll);
lMobileIndex ++;
if ( lMobileIndex >= lSendCount )
break;
}
pSmsIDIndex[lMobileCount] = lMobileIndex-1; //<2F><>¼ÿ<C2BC><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
lMobileCount ++;
lMobileAllCount ++;
}
}
lMobileLen = 0; //<2F><><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD>ʼ
memset(szMobile , 0 , sizeof(szMobile));
if ( lMobileCount>=lMaxSendCount || i== lLen-1 ) //ÿ<>η<EFBFBD>50<35><30>
{
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD>
CSendPub::SendPub_Mms Sms={0};
Sms.lCorpID = lCorpID;
Sms.lUserID = lUserID;
if ( tTimer.GetStatus() == COleDateTime::valid ) //<2F><>ʱʱ<CAB1><CAB1>
{
tTimer.GetAsSystemTime(Sms.tTimer );
}
_tcscpy(Sms.szIP , strIP);
Sms.lPriority = 0; //<2F><>SubmitMms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
if ( Sms.lPriority>10 )
{
if ( bSDK )
Sms.lSendCount = 2000+Sms.lPriority*500; //<2F>ӿڷ<D3BF><DAB7>͵ģ<CDB5>5000<30><30><EFBFBD><EFBFBD>
else
Sms.lSendCount = 10000+Sms.lPriority*500; //<2F>ӿڷ<D3BF><DAB7>͵ģ<CDB5>5000<30><30><EFBFBD><EFBFBD>
}
//Sms.lPriority = 0; //<2F><>SubmitMms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
Sms.lSendCount = lMobileAllCount; //<2F>ܶ<EFBFBD><DCB6>ŷ<EFBFBD><C5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><E3B7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//Sms.tTimer = pSendData->tTimer;
Sms.bFirstCheckYE = true; //Ԥ<>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3AC><EFBFBD><EFBFBD><EEB2BB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if ( bSDK )
Sms.bWebReq = true;
/*
Sms.XY.bEnableXY = false;
if ( bEnableXY)
{
Sms.XY.bEnableXY = true;
Sms.XY.pSQLPool = &XYSqlPool;
}
*/
long lRet = CSendPub::SubmitSms(Sms, pSmsData,lMobileIndex,strErrMsg,&AdoRS,&AdoRS2);
if ( lRet>0 )
{
*pSendCount = *pSendCount + lRet;
if ( bSDK )
{
//<2F><><EFBFBD><EFBFBD>Ϊȡ<CEAA><C8A1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>ID
for ( int i=0 ; i<lMobileCount ; i++ )
{
if ( pSmsIDIndex[i]>=0 && pSmsIDIndex[i]<lMobileIndex )
{
long lSmsID = pSmsData[pSmsIDIndex[i]].lSendID;
str.Format(_T("%d") , lSmsID);
if ( strMsgID.GetLength()>0 )
strMsgID=strMsgID+CString(_T(","))+str;
else
strMsgID = str;
lMsgIDCount ++;
}
}
}
}
else
{
bSendBreak = true; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
break;
}
lMobileCount = 0;
lMobileIndex = 0;
}
}
else
{
if ( c>='0' && c<='9' && lMobileLen<19 )
{
szMobile[lMobileLen] = c;
lMobileLen ++;
}
}
}
if ( bSendBreak )
{
if ( bSDK )
m_strSendRet.Format(_T("%d,%s:%s"),lMsgIDCount,strMsgID,strErrMsg);
else
m_strSendRet.Format(_T("<EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ύ%d<><64><EFBFBD><EFBFBD>\\n<EFBFBD><EFBFBD><EFBFBD>Ϣ:%s") , *pSendCount,strErrMsg);
}
else
{
if ( bSDK )
m_strSendRet.Format(_T("%d,%s"),lMsgIDCount,strMsgID);
else
m_strSendRet.Format(_T("<EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ύ%d<><64><EFBFBD><EFBFBD>") , *pSendCount);
}
AdoRS.Close();
AdoRS2.Close();
#ifndef SMSCENTER_DGSB
if (strRecver != CString(_T("WebSDK")) && strRecver != CString(_T("WebSDK2")) && strRecver != CString(_T("WebF")) && strRecver != CString(_T("Web3")))
{
//ÿ<><C3BF><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>40<34><30>
while (GetTickCount() - lSendAllTime < 1 * 1000)
{
Sleep(100);
}
}
#endif
delete pSmsData;
delete pSmsIDIndex;
return S_OK;
}
catch(...)
{
*pSendCount = -2;
return S_OK;
}
return S_OK;
}
STDMETHODIMP CSms::get_SendRet(BSTR* pVal)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
*pVal = ::SysAllocString(m_strSendRet);
return S_OK;
}
STDMETHODIMP CSms::put_SendRet(BSTR newVal)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>
return S_OK;
}
STDMETHODIMP CSms::SendSms_Excel(IDispatch* pAdoConnect, LONG lCorpID, LONG lUserID, LONG lLongSms,LONG lFD, BSTR Timer2, BSTR IP, BSTR ExcelFileName, LONG* lSendCount)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
*lSendCount = 0;
try
{
CAdoConnection adoConnection;
CAdoRecordSet AdoRS;
if ( !adoConnection.ConnectExcel(ExcelFileName) )
{
m_strSendRet.Format(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Excel<EFBFBD>ļ<EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>%s"),ExcelFileName);
return S_OK;
}
AdoRS.SetAdoConnection(&adoConnection);
CString str;
str = _T("select * from [Sheet1$]");
AdoRS.Open(str);
while(!AdoRS.IsEOF() )
{
AdoRS.MoveNext();
}
}
catch(...)
{
*lSendCount = -2;
return S_OK;
}
return S_OK;
}
STDMETHODIMP CSms::CorpSmsHttpReq(BSTR pReq, BSTR pIPAddr, BSTR pReqVer, BSTR* pRet)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CString REQHEAD1=_T("MOBSETGATEWAY001");
CString REQHEAD2=_T("MOBSETGATEWAY002");
CString SMS_PIPE=_T("\\\\.\\PIPE\\SMSPIPE");
if ( CString(pReqVer) == CString(_T("W")) )
SMS_PIPE=_T("\\\\.\\PIPE\\SMSPIPEW");
long lLen = SysStringLen(pReq)*2+2048;
TCHAR * szReq = new TCHAR[lLen];
char * szReq2= new char[lLen];
memset(szReq,0,lLen);
memset(szReq2,0,lLen);
_tcscpy(szReq , pReq);//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
TCHAR szReqHead[128]={0};
CString strRet;
//strcpy( szRet , "ERROR" );
strRet.Format(_T("ERROR:Len=%d"),lLen-32);
long lSendCount=0; //ȡ<><C8A1>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5>ֽ<EFBFBD><D6BD><EFBFBD>
long lReqVer=1;
if ( !_tcsncmp(szReq,REQHEAD1,_tcslen(REQHEAD1)) ) //<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
{
_tcscpy(szReqHead,REQHEAD1);
lReqVer = 1; //<2F><>һ<EFBFBD><D2BB>
lSendCount = HexToAsciiA(szReq+_tcslen(szReqHead),szReq2);
}
else
if ( !_tcsncmp(szReq,REQHEAD2,_tcslen(REQHEAD2)) ) //<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
{
_tcscpy(szReqHead,REQHEAD2);
lReqVer = 2; //<2F>ڶ<EFBFBD><DAB6><EFBFBD>
TCHAR szTemp[64]={0};
_tcsncpy(szTemp,szReq+_tcslen(szReqHead),10);
long lSendCount2 = _ttol(szTemp)/2;
lSendCount = HexToAsciiA(szReq+_tcslen(szReqHead)+10,szReq2);
if ( lSendCount2 != lSendCount )
memset(szReqHead,0,sizeof(szReqHead));
}
if ( _tcslen(szReqHead)>2 )
{
//<2F><><EFBFBD>ӹܵ<D3B9>
if (WaitNamedPipe(SMS_PIPE, 2000))
//if ( true )
{
HANDLE hPipe=CreateFile(SMS_PIPE,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hPipe!=INVALID_HANDLE_VALUE)
{
//DWORD dwMode=PIPE_TYPE_BYTE|PIPE_NOWAIT;
//SetNamedPipeHandleState(hPipe,&dwMode,NULL,NULL); //<2F><><EFBFBD>ɷ<EFBFBD><C9B7><EFBFBD><EFBFBD><EFBFBD>ģʽ
//<2F><><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ͳ<EFBFBD>ȥ
tagPipeSend PipeSend={0};
_tcscpy(PipeSend.szIP , pIPAddr);
PipeSend.lDataLen = lSendCount;
DWORD dwWrite=0;
WriteFile(hPipe, &PipeSend, sizeof(PipeSend), &dwWrite, NULL);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long lWrite=0;
DWORD dwTime2 = ::GetTickCount();
while ( true )
{
WriteFile(hPipe,szReq2+lWrite,lSendCount-lWrite,&dwWrite,NULL);
lWrite=lWrite+dwWrite;
if ( lWrite>=lSendCount )
break;
Sleep(20);
if ( ::GetTickCount() - dwTime2 > 50000 ) //30<33><30><EFBFBD><EFBFBD><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>س<EFBFBD>ʱ
{
break;
}
}
//WriteFile(hPipe, szReq2, lSendCount, &dwWrite, NULL);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
memset(&PipeSend,0,sizeof(PipeSend));
long lRecvAllLen=0;
long lRecvLen=0;
BYTE * pData=NULL;
DWORD dwTime = ::GetTickCount();
DWORD dwRead=0;
while ( true )
{
dwRead=0;
if ( lRecvAllLen==0 ) //<2F><><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>
{
if ( ReadFile(hPipe,((char*)&PipeSend)+lRecvLen,sizeof(PipeSend)-lRecvLen,&dwRead,NULL)) //ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD>ݵij<DDB5><C4B3><EFBFBD>
{
lRecvLen = lRecvLen + dwRead;
if ( lRecvLen == sizeof(PipeSend) )
{
lRecvAllLen = PipeSend.lDataLen;
if ( lRecvAllLen<=0 ) //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
strRet += CString(_T("ERR:RecvRetError"));
break;
}
else
{
if ( pData )
delete pData;
pData = new BYTE[lRecvAllLen+2048];
memset(pData,0,lRecvAllLen+2048);
}
lRecvLen = 0;
}
}
}
else
{
if ( ReadFile(hPipe,pData+lRecvLen,lRecvAllLen-lRecvLen,&dwRead,NULL)) //ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD>ݵij<DDB5><C4B3><EFBFBD>
{
lRecvLen = lRecvLen + dwRead;
if ( lRecvLen == lRecvAllLen )
{
//<2F><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long lRetSize=_tcslen(szReqHead)+lRecvAllLen+32;
TCHAR * pRetH=new TCHAR[lRetSize*2];memset(pRetH,0,sizeof(TCHAR)*lRetSize*2);
TCHAR * pRetH2=pRetH;
_tcscpy(pRetH2,szReqHead);pRetH2=pRetH2+_tcslen(szReqHead);
AsciiToHexW((char*)pData,pRetH2,lRecvAllLen);
#ifdef _DEBUG
CString strFileName;
strFileName.Format(_T("d:\\Http_Ret_%d.txt"),GetTickCount());
CFile file(strFileName , CFile::modeCreate|CFile::modeReadWrite);
file.Write(CW2A(pRetH) , strlen(CW2A(pRetH)));
file.Close();
#endif
*pRet = ::SysAllocString(pRetH);
if ( pData )
delete pData;
delete pRetH;
delete szReq;
delete szReq2;
return S_OK;
}
}
}
Sleep(50);
//if ( ::GetTickCount() - dwTime >35000 ) //35<33><35><EFBFBD>ڽ<EFBFBD><DABD>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>ʱ
if ( ::GetTickCount() - dwTime >35000 ) //35<33><35><EFBFBD>ڽ<EFBFBD><DABD>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>ʱ
{
strRet = strRet + _T("ERR:TimeOut");
break;
}
}
if ( pData )
delete pData;
}
else
{
DWORD dw=::GetLastError();
strRet.Format(_T("ERR:Pipe02,%d"),dw);
}
}
else
{
strRet = _T("ERR:Pipe01");
}
}
*pRet = ::SysAllocString(strRet);
delete szReq;
delete szReq2;
return S_OK;
}
STDMETHODIMP CSms::CheckPasswd3(LONG CorpID, BSTR User, BSTR Passwd, BSTR TimeStamp, BSTR Encrypt, LONG Purview, BSTR* pRet)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CString strRet;
//ȡ<><C8A1>User ,Passwd
char szUser[64] = { 0 };
char szPasswd[128] = { 0 };
char szPasswd2[128] = { 0 };
char szEncrypt[128] = { 0 };
TCHAR szPasswdU2[128] = { 0 };
strcpy(szUser, CW2A(User));
strcpy(szPasswd, CW2A(Passwd));
strcpy(szEncrypt, CW2A(Encrypt));
CDes des;
long lOut = sizeof(szPasswd2);
des.Decrypt(szEncrypt, (long)strlen(szEncrypt), szPasswd2, lOut, szUser, 8);
_tcscpy(szPasswdU2, CA2W(szPasswd2));
CString strCorpID;
strCorpID.Format(_T("%d"), CorpID);
CString strPasswd2 = szPasswdU2;
CString strTimeStamp = TimeStamp;
CString strMd5 = Passwd;
strMd5.MakeUpper();
CString strMd52 = CSendPub::GetMD5(strCorpID + strPasswd2 + strTimeStamp, false);
strMd52.MakeUpper();
strRet = strMd52;
if (strMd5 == strMd52)
{
strRet = CString(_T("1"));
}
else
{
strRet = CString(_T("0"));
}
if (!(Purview&PURVIEW_LOGIN))
{
strRet = CString(_T("-1"));
}
if (!(Purview&PURVIEW_SENDP))
{
strRet = CString(_T("-1"));
}
*pRet = ::SysAllocString(strRet);
return S_OK;
}