telephonyserverplugins/common_tsy/commontsy/src/mmsms/cmmsmstsy.cpp
changeset 69 b982c3e940f3
parent 44 8b72faa1200f
child 73 70d75957b98f
--- 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 !=