|
通过支持AT指令集的手机发送短消息(源代码)(19) pSms->lMsgType = MSGTYPE_SMS; CopyMemory( szTemp, p, 2 ); int nNumLen = atoi( szTemp ); p += 2; if( nNumLen <= 16 ) { CopyMemory( pSms->szSmsc, p, nNumLen * 2 ); NumberDecode( pSms->szSmsc, nNumLen * 2 ); if( pSms->szSmsc[nNumLen * 2 - 1] == 'F' ) pSms->szSmsc[nNumLen * 2 - 1] = '\0'; } p += nNumLen * 2; p += 4; NumberDecode( p, 16 ); CopyMemory( pSms->szSender, "+", 1 ); CopyMemory( pSms->szSender + 1, p + 2, 13 ); p += 16; if( strncmp( p, "0000", 4 ) ) bEng = true; p += 4; NumberDecode( p, 10 ); sprintf( pSms->szTime, "20%.2s.%.2s.%.2s %.2s:%.2s", p, p + 2, p + 4, p + 6, p + 8 ); p += 10; p += 4; CopyMemory( szTemp, p, 2 ); int nMsgLen = atoi( szTemp ); p += 2; char* pMsg = NULL; if( bEng ) { len = PDUDecodeEng( p, pMsg ); } else { len = PDUDecodeChn( p, pMsg ); } CopyMemory( pSms->szMsg, pMsg, len ); delete [] pszBuffer; return( 0 ); } return( -1 ); } long CGSMPhone::GetShortMsg2(char *pNo, char *pMsg, char *pTime) { if( m_bStarted == false ) return( -1 ); DWORD dwWaitRet = WaitForMultipleObjects( m_dwSMContentPoolNum, m_phSMPHaveData, FALSE, 1000 ); if( dwWaitRet != WAIT_TIMEOUT ) { DWORD dwMsgLen = m_pSMPool[dwWaitRet].dwSize; char* pszBuffer; pszBuffer = new char[dwMsgLen + 1]; ZeroMemory( pszBuffer, dwMsgLen + 1 ); CopyMemory( pszBuffer, m_pSMPool[dwWaitRet].pData, dwMsgLen );
|