diff -r 6b1d113cdff3 -r 6638e7f4bd8f smsprotocols/smsstack/smsprot/Src/smspdel.cpp --- a/smsprotocols/smsstack/smsprot/Src/smspdel.cpp Mon May 03 13:37:20 2010 +0300 +++ b/smsprotocols/smsstack/smsprot/Src/smspdel.cpp Thu May 06 15:10:38 2010 +0100 @@ -1,319 +1,319 @@ -// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). -// All rights reserved. -// This component and the accompanying materials are made available -// under the terms of "Eclipse Public License v1.0" -// which accompanies this distribution, and is available -// at the URL "http://www.eclipse.org/legal/epl-v10.html". -// -// Initial Contributors: -// Nokia Corporation - initial contribution. -// -// Contributors: -// -// Description: -// - -#include "smspdel.h" -#include "smspmain.h" - -#include "smsuset.h" - -#include -#include "SmsuTimer.h" -#include "smspqueue.h" - - -/** - * Creates new CSmsStoreRead instance - * - * @param aSmsComm reference to the MSmsComm class - * @param aSmsSettings reference to the TSmsSettings class - * @param aSmsMessaging reference to the RMobileSmsMessaging class - */ -CSmsPDUDelete* CSmsPDUDelete::NewL(const TSmsSettings& aSmsSettings, - RMobileSmsMessaging& aSmsMessaging - ) - { - LOGSMSPROT1("CSmsPDUDelete::NewL()"); - - CSmsPDUDelete* smsPduDelete = - new(ELeave) CSmsPDUDelete(aSmsSettings,aSmsMessaging); - CleanupStack::PushL(smsPduDelete); - smsPduDelete->ConstructL(); - CleanupStack::Pop(); - return smsPduDelete; - } // CSmsPDUDelete::NewL - - -/** - * Constructor - * - * @param aSmsComm reference to the MSmsComm class - * @param aSmsSettings reference to the TSmsSettings class - * @param aSmsMessaging reference to the RMobileSmsMessaging class - */ -CSmsPDUDelete::CSmsPDUDelete(const TSmsSettings& aSmsSettings, - RMobileSmsMessaging& aSmsMessaging) - : CSmsuActiveBase(KSmsSessionPriority), - iState(ESmsPDUDeleteIdle), - iSmsSettings(aSmsSettings), - iSmsMessaging(aSmsMessaging) - { - // NOP - } // CSmsPDUDelete::CSmsPDUDelete - - -/** - * Creates instance to the class CSmsuTimeout - */ -void CSmsPDUDelete::ConstructL() - { - LOGSMSPROT1("CSmsPDUDelete::ConstructL()"); - - ConstructTimeoutL(); - } // CSmsPDUDelete::ConstructL - - -/** - * Starts CSmsPDUDelete active object - * Calls private methd OpenStore - * - * @param aStatus Reguest status - * @param aStoreIndex Index to the store to be read - */ -void CSmsPDUDelete::Start(CArrayFix& aLocationArray, TRequestStatus& aStatus) - { - LOGSMSPROT1("CSmsPDUDelete::Start()"); - - __ASSERT_DEBUG(iState==ESmsPDUDeleteIdle,SmspPanic(KSmspPanicUnexpectedState)); - - Queue(aStatus); - - iLocationArray=&aLocationArray; - iState=ESmsPDUDeleteOpeningStore; - OpenStore(); - } // CSmsPDUDelete::Start - - -/** - * Called by Active Scheduler - * - * Deletes slots giving in array. Opens new store if store change - */ -void CSmsPDUDelete::DoRunL() - { - LOGSMSPROT2("CSmsPDUDelete::RunL [iStatus=%d]", iStatus.Int()); - - switch (iState) - { - case ESmsPDUDeleteOpeningStore: - { - // - // If the store was opened, then delete the PDU... - // - if (iStatus.Int() == KErrNone) - { - DeletePDU(); - } - } - break; - - case ESmsPDUDeleteDeletingPDU: - { - // - // If deleting the PDU returned not found, then this is a valid - // result so assume KErrNone. - // - if (iStatus.Int() == KErrNotFound || - iStatus.Int() == KErrGsmSMSInvalidMemoryIndex) - { - iStatus = KErrNone; - } - - // - // If the delete was successful (or assumed to be) then remove - // it from the list. If the next one is the on a different store, - // then change stores, otherwise delete it. - // - if (iStatus.Int() == KErrNone) - { - iLocationArray->Delete(0); - - if (iLocationArray->Count() > 0) - { - if (iLocationArray->At(0).iStore != iCurrentStore) - { - OpenStore(); - } - else - { - DeletePDU(); - } - } - } - } - break; - - default: - { - SmspPanic(KSmspPanicUnexpectedState); - } - break; - } - - // - // DoRunL() will now return to CSmsuActiveBase which if the object - // is not active, will call Complete(). - // - } // CSmsPDUDelete::DoRunL - - -/** - * private method for opening the store where slot is saved - */ -void CSmsPDUDelete::OpenStore() - { - LOGSMSPROT1("CSmsPDUDelete::OpenStore()"); - - // - // Open the SMS Store for the first PDU... - // - if (iLocationArray->Count() > 0) - { - // - // Close it first, just in case it was left open... - // - iSmsStorage.Close(); - - // - // Now open the store... - // - TInt ret; - - ret = iSmsStorage.Open(iSmsMessaging, iLocationArray->At(0).iStore); - if (ret == KErrNone) - { - iCurrentStore = iLocationArray->At(0).iStore; - } - - // - // Complete this object to allow correct flow through DoRunL() - // and Complete() if needed. - // - iState = ESmsPDUDeleteOpeningStore; - - CompleteMyself(ret); - } - } // CSmsPDUDelete::OpenStore - - -/** - * private method for deleting slot from the store - */ -void CSmsPDUDelete::DeletePDU() - { - LOGSMSPROT1("CSmsPDUDelete::DeletePDU()"); - - // - // Delete the first entry in the list... - // - if (iLocationArray->Count() > 0) - { - iSmsStorage.Delete(iStatus, iLocationArray->At(0).iIndex); - - iState = ESmsPDUDeleteDeletingPDU; - - TimedSetActive(iSmsSettings.Timeout()); - } - } // CSmsPDUDelete::DeletePDU - - -/** - * Called by Active Scheduler - */ -void CSmsPDUDelete::DoCancel() - { - LOGSMSPROT1("CSmsPDUDelete::DoCancel()"); - - TimedSetActiveCancel(); - - switch (iState) - { - case ESmsPDUDeleteOpeningStore: - { - // - // Will never happen as CompleteMyself() was used... - // - } - break; - - case ESmsPDUDeleteDeletingPDU: - { - iSmsStorage.CancelAsyncRequest(EMobilePhoneStoreDelete); - } - break; - - default: - { - SmspPanic(KSmspPanicUnexpectedState); - } - } - - // - // Handle completion of this Active Object. Note that the object - // may well still be active at this point... - // - if (TimedOut()) - { - Complete(KErrTimedOut); - } - else - { - Complete(KErrCancel); - } - } // CSmsPDUDelete::DoCancel - - -/** - * Completes this object - */ -void CSmsPDUDelete::Complete(TInt aStatus) - { - LOGSMSPROT1("CSmsPDUDelete::Complete()"); - - // - // Only close the SMS Storage if the object is not active (and it may be - // if the operation was cancelled). Otherwise it will be closed on - // destruction. - // - if (!IsActive()) - { - iSmsStorage.Close(); - } - - // - // Resets slot array... - // - iLocationArray->Reset(); - - // - // Call the base function to perform the actual complete... - // - CSmsuActiveBase::Complete(aStatus); - - // - // This active object has completed... - // - iState = ESmsPDUDeleteIdle; - } // CSmsPDUDelete::Complete - - -/** - * Destructor - */ -CSmsPDUDelete::~CSmsPDUDelete() - { - Cancel(); - iSmsStorage.Close(); - } // CSmsPDUDelete::~CSmsPDUDelete - +// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#include "smspdel.h" +#include "smspmain.h" + +#include "smsuset.h" + +#include +#include "SmsuTimer.h" +#include "smspqueue.h" + + +/** + * Creates new CSmsStoreRead instance + * + * @param aSmsComm reference to the MSmsComm class + * @param aSmsSettings reference to the TSmsSettings class + * @param aSmsMessaging reference to the RMobileSmsMessaging class + */ +CSmsPDUDelete* CSmsPDUDelete::NewL(const TSmsSettings& aSmsSettings, + RMobileSmsMessaging& aSmsMessaging + ) + { + LOGSMSPROT1("CSmsPDUDelete::NewL()"); + + CSmsPDUDelete* smsPduDelete = + new(ELeave) CSmsPDUDelete(aSmsSettings,aSmsMessaging); + CleanupStack::PushL(smsPduDelete); + smsPduDelete->ConstructL(); + CleanupStack::Pop(); + return smsPduDelete; + } // CSmsPDUDelete::NewL + + +/** + * Constructor + * + * @param aSmsComm reference to the MSmsComm class + * @param aSmsSettings reference to the TSmsSettings class + * @param aSmsMessaging reference to the RMobileSmsMessaging class + */ +CSmsPDUDelete::CSmsPDUDelete(const TSmsSettings& aSmsSettings, + RMobileSmsMessaging& aSmsMessaging) + : CSmsuActiveBase(KSmsSessionPriority), + iState(ESmsPDUDeleteIdle), + iSmsSettings(aSmsSettings), + iSmsMessaging(aSmsMessaging) + { + // NOP + } // CSmsPDUDelete::CSmsPDUDelete + + +/** + * Creates instance to the class CSmsuTimeout + */ +void CSmsPDUDelete::ConstructL() + { + LOGSMSPROT1("CSmsPDUDelete::ConstructL()"); + + ConstructTimeoutL(); + } // CSmsPDUDelete::ConstructL + + +/** + * Starts CSmsPDUDelete active object + * Calls private methd OpenStore + * + * @param aStatus Reguest status + * @param aStoreIndex Index to the store to be read + */ +void CSmsPDUDelete::Start(CArrayFix& aLocationArray, TRequestStatus& aStatus) + { + LOGSMSPROT1("CSmsPDUDelete::Start()"); + + __ASSERT_DEBUG(iState==ESmsPDUDeleteIdle,SmspPanic(KSmspPanicUnexpectedState)); + + Queue(aStatus); + + iLocationArray=&aLocationArray; + iState=ESmsPDUDeleteOpeningStore; + OpenStore(); + } // CSmsPDUDelete::Start + + +/** + * Called by Active Scheduler + * + * Deletes slots giving in array. Opens new store if store change + */ +void CSmsPDUDelete::DoRunL() + { + LOGSMSPROT2("CSmsPDUDelete::RunL [iStatus=%d]", iStatus.Int()); + + switch (iState) + { + case ESmsPDUDeleteOpeningStore: + { + // + // If the store was opened, then delete the PDU... + // + if (iStatus.Int() == KErrNone) + { + DeletePDU(); + } + } + break; + + case ESmsPDUDeleteDeletingPDU: + { + // + // If deleting the PDU returned not found, then this is a valid + // result so assume KErrNone. + // + if (iStatus.Int() == KErrNotFound || + iStatus.Int() == KErrGsmSMSInvalidMemoryIndex) + { + iStatus = KErrNone; + } + + // + // If the delete was successful (or assumed to be) then remove + // it from the list. If the next one is the on a different store, + // then change stores, otherwise delete it. + // + if (iStatus.Int() == KErrNone) + { + iLocationArray->Delete(0); + + if (iLocationArray->Count() > 0) + { + if (iLocationArray->At(0).iStore != iCurrentStore) + { + OpenStore(); + } + else + { + DeletePDU(); + } + } + } + } + break; + + default: + { + SmspPanic(KSmspPanicUnexpectedState); + } + break; + } + + // + // DoRunL() will now return to CSmsuActiveBase which if the object + // is not active, will call Complete(). + // + } // CSmsPDUDelete::DoRunL + + +/** + * private method for opening the store where slot is saved + */ +void CSmsPDUDelete::OpenStore() + { + LOGSMSPROT1("CSmsPDUDelete::OpenStore()"); + + // + // Open the SMS Store for the first PDU... + // + if (iLocationArray->Count() > 0) + { + // + // Close it first, just in case it was left open... + // + iSmsStorage.Close(); + + // + // Now open the store... + // + TInt ret; + + ret = iSmsStorage.Open(iSmsMessaging, iLocationArray->At(0).iStore); + if (ret == KErrNone) + { + iCurrentStore = iLocationArray->At(0).iStore; + } + + // + // Complete this object to allow correct flow through DoRunL() + // and Complete() if needed. + // + iState = ESmsPDUDeleteOpeningStore; + + CompleteMyself(ret); + } + } // CSmsPDUDelete::OpenStore + + +/** + * private method for deleting slot from the store + */ +void CSmsPDUDelete::DeletePDU() + { + LOGSMSPROT1("CSmsPDUDelete::DeletePDU()"); + + // + // Delete the first entry in the list... + // + if (iLocationArray->Count() > 0) + { + iSmsStorage.Delete(iStatus, iLocationArray->At(0).iIndex); + + iState = ESmsPDUDeleteDeletingPDU; + + TimedSetActive(iSmsSettings.Timeout()); + } + } // CSmsPDUDelete::DeletePDU + + +/** + * Called by Active Scheduler + */ +void CSmsPDUDelete::DoCancel() + { + LOGSMSPROT1("CSmsPDUDelete::DoCancel()"); + + TimedSetActiveCancel(); + + switch (iState) + { + case ESmsPDUDeleteOpeningStore: + { + // + // Will never happen as CompleteMyself() was used... + // + } + break; + + case ESmsPDUDeleteDeletingPDU: + { + iSmsStorage.CancelAsyncRequest(EMobilePhoneStoreDelete); + } + break; + + default: + { + SmspPanic(KSmspPanicUnexpectedState); + } + } + + // + // Handle completion of this Active Object. Note that the object + // may well still be active at this point... + // + if (TimedOut()) + { + Complete(KErrTimedOut); + } + else + { + Complete(KErrCancel); + } + } // CSmsPDUDelete::DoCancel + + +/** + * Completes this object + */ +void CSmsPDUDelete::Complete(TInt aStatus) + { + LOGSMSPROT1("CSmsPDUDelete::Complete()"); + + // + // Only close the SMS Storage if the object is not active (and it may be + // if the operation was cancelled). Otherwise it will be closed on + // destruction. + // + if (!IsActive()) + { + iSmsStorage.Close(); + } + + // + // Resets slot array... + // + iLocationArray->Reset(); + + // + // Call the base function to perform the actual complete... + // + CSmsuActiveBase::Complete(aStatus); + + // + // This active object has completed... + // + iState = ESmsPDUDeleteIdle; + } // CSmsPDUDelete::Complete + + +/** + * Destructor + */ +CSmsPDUDelete::~CSmsPDUDelete() + { + Cancel(); + iSmsStorage.Close(); + } // CSmsPDUDelete::~CSmsPDUDelete +