732
社区成员




void SendSms::StartSend()
{
nSendNow = 0;
nAllToSend=0;
m_nSms = 0;
nCurSend = 0;
n_SmsId=0;
int i ;
for(i = 0 ; i < m_pBase->m_pItemMenu->m_nItemNum ; i++ )
{
if(m_pBase->m_pItemMenu->m_pItemData[i]->nSendFlag == 2 )
{
nAllToSend ++;
}
}
if( m_pBase->m_pToSendSms != NULL)
{
int nTotalLen = WSTRLEN(m_pBase->m_pToSendSms);
if( m_pBase->m_pPhoneInfo->nMaxWord != 0)
{
int a = nTotalLen/m_pBase->m_pPhoneInfo->nMaxWord;
int b = nTotalLen%m_pBase->m_pPhoneInfo->nMaxWord;
m_nSms = (b==0)?a:(a+1);
}
else
m_nSms = 1;
}
nAllToSend = nAllToSend*m_nSms;
// CALLBACK_Init(&m_cb,SendCB,this);
SendAction();
}
void SendSms::SendAction()
{
int k = 0;
boolean bToSend = FALSE;
for(k = 0 ; k < m_pBase->m_pItemMenu->m_nItemNum ; k++)
{
if( m_pBase->m_pItemMenu->m_pItemData[k]->nSendFlag == 2)
{
AECHAR *pwNumber =(AECHAR *)m_pBase->m_pItemMenu->m_pItemData[k]->dwData;
if( pwNumber == NULL)
{
continue;
}
FREEIF(m_pszNumber);
int nLen = WSTRLEN(pwNumber)+1;
m_pszNumber =(char *)MALLOC(nLen);
m_pszNumber = (char *)WSTRTOSTR(pwNumber,m_pszNumber,nLen);
bToSend = TRUE;
break;
}
}
if( !bToSend || nSendNow >= nAllToSend || m_nSms == 0)
{
CALLBACK_Cancel(&m_cb);
m_pBase->m_bInSend = FALSE;
return;
}
FREEIF(m_pCurSendSms);
m_pCurSendSms = (AECHAR *)MALLOC(m_pBase->m_pPhoneInfo->nMaxWord *2 +2);
WSTRNCOPYN(m_pCurSendSms,m_pBase->m_pPhoneInfo->nMaxWord+1,
m_pBase->m_pToSendSms + nCurSend*m_pBase->m_pPhoneInfo->nMaxWord,m_pBase->m_pPhoneInfo->nMaxWord);
WebOpt awo[6];
int i = 0 ;
uint32 nReturn=0;
ISHELL_CreateInstance( m_pIShell, AEECLSID_SMSMSG, (void **)&m_pMsg);
awo[i].nId = MSGOPT_TO_DEVICE_SZ ;
awo[i].pVal = (void *)m_pszNumber;
i++;
awo[i].nId = MSGOPT_PAYLOAD_WSZ ;
awo[i].pVal = (void *)m_pCurSendSms;
i++;
awo[i].nId = MSGOPT_PAYLOAD_ENCODING;
awo[i].pVal = (void *)AEE_ENC_UNICODE ;
i++;
awo[i].nId = MSGOPT_MOSMS_ENCODING;
awo[i].pVal = (void *)AEESMS_ENC_UNICODE;
i++;
awo[i].nId = MSGOPT_END;
/* add 'em */
int np;
np=ISMSMSG_AddOpt(m_pMsg, awo);
if(np!=SUCCESS)
{
DBGPRINTF("opt problem");
return;
}
else
{
DBGPRINTF("ready to send sms");
ISMS_SendMsg(m_pISms,m_pMsg, &m_cb, &nReturn); //<---- 就是这里 导致机器重启 单发重启概率很小 回调的问题
}
n_SmsId++;
if( nReturn == 0 )
{
DBGPRINTF("===============ACCESS=========%d",n_SmsId);
if( m_pBase->m_pItemMenu->m_pItemData[k]->nSendFlag == 2 && nCurSend == m_nSms-1)
m_pBase->m_pItemMenu->m_pItemData[k]->nSendFlag = 1;
}
else
{
DBGPRINTF("=============FAIL===========%d",n_SmsId);
m_pBase->m_pItemMenu->m_pItemData[k]->nSendFlag = 0;
}
nCurSend = ++nCurSend%m_nSms;
nSendNow++;
m_pBase->m_bInSend = TRUE;
}
void SendSms::SendCB(SendSms *pSms)
{
RELEASEIF(pSms->m_pMsg);
ISHELL_PostEvent(pSms->m_pIShell,ISHELL_ActiveApplet(pSms->m_pIShell),EVT_SMSSEND_COMMAND,0,0);
CALLBACK_Cancel(&pSms->m_cb);
}