1 // Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies). |
1 // Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). |
2 // All rights reserved. |
2 // All rights reserved. |
3 // This component and the accompanying materials are made available |
3 // This component and the accompanying materials are made available |
4 // under the terms of "Eclipse Public License v1.0" |
4 // under the terms of "Eclipse Public License v1.0" |
5 // which accompanies this distribution, and is available |
5 // which accompanies this distribution, and is available |
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
299 aPackage ); ); |
299 aPackage ); ); |
300 |
300 |
301 if ( KErrNone != leaveCode ) |
301 if ( KErrNone != leaveCode ) |
302 { |
302 { |
303 TFLOGSTRING3("CMmSmsTsy: Leave trapped!, IPC=%d, error value:%d", aIpc, leaveCode ); |
303 TFLOGSTRING3("CMmSmsTsy: Leave trapped!, IPC=%d, error value:%d", aIpc, leaveCode ); |
304 //reset request handle to indicate the request is no longer ongoing |
304 ReqCompleted( aTsyReqHandle, leaveCode ); |
305 iTsyReqHandleStore->FindAndResetTsyReqHandle( aTsyReqHandle ); |
|
306 ReqCompleted( aTsyReqHandle, leaveCode ); |
|
307 } |
305 } |
308 |
306 |
309 //save request handle |
307 //save request handle |
310 else if ( EMultimodeSmsReqHandleUnknown != iReqHandleType ) |
308 if ( EMultimodeSmsReqHandleUnknown != iReqHandleType ) |
311 { |
309 { |
312 #ifdef REQHANDLE_TIMER |
310 #ifdef REQHANDLE_TIMER |
313 SetTypeOfResponse( iReqHandleType, aTsyReqHandle ); |
311 SetTypeOfResponse( iReqHandleType, aTsyReqHandle ); |
314 #else |
312 #else |
315 //Never comes here. See SetTypeOfResponse. |
313 //Never comes here. See SetTypeOfResponse. |
316 iTsyReqHandleStore->SetTsyReqHandle( iReqHandleType, |
314 iTsyReqHandleStore->SetTsyReqHandle( iReqHandleType, |
317 aTsyReqHandle ); |
315 aTsyReqHandle ); |
318 #endif // REQHANDLE_TIMER |
316 #endif // REQHANDLE_TIMER |
|
317 // We've finished with this value now. Clear it so it doesn't leak |
|
318 // up to any other instances of this method down the call stack |
|
319 iReqHandleType = EMultimodeSmsReqHandleUnknown; |
319 } |
320 } |
320 // We've finished with this value now. Clear it so it doesn't leak |
|
321 // up to any other instances of this method down the call stack |
|
322 iReqHandleType = EMultimodeSmsReqHandleUnknown; |
|
323 break; |
321 break; |
324 } |
322 } |
325 } |
323 } |
326 |
324 |
327 return ret; |
325 return ret; |
1793 RMobileSmsMessaging::TMobileSmsSendAttributesV1& msgAttr = |
1791 RMobileSmsMessaging::TMobileSmsSendAttributesV1& msgAttr = |
1794 ( *attsPckg )(); |
1792 ( *attsPckg )(); |
1795 |
1793 |
1796 // structure for all sms parameters and data |
1794 // structure for all sms parameters and data |
1797 TSendSmsDataAndAttributes sendData; |
1795 TSendSmsDataAndAttributes sendData; |
1798 TSmsRequestTypes reqType; |
1796 |
1799 |
|
1800 sendData.iAttributes = &msgAttr; |
1797 sendData.iAttributes = &msgAttr; |
1801 sendData.iMsgData = aMsgData; |
1798 sendData.iMsgData = aMsgData; |
1802 |
1799 |
1803 if ( iSmsNoFdnCheckFlag == ESmsNoFdnCheckUsed ) |
1800 if ( iSmsNoFdnCheckFlag == ESmsNoFdnCheckUsed ) |
1804 { |
1801 { |
1805 //set ipc |
1802 //set ipc |
1806 sendData.iIpc = EMobileSmsMessagingSendMessageNoFdnCheck; |
1803 sendData.iIpc = EMobileSmsMessagingSendMessageNoFdnCheck; |
1807 reqType = EMultimodeSmsSendMessageNoFdnCheck; |
1804 } |
1808 } |
1805 if ( iSmsNoFdnCheckFlag == ESmsNoFdnCheckNotUsed ) |
1809 else //(iSmsNoFdnCheckFlag == ESmsNoFdnCheckNotUsed) |
|
1810 { |
1806 { |
1811 //set ipc |
1807 //set ipc |
1812 sendData.iIpc = EMobileSmsMessagingSendMessage; |
1808 sendData.iIpc = EMobileSmsMessagingSendMessage; |
1813 reqType = EMultimodeSmsSendMessage; |
|
1814 } |
1809 } |
1815 |
1810 |
1816 // Pack parameters |
1811 // Pack parameters |
1817 package.PackData( &sendData ); |
1812 package.PackData( &sendData ); |
1818 |
1813 |
1819 iSmsSendReq = new (ELeave) CSmsSendRequest(); |
1814 CSmsSendRequest* smsSendReq = new (ELeave) CSmsSendRequest(); |
1820 iSmsSendReq->SetSmsDataAndAttributes( sendData ); |
1815 smsSendReq->SetSmsDataAndAttributes( sendData ); |
1821 |
1816 |
1822 TFLOGSTRING("TSY: CMmSmsTsy::SendMessageL: Send request saved"); |
1817 // save send request |
1823 |
1818 iSmsSendReq = smsSendReq; |
1824 #ifdef REQHANDLE_TIMER |
1819 TFLOGSTRING("TSY: CMmSmsTsy::SendMessageL: Send request saved"); |
1825 SetTypeOfResponse( reqType, aTsyReqHandle ); |
1820 |
1826 #else |
|
1827 iTsyReqHandleStore->SetTsyReqHandle( reqType, aTsyReqHandle ); |
|
1828 #endif // REQHANDLE_TIMER |
|
1829 |
|
1830 TInt leaveCode( KErrNone ); |
|
1831 // send request to DOS |
1821 // send request to DOS |
1832 // packed parameter: TSendSmsDataAndAttributes |
1822 // packed parameter: TSendSmsDataAndAttributes |
1833 TRAP(leaveCode, ret = iMmPhone->MessageManager()->HandleRequestL(sendData.iIpc, &package );); |
1823 if ( iSmsNoFdnCheckFlag == ESmsNoFdnCheckUsed ) |
1834 |
1824 { |
1835 if ( (leaveCode != KErrNone) || (ret != KErrNone) ) |
1825 ret = iMmPhone->MessageManager()->HandleRequestL( |
1836 { |
1826 EMobileSmsMessagingSendMessageNoFdnCheck, &package ); |
1837 iTsyReqHandleStore->ResetTsyReqHandle( reqType ); |
1827 } |
1838 delete iSmsSendReq; // Delete object |
1828 if ( iSmsNoFdnCheckFlag == ESmsNoFdnCheckNotUsed ) |
|
1829 { |
|
1830 ret = iMmPhone->MessageManager()->HandleRequestL( |
|
1831 EMobileSmsMessagingSendMessage, &package ); |
|
1832 } |
|
1833 |
|
1834 if ( KErrNone == ret ) |
|
1835 { |
|
1836 if ( iSmsNoFdnCheckFlag == ESmsNoFdnCheckUsed ) |
|
1837 { |
|
1838 //set request type |
|
1839 iReqHandleType = EMultimodeSmsSendMessageNoFdnCheck; |
|
1840 } |
|
1841 if ( iSmsNoFdnCheckFlag == ESmsNoFdnCheckNotUsed ) |
|
1842 { |
|
1843 //set request type |
|
1844 iReqHandleType = EMultimodeSmsSendMessage; |
|
1845 } |
|
1846 smsSendReq->IncreaseSendCounter(); |
|
1847 } |
|
1848 else |
|
1849 { |
|
1850 // Phonet returned error |
|
1851 delete smsSendReq; // Delete object |
1839 iSmsSendReq = NULL; // Reset pointer |
1852 iSmsSendReq = NULL; // Reset pointer |
|
1853 // Message construction failed or phonet sender returned error |
|
1854 ReqCompleted( aTsyReqHandle, ret ); |
1840 // reset pointer to client memory |
1855 // reset pointer to client memory |
1841 iSendMessageMsgAttrPckgPtr = NULL; |
1856 iSendMessageMsgAttrPckgPtr = NULL; |
|
1857 |
1842 iSmsNoFdnCheckFlag = ESmsNoFdnCheckUnknown; |
1858 iSmsNoFdnCheckFlag = ESmsNoFdnCheckUnknown; |
1843 if (leaveCode != KErrNone) |
|
1844 { |
|
1845 ReqCompleted( aTsyReqHandle, leaveCode ); |
|
1846 } |
|
1847 else |
|
1848 { |
|
1849 ReqCompleted( aTsyReqHandle, ret ); |
|
1850 } |
|
1851 } |
|
1852 else |
|
1853 { |
|
1854 iSmsSendReq->IncreaseSendCounter(); |
|
1855 } |
1859 } |
1856 } |
1860 } |
1857 |
1861 |
1858 return KErrNone; |
1862 return KErrNone; |
1859 } |
1863 } |
1926 iSmsSendReq = NULL; // Reset pointer |
1930 iSmsSendReq = NULL; // Reset pointer |
1927 } |
1931 } |
1928 // reset req handle and complete request |
1932 // reset req handle and complete request |
1929 TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( |
1933 TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( |
1930 EMultimodeSmsSendMessage ); |
1934 EMultimodeSmsSendMessage ); |
1931 if ( EMultimodeSmsReqHandleUnknown < reqHandle ) |
1935 ReqCompleted( reqHandle, extendedError ); |
1932 { |
1936 // reset pointer to client memory |
1933 ReqCompleted( reqHandle, extendedError ); |
1937 iSendMessageMsgAttrPckgPtr = NULL; |
1934 // reset pointer to client memory |
1938 iSmsNoFdnCheckFlag = ESmsNoFdnCheckUnknown; |
1935 iSendMessageMsgAttrPckgPtr = NULL; |
|
1936 iSmsNoFdnCheckFlag = ESmsNoFdnCheckUnknown; |
|
1937 } |
|
1938 } |
1939 } |
1939 else if ( ( KErrNone != aError ) && ( KErrTimedOut != aError ) |
1940 else if ( ( KErrNone != aError ) && ( KErrTimedOut != aError ) |
1940 && ( KErrGsmSMSOperationNotAllowed != |
1941 && ( KErrGsmSMSOperationNotAllowed != |
1941 CMmCommonStaticUtility::ExtendedErrorCode ( aError ) ) |
1942 CMmCommonStaticUtility::ExtendedErrorCode ( aError ) ) |
1942 // FDB check failed |
1943 // FDB check failed |