📄 data.cpp
字号:
lCmdLen = ntohl(lCmdLen);
cursor += 4;
nTmpLen += 4;
// data packet's length is error
if (lCmdLen != nLen)
{
WriteLog("接收到的数据包的长度跟数据包的长度不符!", _T("I219"));
return;
}
//get first mobile
temp = strchr(cursor, ',');
if (temp == 0)
{
// if (lstrlen(cursor) > 11)
// {
// WriteLog("接收到的数据包的目的手机号不对!", _T("I219"));
// return;
// }
lstrcpy(info.szDestMobile, cursor);
}
else
{
// if (temp - cursor > 11)
// {
// WriteLog("接收到的数据包的目的手机号不对!", _T("I219"));
// return;
// }
strncpy(info.szDestMobile, cursor, temp - cursor);
info.szDestMobile[temp - cursor] = '\0';
}
nTmpLen += lstrlen(cursor) + 1;
cursor += lstrlen(cursor) + 1;
nTmpLen += 4;
if (nTmpLen >= nLen)
{
szLog.Format("接收到的数据包的长度太短![Mobile:%s]", info.szDestMobile);
WriteLog(szLog, _T("I219"));
return;
}
//msg level
memcpy(&info.lMsgLevel, cursor, 4);
info.lMsgLevel = ntohl(info.lMsgLevel);
cursor += 4;
if (info.lMsgLevel <= 1 || info.lMsgLevel > 9)
info.lMsgLevel = 3;
info.lMsgLevel += 10; // IOD: 10-19
//Service Sub ID
lstrcpy(info.szSubID, cursor);
nTmpLen += lstrlen(cursor) + 1;
cursor += lstrlen(cursor) + 1;
if (nTmpLen >= nLen)
{
szLog.Format("接收到的数据包的长度太短![Mobile:%s;MsgLevel:%d]", info.szDestMobile, info.lMsgLevel);
WriteLog(szLog, _T("I219"));
return;
}
//Source TemrID
lstrcpy(info.szSrcTermID, cursor);
nTmpLen += lstrlen(cursor) + 1;
cursor += lstrlen(cursor) + 1;
if (nTmpLen >= nLen)
{
szLog.Format("接收到的数据包的长度太短![Mobile:%s;MsgLevel:%d;SubID:%s]", info.szDestMobile, info.lMsgLevel, info.szSubID);
WriteLog(szLog, _T("I219"));
return;
}
//Source gw ID
lstrcpy(info.szSrcGWID, cursor);
nTmpLen += lstrlen(cursor) + 1;
cursor += strlen(cursor) + 1;
if (nTmpLen >= nLen)
{
szLog.Format("接收到的数据包的长度太短![Mobile:%s;MsgLevel:%d;SubID:%s;SrcMobile:%s]",
info.szDestMobile, info.lMsgLevel, info.szSubID, info.szSrcTermID);
WriteLog(szLog, _T("I219"));
return;
}
nTmpLen += 4;
if (nTmpLen > nLen)
{
szLog.Format("接收到的数据包的长度太短![Mobile:%s;MsgLevel:%d;SubID:%s;SrcMobile:%s;SrcGW:%s]",
info.szDestMobile, info.lMsgLevel, info.szSubID, info.szSrcTermID, info.szSrcGWID);
WriteLog(szLog, _T("I219"));
return;
}
//msg format
memcpy(&info.lMsgFmt, cursor, 4);
info.lMsgFmt = ntohl(info.lMsgFmt);
cursor += 4;
if (info.lMsgFmt != 0 && info.lMsgFmt != 3 &&
info.lMsgFmt != 4 && info.lMsgFmt != 8 &&
info.lMsgFmt != 15)
{
// szLog.Format("接收到的数据包的内容格式不对![Mobile:%s;MsgLevel:%d;SubID:%s;SrcMobile:%s;SrcGW:%s;MsgFmt:%d]",
// info.szDestMobile, info.lMsgLevel, info.szSubID, info.szSrcTermID, info.szSrcGWID, info.lMsgFmt);
// WriteLog(szLog, _T("I219"));
// return;
info.lMsgFmt = 0; // default is ASCII
}
nTmpLen += 4;
if (nTmpLen > nLen)
{
szLog.Format("接收到的数据包的长度太短![Mobile:%s;MsgLevel:%d;SubID:%s;SrcMobile:%s;SrcGW:%s;MsgFmt:%d]",
info.szDestMobile, info.lMsgLevel, info.szSubID, info.szSrcTermID, info.szSrcGWID, info.lMsgFmt);
WriteLog(szLog, _T("I219"));
return;
}
//msg length
memcpy(&info.lMsgLen, cursor, 4);
info.lMsgLen = ntohl(info.lMsgLen);
cursor += 4;
if (nTmpLen + info.lMsgLen > nLen)
{
szLog.Format("接收到的数据包的长度太短![Mobile:%s;MsgLevel:%d;SubID:%s;SrcMobile:%s;SrcGW:%s;MsgFmt:%d;MsgLen:%d]",
info.szDestMobile, info.lMsgLevel, info.szSubID, info.szSrcTermID, info.szSrcGWID, info.lMsgFmt, info.lMsgLen);
WriteLog(szLog, _T("I219"));
return;
}
//msg content
memcpy(info.szContent, cursor, info.lMsgLen);
//msg time
info.lTime = CTime::GetCurrentTime().GetTime();
//add to log
WriteLog(LT_IAS, info.szDestMobile, info.szSubID, info.lMsgFmt, info.lMsgLen,
info.szContent, _TEXT(""), info.szSrcGWID, info.szSrcTermID, info.lMsgLevel, "", NULL, NULL, 0, pszFrom);
// add to list
m_RecLocker.Lock();
m_RecMsgList.push_back(info);
// m_RecMsgList.AddTail(info);
m_RecLocker.Unlock();
}
BOOL CData::GetOneRecMsg(LPIOD_Info pInfo)
{
BOOL bOK = TRUE;
m_RecLocker.Lock();
if (!m_RecMsgList.empty()) // have data
{
*pInfo = m_RecMsgList.front();
m_RecMsgList.pop_front();
}
else
bOK = FALSE;
m_RecLocker.Unlock();
return bOK;
}
void CData::AddOneSendMsg(LPIOD_Info pInfo)
{
m_SendLocker.Lock();
m_SendMsgList.push_back(*pInfo);
m_SendLocker.Unlock();
}
BOOL CData::GetOneSendMsg(LPIOD_Info pInfo)
{
BOOL bOK = TRUE;
m_SendLocker.Lock();
if (!m_SendMsgList.empty()) // have data
{
*pInfo = m_SendMsgList.front();
m_SendMsgList.pop_front();
if (CTime::GetCurrentTime().GetTime() - pInfo->lTime < theCfgInfo.nRetryInterval && pInfo->nLife != 0)
{
m_SendMsgList.push_back(*pInfo);
bOK = FALSE;
}
}
else
bOK = FALSE;
m_SendLocker.Unlock();
return bOK;
}
void CData::AddTransferMsg(LPIOD_Info pInfo)
{
m_TransLocker.Lock();
m_TransMsgList.push_back(*pInfo);
m_TransLocker.Unlock();
}
BOOL CData::GetTransferMsg(LPIOD_Info pInfo)
{
BOOL bOK = TRUE;
m_TransLocker.Lock();
if (!m_TransMsgList.empty()) // have data
{
*pInfo = m_TransMsgList.front();
m_TransMsgList.pop_front();
if (CTime::GetCurrentTime().GetTime() - pInfo->lTime < theCfgInfo.nRetryInterval && pInfo->nLife != 0)
{
m_TransMsgList.push_back(*pInfo);
bOK = FALSE;
}
}
else
bOK = FALSE;
m_TransLocker.Unlock();
return bOK;
}
void CData::Add0000Msg(LPIOD_Info pInfo)
{
m_0000Locker.Lock();
m_0000MsgList.push_back(*pInfo);
m_0000Locker.Unlock();
}
BOOL CData::Get0000Msg(LPIOD_Info pInfo)
{
BOOL bOK = TRUE;
m_0000Locker.Lock();
if (!m_0000MsgList.empty()) // have data
{
*pInfo = m_0000MsgList.front();
m_0000MsgList.pop_front();
if (CTime::GetCurrentTime().GetTime() - pInfo->lTime < theCfgInfo.nRetryInterval && pInfo->nLife != 0)
{
m_0000MsgList.push_back(*pInfo);
bOK = FALSE;
}
}
else
bOK = FALSE;
m_0000Locker.Unlock();
return bOK;
}
void CData::SetMsg(LPIOD_Info pIOD, LPCTSTR pszMsg, LPCTSTR pszSendNo, LPCTSTR pszSubID, LPCTSTR pszFeeCode, LPCTSTR pszFeeType, int nMsgType, LPCOMMONINFO pInfo)
{
pIOD->nLife=0;
pIOD->lTime=CTime::GetCurrentTime().GetTime();
if (pszMsg != NULL)
{
CString szTmp(pszMsg);
if (szTmp.Find("{HOTLINE}")!=-1)
{
if (pInfo->szHotline.IsEmpty())
szTmp.Replace("{HOTLINE}", "02124028787");
else
szTmp.Replace("{HOTLINE}", pInfo->szHotline);
}
if (szTmp.Find("{ENTRYNO}")!=-1)
{
if (pInfo->szEntryno.IsEmpty())
szTmp.Replace("{ENTRYNO}", "1186666");
else
szTmp.Replace("{ENTRYNO}", pInfo->szEntryno);
}
lstrcpy(pIOD->szContent, szTmp);
}
pIOD->lMsgLen = lstrlen(pIOD->szContent);
pIOD->lMsgType=nMsgType;
if (pszSendNo!=NULL)
lstrcpy(pIOD->szSrcTermID, pszSendNo);
pIOD->lMsgFmt=15;
lstrcpy(pIOD->szSubID, pszSubID);
lstrcpy(pIOD->szFeeCode, pszFeeCode);
lstrcpy(pIOD->szFeeType, pszFeeType);
AddOneSendMsg(pIOD);
}
void CData::SetMsg2(LPVOID pDB, LPIOD_Info pIOD, LPCTSTR pszCmd,list<pair<CString,CString> > * ReplacePair, LPCOMMONINFO pInfo)
{
OUTPUTMSGLIST msglist;
((CMyDatabase*)pDB)->GetOutputMsg(pIOD->szDestMobile, pszCmd, &msglist);
list<OUTPUTMSG>::iterator msg;
list<pair<CString,CString> >::iterator it2;
for (msg=msglist.begin(); msg!=msglist.end(); msg++)
{
//B add by joy 2003-08-26
CString strContent=(*msg).szMsg;
if(ReplacePair!=NULL)
{
for(it2=ReplacePair->begin();it2!=ReplacePair->end();it2++)
{
strContent.Replace(it2->first,it2->second);
}
}
(*msg).szMsg=strContent;
//E add by joy 2003-08-26
SetMsg(pIOD, (*msg).szMsg, (*msg).szSendNo, (*msg).szSubID, (*msg).szFeeCode, (*msg).szFeeType, (*msg).nMsgType, pInfo);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -