305 aPackage ); ); |
305 aPackage ); ); |
306 |
306 |
307 if ( KErrNone != leaveCode ) |
307 if ( KErrNone != leaveCode ) |
308 { |
308 { |
309 OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CMMSMSTSY_EXTFUNC_2, "CMmSmsTsy: Leave trapped!, IPC=%d, error value:%d", aIpc, leaveCode ); |
309 OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CMMSMSTSY_EXTFUNC_2, "CMmSmsTsy: Leave trapped!, IPC=%d, error value:%d", aIpc, leaveCode ); |
|
310 //reset request handle to indicate the request is no longer ongoing |
|
311 iTsyReqHandleStore->FindAndResetTsyReqHandle( aTsyReqHandle ); |
310 ReqCompleted( aTsyReqHandle, leaveCode ); |
312 ReqCompleted( aTsyReqHandle, leaveCode ); |
311 } |
313 } |
312 |
314 |
313 //save request handle |
315 //save request handle |
314 if ( EMultimodeSmsReqHandleUnknown != iReqHandleType ) |
316 else if ( EMultimodeSmsReqHandleUnknown != iReqHandleType ) |
315 { |
317 { |
316 #ifdef REQHANDLE_TIMER |
318 #ifdef REQHANDLE_TIMER |
317 SetTypeOfResponse( iReqHandleType, aTsyReqHandle ); |
319 SetTypeOfResponse( iReqHandleType, aTsyReqHandle ); |
318 #else |
320 #else |
319 //Never comes here. See SetTypeOfResponse. |
321 //Never comes here. See SetTypeOfResponse. |
320 iTsyReqHandleStore->SetTsyReqHandle( iReqHandleType, |
322 iTsyReqHandleStore->SetTsyReqHandle( iReqHandleType, |
321 aTsyReqHandle ); |
323 aTsyReqHandle ); |
322 #endif // REQHANDLE_TIMER |
324 #endif // REQHANDLE_TIMER |
323 // We've finished with this value now. Clear it so it doesn't leak |
|
324 // up to any other instances of this method down the call stack |
|
325 iReqHandleType = EMultimodeSmsReqHandleUnknown; |
|
326 } |
325 } |
|
326 // We've finished with this value now. Clear it so it doesn't leak |
|
327 // up to any other instances of this method down the call stack |
|
328 iReqHandleType = EMultimodeSmsReqHandleUnknown; |
327 break; |
329 break; |
328 } |
330 } |
329 } |
331 } |
330 |
332 |
331 return ret; |
333 return ret; |
1797 RMobileSmsMessaging::TMobileSmsSendAttributesV1& msgAttr = |
1799 RMobileSmsMessaging::TMobileSmsSendAttributesV1& msgAttr = |
1798 ( *attsPckg )(); |
1800 ( *attsPckg )(); |
1799 |
1801 |
1800 // structure for all sms parameters and data |
1802 // structure for all sms parameters and data |
1801 TSendSmsDataAndAttributes sendData; |
1803 TSendSmsDataAndAttributes sendData; |
1802 |
1804 TSmsRequestTypes reqType; |
|
1805 |
1803 sendData.iAttributes = &msgAttr; |
1806 sendData.iAttributes = &msgAttr; |
1804 sendData.iMsgData = aMsgData; |
1807 sendData.iMsgData = aMsgData; |
1805 |
1808 |
1806 if ( iSmsNoFdnCheckFlag == ESmsNoFdnCheckUsed ) |
1809 if ( iSmsNoFdnCheckFlag == ESmsNoFdnCheckUsed ) |
1807 { |
1810 { |
1808 //set ipc |
1811 //set ipc |
1809 sendData.iIpc = EMobileSmsMessagingSendMessageNoFdnCheck; |
1812 sendData.iIpc = EMobileSmsMessagingSendMessageNoFdnCheck; |
1810 } |
1813 reqType = EMultimodeSmsSendMessageNoFdnCheck; |
1811 if ( iSmsNoFdnCheckFlag == ESmsNoFdnCheckNotUsed ) |
1814 } |
|
1815 else //(iSmsNoFdnCheckFlag == ESmsNoFdnCheckNotUsed) |
1812 { |
1816 { |
1813 //set ipc |
1817 //set ipc |
1814 sendData.iIpc = EMobileSmsMessagingSendMessage; |
1818 sendData.iIpc = EMobileSmsMessagingSendMessage; |
|
1819 reqType = EMultimodeSmsSendMessage; |
1815 } |
1820 } |
1816 |
1821 |
1817 // Pack parameters |
1822 // Pack parameters |
1818 package.PackData( &sendData ); |
1823 package.PackData( &sendData ); |
1819 |
1824 |
1820 CSmsSendRequest* smsSendReq = new (ELeave) CSmsSendRequest(); |
1825 iSmsSendReq = new (ELeave) CSmsSendRequest(); |
1821 smsSendReq->SetSmsDataAndAttributes( sendData ); |
1826 iSmsSendReq->SetSmsDataAndAttributes( sendData ); |
1822 |
1827 |
1823 // save send request |
|
1824 iSmsSendReq = smsSendReq; |
|
1825 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CMMSMSTSY_SENDMESSAGEL_1, "TSY: CMmSmsTsy::SendMessageL: Send request saved"); |
1828 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CMMSMSTSY_SENDMESSAGEL_1, "TSY: CMmSmsTsy::SendMessageL: Send request saved"); |
1826 |
1829 |
|
1830 #ifdef REQHANDLE_TIMER |
|
1831 SetTypeOfResponse( reqType, aTsyReqHandle ); |
|
1832 #else |
|
1833 iTsyReqHandleStore->SetTsyReqHandle( reqType, aTsyReqHandle ); |
|
1834 #endif // REQHANDLE_TIMER |
|
1835 |
|
1836 TInt leaveCode( KErrNone ); |
1827 // send request to DOS |
1837 // send request to DOS |
1828 // packed parameter: TSendSmsDataAndAttributes |
1838 // packed parameter: TSendSmsDataAndAttributes |
1829 if ( iSmsNoFdnCheckFlag == ESmsNoFdnCheckUsed ) |
1839 TRAP(leaveCode, ret = iMmPhone->MessageManager()->HandleRequestL(sendData.iIpc, &package );); |
1830 { |
1840 |
1831 ret = iMmPhone->MessageManager()->HandleRequestL( |
1841 if ( (leaveCode != KErrNone) || (ret != KErrNone) ) |
1832 EMobileSmsMessagingSendMessageNoFdnCheck, &package ); |
1842 { |
1833 } |
1843 iTsyReqHandleStore->ResetTsyReqHandle( reqType ); |
1834 if ( iSmsNoFdnCheckFlag == ESmsNoFdnCheckNotUsed ) |
1844 delete iSmsSendReq; // Delete object |
1835 { |
|
1836 ret = iMmPhone->MessageManager()->HandleRequestL( |
|
1837 EMobileSmsMessagingSendMessage, &package ); |
|
1838 } |
|
1839 |
|
1840 if ( KErrNone == ret ) |
|
1841 { |
|
1842 if ( iSmsNoFdnCheckFlag == ESmsNoFdnCheckUsed ) |
|
1843 { |
|
1844 //set request type |
|
1845 iReqHandleType = EMultimodeSmsSendMessageNoFdnCheck; |
|
1846 } |
|
1847 if ( iSmsNoFdnCheckFlag == ESmsNoFdnCheckNotUsed ) |
|
1848 { |
|
1849 //set request type |
|
1850 iReqHandleType = EMultimodeSmsSendMessage; |
|
1851 } |
|
1852 smsSendReq->IncreaseSendCounter(); |
|
1853 } |
|
1854 else |
|
1855 { |
|
1856 // Phonet returned error |
|
1857 delete smsSendReq; // Delete object |
|
1858 iSmsSendReq = NULL; // Reset pointer |
1845 iSmsSendReq = NULL; // Reset pointer |
1859 // Message construction failed or phonet sender returned error |
|
1860 ReqCompleted( aTsyReqHandle, ret ); |
|
1861 // reset pointer to client memory |
1846 // reset pointer to client memory |
1862 iSendMessageMsgAttrPckgPtr = NULL; |
1847 iSendMessageMsgAttrPckgPtr = NULL; |
1863 |
|
1864 iSmsNoFdnCheckFlag = ESmsNoFdnCheckUnknown; |
1848 iSmsNoFdnCheckFlag = ESmsNoFdnCheckUnknown; |
|
1849 if (leaveCode != KErrNone) |
|
1850 { |
|
1851 ReqCompleted( aTsyReqHandle, leaveCode ); |
|
1852 } |
|
1853 else |
|
1854 { |
|
1855 ReqCompleted( aTsyReqHandle, ret ); |
|
1856 } |
|
1857 } |
|
1858 else |
|
1859 { |
|
1860 iSmsSendReq->IncreaseSendCounter(); |
1865 } |
1861 } |
1866 } |
1862 } |
1867 |
1863 |
1868 return KErrNone; |
1864 return KErrNone; |
1869 } |
1865 } |
1936 iSmsSendReq = NULL; // Reset pointer |
1932 iSmsSendReq = NULL; // Reset pointer |
1937 } |
1933 } |
1938 // reset req handle and complete request |
1934 // reset req handle and complete request |
1939 TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( |
1935 TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( |
1940 EMultimodeSmsSendMessage ); |
1936 EMultimodeSmsSendMessage ); |
1941 ReqCompleted( reqHandle, extendedError ); |
1937 |
1942 // reset pointer to client memory |
1938 if ( EMultimodeSmsReqHandleUnknown < reqHandle ) |
1943 iSendMessageMsgAttrPckgPtr = NULL; |
1939 { |
1944 iSmsNoFdnCheckFlag = ESmsNoFdnCheckUnknown; |
1940 ReqCompleted( reqHandle, extendedError ); |
|
1941 // reset pointer to client memory |
|
1942 iSendMessageMsgAttrPckgPtr = NULL; |
|
1943 iSmsNoFdnCheckFlag = ESmsNoFdnCheckUnknown; |
|
1944 } |
1945 } |
1945 } |
1946 else if ( ( KErrNone != aError ) && ( KErrTimedOut != aError ) |
1946 else if ( ( KErrNone != aError ) && ( KErrTimedOut != aError ) |
1947 && ( KErrGsmSMSOperationNotAllowed != |
1947 && ( KErrGsmSMSOperationNotAllowed != |
1948 CMmCommonStaticUtility::ExtendedErrorCode ( aError ) ) |
1948 CMmCommonStaticUtility::ExtendedErrorCode ( aError ) ) |
1949 // FDB check failed |
1949 // FDB check failed |