diff -r 6a20128ce557 -r ebfee66fde93 mmsengine/mmsserver/src/mmsscheduledentry.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsengine/mmsserver/src/mmsscheduledentry.cpp Fri Jun 04 10:25:39 2010 +0100 @@ -0,0 +1,294 @@ +/* +* Copyright (c) 2002-2007 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: +* Entry for scheduled sending of MMS messages +* +*/ + + + +// INCLUDE FILES +#include +#include +#include "mmsscheduledentry.h" +#include "mmsconst.h" + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// ==================== LOCAL FUNCTIONS ==================== + +// ================= MEMBER FUNCTIONS ======================= + +CMmsRecipient* CMmsRecipient::NewL() + { + CMmsRecipient* self = new (ELeave) CMmsRecipient(); + return self; + } + +CMmsRecipient::~CMmsRecipient() + { + } + +CMmsRecipient::CMmsRecipient() + { + iMaxRetries = -1; // can be overridden later + } + +void CMmsRecipient::InternalizeL(RReadStream& aReadStream) + { + CMsvRecipient::InternalizeL( aReadStream ); + aReadStream >> iMaxRetries; + } + +void CMmsRecipient::ExternalizeL(RWriteStream& aWriteStream) const + { + CMsvRecipient::ExternalizeL( aWriteStream ); + aWriteStream << iMaxRetries; + } + +// C++ default constructor can NOT contain any code, that +// might leave. +// +CMmsScheduledEntry::CMmsScheduledEntry( const TMsvEntry& aEntry ) + : CMsvScheduledEntry( aEntry ) + { + } + +// Symbian OS default constructor can leave. +void CMmsScheduledEntry::ConstructL() + { + iRecipient = CMmsRecipient::NewL(); + } + +// Two-phased constructor. +CMmsScheduledEntry* CMmsScheduledEntry::NewL( const TMsvEntry& aEntry ) + { + CMmsScheduledEntry* self = new (ELeave) CMmsScheduledEntry( aEntry ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); // self + + return self; + } + + +// Destructor +CMmsScheduledEntry::~CMmsScheduledEntry() + { + delete iRecipient; + } + + +// --------------------------------------------------------- +// CMmsScheduledEntry::CanSendToAnyRecipients +// +// --------------------------------------------------------- +// +TBool CMmsScheduledEntry::CanSendToAnyRecipients( + const CMsvSendErrorActions& aErrorActions, + TMsvSendErrorAction& aAction ) + { + + TBool retVal = EFalse; + + TMsvSendErrorAction action; + + if (aErrorActions.GetSendErrorAction(iRecipient->Error(), action) != KErrNone) + { + action = aErrorActions.Default(); + } + + if ( CheckRecipient( *iRecipient, action ) ) + { + retVal = ETrue; + aAction = action; + } + + return retVal; + + } + +// --------------------------------------------------------- +// CMmsScheduledEntry::CanSendToAnyRecipients +// +// --------------------------------------------------------- +// +TBool CMmsScheduledEntry::CanSendToAnyRecipients( + const TMsvSendErrorAction& aAction ) + { + + TBool retVal = EFalse; + retVal = CheckRecipient( *iRecipient, aAction ); + return retVal; + + } + +// --------------------------------------------------------- +// CMmsScheduledEntry::RecipientsResetRetries +// +// --------------------------------------------------------- +// +void CMmsScheduledEntry::RecipientsResetRetries() + { + + if ( iRecipient->Status() != CMsvRecipient::ESentSuccessfully ) + { + iRecipient->ResetRetries(); + } + + } + +// --------------------------------------------------------- +// CMmsScheduledEntry::RecipientsIncreaseRetries +// +// --------------------------------------------------------- +// +void CMmsScheduledEntry::RecipientsIncreaseRetries() + { + + if (iRecipient->Status() != CMsvRecipient::ESentSuccessfully) + { + iRecipient->IncreaseRetries(); + } + + } + +// --------------------------------------------------------- +// CMmsScheduledEntry::RecipientsSetFailed +// +// --------------------------------------------------------- +// +void CMmsScheduledEntry::RecipientsSetFailed() + { + + if (iRecipient->Status() != CMsvRecipient::ESentSuccessfully) + { + iRecipient->SetStatus(CMsvRecipient::EFailedToSend); + } + + } + +// --------------------------------------------------------- +// CMmsScheduledEntry::RecipientsAllSent +// +// --------------------------------------------------------- +// +TBool CMmsScheduledEntry::RecipientsAllSent() const + { + + return ( iRecipient->Status() == CMsvRecipient::ESentSuccessfully ); + + } + +// --------------------------------------------------------- +// CMmsScheduledEntry::RecipientsStoreL +// +// --------------------------------------------------------- +// +void CMmsScheduledEntry::RecipientsStoreL( + CMsvStore& aStore ) const + { + + RMsvWriteStream writeStream; + writeStream.AssignLC(aStore, KUidMmsRecipientStream); + + iRecipient->ExternalizeL( writeStream ); + + writeStream.CommitL(); + CleanupStack::PopAndDestroy( &writeStream ); // close writeStream + + } + +// --------------------------------------------------------- +// CMmsScheduledEntry::RecipientsRestoreL +// +// --------------------------------------------------------- +// +void CMmsScheduledEntry::RecipientsRestoreL( + CMsvStore& aStore ) + { + delete iRecipient; + iRecipient = NULL; + iRecipient = CMmsRecipient::NewL(); + + if ( aStore.IsPresentL( KUidMmsRecipientStream ) ) + { + RMsvReadStream readStream; + readStream.OpenLC(aStore, KUidMmsRecipientStream); + iRecipient->InternalizeL( readStream ); + CleanupStack::PopAndDestroy( &readStream ); // close readStream + } + + } + +// --------------------------------------------------------- +// CMmsScheduledEntry::CheckRecipient +// +// --------------------------------------------------------- +// +TBool CMmsScheduledEntry::CheckRecipient( + CMsvRecipient& aRecipient, + const TMsvSendErrorAction& aAction ) + { + TBool retVal = EFalse; + + // If max retry override set, use it + TInt16 retries = ((CMmsRecipient&)aRecipient).MaxRetries(); + if ( retries < 0 ) + { + retries = aAction.MaxRetries(); + } + + if (aRecipient.Status() != CMsvRecipient::ESentSuccessfully) + { + if (aAction.iAction == ESendActionSentAlready) + { + aRecipient.SetStatus(CMsvRecipient::ESentSuccessfully); + } + else if (aAction.iAction == ESendActionFail) + { + aRecipient.SetStatus(CMsvRecipient::EFailedToSend); + } + else if (aAction.iRetries == ESendRetriesInfinite || aRecipient.Retries() < retries ) + { + aRecipient.SetStatus(CMsvRecipient::ENotYetSent); + retVal = ETrue; + } + else + { + aRecipient.SetStatus(CMsvRecipient::EFailedToSend); + } + } + + return retVal; + + } + +// ================= OTHER EXPORTED FUNCTIONS ============== + +// End of File +