diff -r ac20d6a0a19d -r b982c3e940f3 telephonyserverplugins/common_tsy/commontsy/src/mmsms/cmmsmstsy.cpp --- a/telephonyserverplugins/common_tsy/commontsy/src/mmsms/cmmsmstsy.cpp Mon Aug 09 17:43:08 2010 +0100 +++ b/telephonyserverplugins/common_tsy/commontsy/src/mmsms/cmmsmstsy.cpp Tue Sep 14 17:55:14 2010 +0100 @@ -307,11 +307,13 @@ if ( KErrNone != leaveCode ) { OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CMMSMSTSY_EXTFUNC_2, "CMmSmsTsy: Leave trapped!, IPC=%d, error value:%d", aIpc, leaveCode ); + //reset request handle to indicate the request is no longer ongoing + iTsyReqHandleStore->FindAndResetTsyReqHandle( aTsyReqHandle ); ReqCompleted( aTsyReqHandle, leaveCode ); } //save request handle - if ( EMultimodeSmsReqHandleUnknown != iReqHandleType ) + else if ( EMultimodeSmsReqHandleUnknown != iReqHandleType ) { #ifdef REQHANDLE_TIMER SetTypeOfResponse( iReqHandleType, aTsyReqHandle ); @@ -320,10 +322,10 @@ iTsyReqHandleStore->SetTsyReqHandle( iReqHandleType, aTsyReqHandle ); #endif // REQHANDLE_TIMER - // We've finished with this value now. Clear it so it doesn't leak - // up to any other instances of this method down the call stack - iReqHandleType = EMultimodeSmsReqHandleUnknown; } + // We've finished with this value now. Clear it so it doesn't leak + // up to any other instances of this method down the call stack + iReqHandleType = EMultimodeSmsReqHandleUnknown; break; } } @@ -1799,69 +1801,63 @@ // structure for all sms parameters and data TSendSmsDataAndAttributes sendData; - + TSmsRequestTypes reqType; + sendData.iAttributes = &msgAttr; sendData.iMsgData = aMsgData; if ( iSmsNoFdnCheckFlag == ESmsNoFdnCheckUsed ) { //set ipc - sendData.iIpc = EMobileSmsMessagingSendMessageNoFdnCheck; + sendData.iIpc = EMobileSmsMessagingSendMessageNoFdnCheck; + reqType = EMultimodeSmsSendMessageNoFdnCheck; } - if ( iSmsNoFdnCheckFlag == ESmsNoFdnCheckNotUsed ) + else //(iSmsNoFdnCheckFlag == ESmsNoFdnCheckNotUsed) { //set ipc - sendData.iIpc = EMobileSmsMessagingSendMessage; + sendData.iIpc = EMobileSmsMessagingSendMessage; + reqType = EMultimodeSmsSendMessage; } // Pack parameters package.PackData( &sendData ); - CSmsSendRequest* smsSendReq = new (ELeave) CSmsSendRequest(); - smsSendReq->SetSmsDataAndAttributes( sendData ); + iSmsSendReq = new (ELeave) CSmsSendRequest(); + iSmsSendReq->SetSmsDataAndAttributes( sendData ); - // save send request - iSmsSendReq = smsSendReq; OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CMMSMSTSY_SENDMESSAGEL_1, "TSY: CMmSmsTsy::SendMessageL: Send request saved"); +#ifdef REQHANDLE_TIMER + SetTypeOfResponse( reqType, aTsyReqHandle ); +#else + iTsyReqHandleStore->SetTsyReqHandle( reqType, aTsyReqHandle ); +#endif // REQHANDLE_TIMER + + TInt leaveCode( KErrNone ); // send request to DOS // packed parameter: TSendSmsDataAndAttributes - if ( iSmsNoFdnCheckFlag == ESmsNoFdnCheckUsed ) - { - ret = iMmPhone->MessageManager()->HandleRequestL( - EMobileSmsMessagingSendMessageNoFdnCheck, &package ); - } - if ( iSmsNoFdnCheckFlag == ESmsNoFdnCheckNotUsed ) - { - ret = iMmPhone->MessageManager()->HandleRequestL( - EMobileSmsMessagingSendMessage, &package ); - } + TRAP(leaveCode, ret = iMmPhone->MessageManager()->HandleRequestL(sendData.iIpc, &package );); - if ( KErrNone == ret ) - { - if ( iSmsNoFdnCheckFlag == ESmsNoFdnCheckUsed ) - { - //set request type - iReqHandleType = EMultimodeSmsSendMessageNoFdnCheck; - } - if ( iSmsNoFdnCheckFlag == ESmsNoFdnCheckNotUsed ) - { - //set request type - iReqHandleType = EMultimodeSmsSendMessage; - } - smsSendReq->IncreaseSendCounter(); - } - else + if ( (leaveCode != KErrNone) || (ret != KErrNone) ) { - // Phonet returned error - delete smsSendReq; // Delete object + iTsyReqHandleStore->ResetTsyReqHandle( reqType ); + delete iSmsSendReq; // Delete object iSmsSendReq = NULL; // Reset pointer - // Message construction failed or phonet sender returned error - ReqCompleted( aTsyReqHandle, ret ); // reset pointer to client memory iSendMessageMsgAttrPckgPtr = NULL; - iSmsNoFdnCheckFlag = ESmsNoFdnCheckUnknown; + if (leaveCode != KErrNone) + { + ReqCompleted( aTsyReqHandle, leaveCode ); + } + else + { + ReqCompleted( aTsyReqHandle, ret ); + } + } + else + { + iSmsSendReq->IncreaseSendCounter(); } } @@ -1938,10 +1934,14 @@ // reset req handle and complete request TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( EMultimodeSmsSendMessage ); - ReqCompleted( reqHandle, extendedError ); - // reset pointer to client memory - iSendMessageMsgAttrPckgPtr = NULL; - iSmsNoFdnCheckFlag = ESmsNoFdnCheckUnknown; + + if ( EMultimodeSmsReqHandleUnknown < reqHandle ) + { + ReqCompleted( reqHandle, extendedError ); + // reset pointer to client memory + iSendMessageMsgAttrPckgPtr = NULL; + iSmsNoFdnCheckFlag = ESmsNoFdnCheckUnknown; + } } else if ( ( KErrNone != aError ) && ( KErrTimedOut != aError ) && ( KErrGsmSMSOperationNotAllowed !=