telephonyserverplugins/common_tsy/commontsy/src/mmsms/cmmsmstsy.cpp
changeset 19 1f776524b15c
parent 0 3553901f7fa8
child 16 fe8b59ab9fa0
child 20 244d7c5f118e
--- a/telephonyserverplugins/common_tsy/commontsy/src/mmsms/cmmsmstsy.cpp	Tue Feb 02 01:41:59 2010 +0200
+++ b/telephonyserverplugins/common_tsy/commontsy/src/mmsms/cmmsmstsy.cpp	Fri Mar 19 09:55:57 2010 +0200
@@ -1831,7 +1831,54 @@
 
     return KErrNone;
     }
+  
+//----------------------------------------------------------------------------
+// CMmSmsTsy::IsRPError
+// Checks if error code is a relay protocol error
+// --------------------------------------------------------------------------- 
+TBool CMmSmsTsy::IsRPError(TInt aError)
+    {
+    TFLOGSTRING2("CMmSmsTsy::IsRPError(): %d", aError);
     
+    TBool  isRPError = EFalse;
+    switch (aError)
+        {
+        case KErrGsmSMSShortMessageTransferRejected:
+            {
+            isRPError = ETrue;
+            }
+            break;   
+        case KErrGsmSMSInvalidMandatoryInformation:
+            {
+            isRPError = ETrue;
+            }
+            break;
+        case KErrGsmSMSUnidentifiedSubscriber:
+            {
+            isRPError = ETrue;
+            }
+            break;
+        case KErrGsmSMSUnknownSubscriber:
+            {
+            isRPError = ETrue;
+            }
+            break;
+        case KErrGsmSMSNetworkOutOfOrder:
+            {
+            isRPError = ETrue;
+            }
+            break;
+        default:
+            {
+            // NOP
+            }
+            break;
+        }
+
+    return isRPError;
+    } // CMmSmsTsy::IsRPError
+
+
 //----------------------------------------------------------------------------
 // CMmSmsTsy::CompleteSendMessage 
 // Complete SendMessage request
@@ -1842,7 +1889,25 @@
     TInt aError, 
     CMmDataPackage* aDataPackage )
     {
-    if ( ( KErrNone != aError ) && ( KErrTimedOut != aError ) 
+    TInt extendedError = CMmCommonStaticUtility::ExtendedErrorCode(aError);
+    TBool res = IsRPError(extendedError);
+    if(res)
+        {
+        // Delete send message entry from send array
+        if ( iSmsSendReq )
+            {
+            delete iSmsSendReq;   // Delete object
+            iSmsSendReq = NULL;   // Reset pointer
+            }
+        // reset req handle and complete request
+        TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( 
+                   EMultimodeSmsSendMessage );
+        ReqCompleted( reqHandle, extendedError );
+        // reset pointer to client memory
+        iSendMessageMsgAttrPckgPtr = NULL;
+        iSmsNoFdnCheckFlag = ESmsNoFdnCheckUnknown;
+        }        
+    else if ( ( KErrNone != aError ) && ( KErrTimedOut != aError ) 
         && ( KErrGsmSMSOperationNotAllowed != 
             CMmCommonStaticUtility::ExtendedErrorCode ( aError ) )
             // FDB check failed