📄 deliverthread.cpp
字号:
printf("\r\n"); */
if(pstDeliver->cRegistered_Delivery == 1)
{
HandleReportPdu(pstNodeBuf,szRecvBuf);
return true;
}
nMsgLen = pstDeliver->nMessageLength;
if(nMsgLen < 0)
return true;
int nLinkidPos = PDU_HEADER_SIZE + sizeof(SCmppDeliver) - MAX_MESSAGE_LENGTH + nMsgLen - LINKID_LENGTH;
strcpy(szLinkID,(szRecvBuf+nLinkidPos));
szLinkID[LINKID_LENGTH] = '\0';
switch(pstDeliver->cMessageCoding)
{
case CMPP_DC_ASCII:{
strncpy(szShortMsg,pstDeliver->szMessageContent,nMsgLen);
szShortMsg[nMsgLen] = '\0';
}
break;
case CMPP_DC_GB2312:{
strncpy(szShortMsg,pstDeliver->szMessageContent,nMsgLen);
szShortMsg[nMsgLen] = '\0';
}
break;
case CMPP_DC_UCS2:
// UnicodeToAnsi(pstDeliver->szMessageContent,ntohl(pstDeliver->nMessageLength),szShortMsg);
UnicodeToAnsi(pstDeliver->szMessageContent,pstDeliver->nMessageLength,szShortMsg);
break;
default:{
strncpy(szShortMsg,pstDeliver->szMessageContent,nMsgLen);
szShortMsg[nMsgLen] = '\0';
strTmp1.Format("其余格式短信:用户%s,短信%s,编码各式%d",pstDeliver->szSrc_terminal_Id,szShortMsg,pstDeliver->cMessageCoding);
LogMsg(strTmp1);
}
}
/* CMailCoder mailcoder;
int iLen = 32;
int iOutLen=mailcoder.Base64EncodeSize(iLen);
char featurestr[100];
featurestr[iOutLen] = '\0';
mailcoder.base64_encode(pstDeliver->szSrc_terminal_Id,iLen,featurestr);
if(iFirst == 0)
memcpy(WEIMA,pstDeliver->szSrc_terminal_Id,32);
else
memcpy(WEIMANEW,pstDeliver->szSrc_terminal_Id,32);
iFirst++; */
sprintf(szTrace,"[MO]收到%s的短信:%s,发送人:%s",pstDeliver->szSrc_terminal_Id,szShortMsg,pstDeliver->szDest_Id);
LogMsg(szTrace);
strSender=TrimStr(pstDeliver->szDest_Id);
strTempMsg = TrimStr(szShortMsg) ;
strDest=TrimStr(pstDeliver->szSrc_terminal_Id);
strLinkID.Format("%s",szLinkID);
strTempMsg.Replace("'","''") ;
strShortMsg.Format("%s",strTempMsg);
strcpy(szShortMsg,strTempMsg) ;
/////////////////////////////////////////////////////
GetMoTabName(strShortMsg,strMoTable,strSender);
if(strMoTable.IsEmpty())
{
strTmp.Format("%s",m_szHelp);
SubmitToTable(strShortMsg,strDest,strSender,strLinkID,m_szErrorTable);
SubmitToSend(strTmp,strDest,strSender,strLinkID,FALSE);
}
else
{
if (m_bMonth) //开启包月功能
SubmitToMonthTable(strShortMsg,strDest,strSender,strLinkID,strMoTable);
SubmitToTable(strShortMsg,strDest,strSender,strLinkID,strMoTable);
}
SubmitToDeliverLog(szShortMsg,strDest,strSender,strLinkID);
return true;
}
BOOL CDeliverThread::HandleReportPdu(SServerNodeBuffer *pstNodeBuf, const char *szRecvBuf)
{
CString strSql,strTmp;
CSqlExec sql_db(&m_database);
SCmppDeliver *pstDeliver;
SCmppReport *pstReport;
CString strMsg;
CString strMsgID;
int nRecCount = -1,nInValid = 0;
int nMsgLen = 0;
pstDeliver =(SCmppDeliver*)(szRecvBuf + PDU_HEADER_SIZE);
nMsgLen = pstDeliver->nMessageLength;
pstDeliver->szMessageContent[nMsgLen] = '\0';
pstReport = (SCmppReport*)( pstDeliver->szMessageContent);
pstReport->szStat[7] = '\0';
strMsg.Format("[MO]收到状态报告信息,用户号:%s,state:%s.",
pstReport->szDest_terminal_Id,pstReport->szStat);
LogMsg(strMsg);
/*
int itmp=1;//luming add 20041228 SUCCESS
itmp =strcmp(pstReport->szStat,"DELIVRD");
if(itmp==0)
{
strSql.Format("insert into gr_Status_rpt_tmp(RptTime,state,mobile) values(getdate(),'%s','%s') ",
pstReport->szStat,pstReport->szDest_terminal_Id);
sql_db.SetSqlStatement(strSql);
try
{
sql_db.Open();
}
catch(CDBException * e)
{
strTmp.Format("执行%s失败!",strSql);
LogMsg(strTmp);
return true;
}
}//add end
*/
strSql.Format("insert into gr_Status_rpt(RptTime,state,mobile) values(getdate(),'%s','%s') ",
pstReport->szStat,pstReport->szDest_terminal_Id);
sql_db.SetSqlStatement(strSql);
if (!sql_db.Open())
{
strTmp.Format("执行%s失败!",strSql);
LogMsg(strTmp);
return true;
}
//LogMsg(pstReport->szStat);
return true;
}
void CDeliverThread::GetMoTabName(CString strMsg, CString &strMoTab, const char *szDestAddr)
{
CString strCmd ,strSender, strDestAddr,_strDestAddr;
int i;
strCmd = TrimStr(strMsg);
strCmd.MakeUpper();
_strDestAddr = TrimStr(szDestAddr);
if (_strDestAddr.Find(m_szSPNumber) > 1)
{
if(_strDestAddr.Find("86") == 0)
strDestAddr = _strDestAddr.Right(_strDestAddr.GetLength()-2);
else
strDestAddr = _strDestAddr;
}
else
strDestAddr = _strDestAddr;
strMoTab.Empty() ;
for(i = 0; i< m_nNumOfGameCmd ; i++ ) {
strSender = TrimStr(m_astCmdTab[i].strSender);
if(m_astCmdTab[i].iSenderType == 1) { //根据接入号精确匹配
if((strDestAddr.CompareNoCase(strSender) == 0)
&& (IsFindedMoTable(i, strCmd,strMoTab)))
break ;
}
else { //根据接入号模糊匹配
if( ( strDestAddr.Find("81288") == 0 ) && ( strDestAddr.GetLength()==10 ) ){//倾城之恋的会员
strMoTab.Format( "%s",m_szChatTable ) ;
break ;
}
if((strDestAddr.Find(strSender) == 0)
&& (IsFindedMoTable(i,strCmd,strMoTab)))
break ;
}
}
if((!strMoTab.IsEmpty()) && (m_astCmdTab[i].iMoTabNum > 1)) {
CString strTmp;
int iRandom = rand();
iRandom = iRandom % m_astCmdTab[i].iMoTabNum + 1;
strTmp.Format("%s_%d",strMoTab, iRandom) ;
strMoTab = strTmp ;
}
//开启聊天功能
if (strMoTab.IsEmpty())
{
if (m_bChat)
{
if ( strDestAddr.GetLength() >= (strlen(m_szSPNumber)+m_nChatLen) || IncludeChinese(strCmd))
strMoTab.Format("%s",m_szChatTable);
}
}
}
BOOL CDeliverThread::IsFindedMoTable(int nIndex, CString strCmd, CString &strMoTab)
{
CString strCommand;
bool IsFinded = false ;
strCommand = TrimStr(m_astCmdTab[nIndex].strCmd);
if (m_astCmdTab[nIndex].iMatchType == 1)
{ //根据指令精确匹配
if (strCommand.CompareNoCase("00000") == 0) //指令全部分配表中,条件是精确匹配且配置指令为"00000"
{
strMoTab = m_astCmdTab[nIndex].strMoTab ;
IsFinded = true ;
}
else
{
if( strCmd.CompareNoCase(strCommand) == 0 ) {
strMoTab = m_astCmdTab[nIndex].strMoTab ;
IsFinded = true ;
}
}
}
else
{ //根据指令模糊匹配
if( strCmd.Find(strCommand) == 0 )
{
strMoTab = m_astCmdTab[nIndex].strMoTab ;
IsFinded = true ;
}
}
return IsFinded ;
}
void CDeliverThread::SubmitToTable(const char *szMsg, const char *szSAddr, const char *szDAddr, const char *szLinkID, const char *szTable)
{
CSqlExec sql_deliver(&m_database);
CString strSql,strMsg;
CString strSAddr,_strSAddr,strDAddr,_strDAddr;
_strSAddr = szSAddr;
_strDAddr = szDAddr;
if (_strSAddr.Find("86") == 0)
strSAddr = _strSAddr.Right(_strSAddr.GetLength()-2);
else
strSAddr = _strSAddr;
if (_strDAddr.Find(m_szSPNumber) > 1)
{
if(_strDAddr.Find("86") == 0)
strDAddr = _strDAddr.Right(_strDAddr.GetLength()-2);
else
strDAddr = _strDAddr;
}
else
strDAddr = _strDAddr;
strSql.Format("insert into %s(short_msg,src_addr,dst_addr,linkid) \
values('%s','%s','%s','%s')",szTable,szMsg,strSAddr,strDAddr,szLinkID);
sql_deliver.SetSqlStatement(strSql);
if(!sql_deliver.Open())
{
strMsg.Format("执行SQL语句出错:%s",strSql);
LogMsg(strMsg);
return;
}
}
void CDeliverThread::SubmitToMonthTable(const char *szMsg, const char *szSAddr, const char *szDAddr, const char *szLinkID, const char *szTable)
{
CSqlExec sql_deliver(&m_database);
CString strSql,strMsg;
CString strSAddr,_strSAddr,strDAddr,_strDAddr;
_strSAddr = szSAddr;
_strDAddr = szDAddr;
if (_strSAddr.Find("86") == 0)
strSAddr = _strSAddr.Right(_strSAddr.GetLength()-2);
else
strSAddr = _strSAddr;
if (_strDAddr.Find(m_szSPNumber) > 1)
{
if(_strDAddr.Find("86") == 0)
strDAddr = _strDAddr.Right(_strDAddr.GetLength()-2);
else
strDAddr = _strDAddr;
}
else
strDAddr = _strDAddr;
strSql.Format("insert into %s(short_msg,src_addr,dst_addr,linkid,tablename) \
values('%s','%s','%s','%s','%s')",m_szMonthTable,szMsg,strSAddr,strDAddr,szLinkID,szTable);
sql_deliver.SetSqlStatement(strSql);
if(!sql_deliver.Open())
{
strMsg.Format("执行SQL语句出错:%s",strSql);
LogMsg(strMsg);
return;
}
}
void CDeliverThread::SubmitToSend(const char *szMsg, const char *szSAddr, const char *szDAddr, const char *szLinkID, BOOL bCancle)
{
CSqlExec sql_deliver(&m_database);
CString strSql,strMsg;
CString strSAddr,_strSAddr,strDAddr,_strDAddr;
_strSAddr = szSAddr;
_strDAddr = szDAddr;
//8686008600 868188 8188
if (_strSAddr.Find("86") == 0)
strSAddr = _strSAddr.Right(_strSAddr.GetLength()-2);
else
strSAddr = _strSAddr;
if (_strDAddr.Find(m_szSPNumber) > 1)
{
if(_strDAddr.Find("86") == 0)
strDAddr = _strDAddr.Right(_strDAddr.GetLength()-2);
else
strDAddr = _strDAddr;
}
else
strDAddr = _strDAddr;
strSql.Format("insert into %s(message,mobile,sender,linkid,servicetype,feetype,feevalue,givenvalue,motomtflag) \
values('%s','%s','%s','%s','%s','%d','%d','%d','%d')",
m_szTableName,
szMsg,
strSAddr,
strDAddr,
szLinkID,
m_deffee.strServiceType,
m_deffee.iFeeType,
m_deffee.iFeeValue,
m_deffee.iGivenValue,
m_deffee.iMotomtFlag);
sql_deliver.SetSqlStatement(strSql);
if(!sql_deliver.Open())
{
strMsg.Format("执行SQL语句出错:%s",strSql);
LogMsg(strMsg);
return;
}
}
void CDeliverThread::SubmitToDeliverLog(const char *szMsg, const char *szSAddr, const char *szDAddr, const char *szLinkID)
{
CSqlExec sql_deliver(&m_database);
CString strSql;
CString strSAddr,_strSAddr,strDAddr,_strDAddr;
CTime ctTime = CTime::GetCurrentTime();
CString strMsg;
_strSAddr = szSAddr;
_strDAddr = szDAddr;
if (_strSAddr.Find("86") == 0)
strSAddr = _strSAddr.Right(_strSAddr.GetLength()-2);
else
strSAddr = _strSAddr;
if (_strDAddr.Find(m_szSPNumber) > 1)
{
if(_strDAddr.Find("86") == 0)
strDAddr = _strDAddr.Right(_strDAddr.GetLength()-2);
else
strDAddr = _strDAddr;
}
else
strDAddr = _strDAddr;
if(!m_bDeliverToEveryDayTable)
{
strSql.Format("insert into %s(short_msg,src_addr,dst_addr,linkid) \
values('%s','%s','%s','%s',)",m_szDeliverLogTableName,szMsg,strSAddr,strDAddr,szLinkID);
}
else
{
strSql.Format("insert into %s_%02d(short_msg,src_addr,dst_addr,linkid) \
values('%s','%s','%s','%s')",m_szDeliverLogTableName,ctTime.GetDay(), szMsg,strSAddr,strDAddr,szLinkID);
}
sql_deliver.SetSqlStatement(strSql);
if(!sql_deliver.Open())
{
strMsg.Format("执行SQL语句出错:%s",strSql);
LogMsg(strMsg);
}
}
void CDeliverThread::HandleSubmitRespPdu(SServerNodeBuffer *pstNodeBuf, const char *szRecvBuf)
{
SCmppSubmitResp *pstSubmitResp;
int iResult;
char szErrorMsg[200];
pstSubmitResp =(SCmppSubmitResp*)(szRecvBuf + PDU_HEADER_SIZE);
// iResult = ntohl(pstSubmitResp->iResult);
iResult = pstSubmitResp->iResult;
GetStatusMessage(CMPP_SUBMIT_RESP,iResult,szErrorMsg);
LogMsg(szErrorMsg);
}
int CDeliverThread::SeekTask(int nSequence)
{
int head = m_nTaskHead;
while(head != m_nTaskTail)
{
if(m_stTask[head].m_iSequenceNumber == nSequence)
return head;
head = (head +1) % MAX_TASK_SIZE;
}
return -1;
}
void CDeliverThread::ProcessIdle()
{
while(m_nTaskHead != m_nTaskTail)
{
if(m_stTask[m_nTaskHead].m_bState == S_IDLE)
m_nTaskHead = (m_nTaskHead +1) % MAX_TASK_SIZE;
else
break;
}
}
int CDeliverThread::SendCmppTerminateResp(SServerNodeBuffer *pstNodeBuf, const char *szRecvBuf)
{
pstNodeBuf->m_iConnected = CMPP_STATUS_NOT_CONNECT;
pstNodeBuf->m_stSocket.Close();
return 1;
}
void CDeliverThread::WriteFaildLog(CString strMobile,int iResult)
{
CString strFileMsg;
strFileMsg.Format("Mobile=%s,Result=%d",strMobile,iResult);
LogFile(strFileMsg);
//modify by lzq ,2005-12-16
CString strSql,strTmp;
CSqlExec sql_db(&m_database);
CString strPhone = strMobile;
if(strPhone.GetLength() == 11)
strPhone = "86" + strMobile;
strSql.Format("insert into gr_Status_rpt(RptTime,state,mobile) values(getdate(),'SB:RESP8','%s') ",
strPhone);
sql_db.SetSqlStatement(strSql);
if (!sql_db.Open())
{
strTmp.Format("执行%s失败!",strSql);
LogMsg(strTmp);
}
//end modify
}
void CDeliverThread::UpdateMsgID(int nTaskID,CString strMsgID)
{
SCmppSubmit *pstSubmit;
pstSubmit =(SCmppSubmit*)(m_stTask[nTaskID].m_baPduBuf.GetData() + PDU_HEADER_SIZE);
CString strMobile = pstSubmit->szDest_terminal_Id;
CString strSQL;
CString strFeeValue = pstSubmit->szFeeCode;
/*
char szBuffer[3];
strncpy(szBuffer,pstSubmit->cFeeType,2);
CString strFeeType = szBuffer;
*/
if(strFeeValue == "300")
{
strSQL.Format("insert into byFeeStatus_Wait(NumberID,msg_ID,Mobile)values(%d,'%s','%s') ",m_stTask[nTaskID].m_iSequenceNumber,strMsgID,strMobile);
CSqlExec sql_db(&m_database);
sql_db.SetSqlStatement(strSQL);
if (!sql_db.Open())
{
CString strTmp;
strTmp.Format("执行%s失败!",strSQL);
LogMsg(strTmp);
}
LogFile(strSQL);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -