diff -r 3553901f7fa8 -r 1f776524b15c telephonyserverplugins/common_tsy/commontsy/src/mmsms/cmmsmstsy.cpp --- 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