diff -r 238255e8b033 -r 84d9eb65b26f messagingappbase/smsmtm/servermtm/src/SMSSchSend.cpp --- a/messagingappbase/smsmtm/servermtm/src/SMSSchSend.cpp Fri Apr 16 14:56:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,293 +0,0 @@ -// Copyright (c) 1999-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: -// - -#ifdef _DEBUG -#undef _MSG_NO_LOGGING -#endif - -#include -#include - -#include "SMSSchSend.h" -#include - -#ifndef _MSG_NO_LOGGING -#include -#endif - -/* - * CSmsScheduleSend Implementation - */ - -CSmsScheduleSend* CSmsScheduleSend::NewL(CMsvServerEntry& aServerEntry) - { - CSmsScheduleSend* self = new (ELeave) CSmsScheduleSend(aServerEntry); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -CSmsScheduleSend::CSmsScheduleSend(CMsvServerEntry& aServerEntry) - : CMsvScheduleSend(aServerEntry) - { - } - -/* -Returns a pointer to a newly created CSmsScheduledEntry for a specified message. - -The CSmsScheduledEntry encapsulates the scheduling and recipient information -relating to the message identified by aId. - -@param Id -The ID for the specified message. - -@return -A pointer to the created CSmsScheduledEntry object, -*/ -CMsvScheduledEntry* CSmsScheduleSend::GetMessageL(const TMsvId aId) const - { - //Set the iServerEntry to the message identified by aId - User::LeaveIfError(iServerEntry.SetEntry(aId)); - - //Create a new CSmsScheduledEntry - CSmsScheduledEntry* entry = CSmsScheduledEntry::NewL(iServerEntry.Entry()); - CleanupStack::PushL(entry); - CMsvStore* store = iServerEntry.ReadStoreL(); - CleanupStack::PushL(store); - //Restore the entry from the message's store. - entry->RestoreL(*store); - - CleanupStack::PopAndDestroy(store); - CleanupStack::Pop(entry); - - return entry; - } - -/* - * CSmsScheduledEntry Implementation - */ - -CSmsScheduledEntry* CSmsScheduledEntry::NewL(const TMsvEntry& aEntry) - { - CSmsScheduledEntry* self = new (ELeave) CSmsScheduledEntry(aEntry); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -CSmsScheduledEntry::CSmsScheduledEntry(const TMsvEntry& aEntry) - : CMsvScheduledEntry(aEntry) - { - } - -void CSmsScheduledEntry::ConstructL() - { - iParaLayer = CParaFormatLayer::NewL(); - iCharLayer = CCharFormatLayer::NewL(); - iRichText = CRichText::NewL( iParaLayer, iCharLayer, CEditableText::EFlatStorage, 256 ); - iHeader = CSmsHeader::NewL(CSmsPDU::ESmsSubmit,*iRichText); - } - -CSmsScheduledEntry::~CSmsScheduledEntry() - { - // don't delete iRecipient - delete iHeader; - delete iRichText; - delete iCharLayer; - delete iParaLayer; - } - -void CSmsScheduledEntry::RecipientsStoreL(CMsvStore& aStore) const - { - iHeader->StoreL(aStore); - } - -void CSmsScheduledEntry::RecipientsRestoreL(CMsvStore& aStore) - { - iHeader->RestoreL(aStore); - } - -TBool CSmsScheduledEntry::CanSendToAnyRecipients(const TMsvSendErrorAction& aAction) - { - CArrayPtrFlat& numbers = iHeader->Recipients(); - TInt count = numbers.Count(); - - TBool retVal = EFalse; - - while (count--) - { - CSmsNumber* rcpt = numbers[count]; - - retVal |= CheckRecipient(*rcpt, aAction); - } - - return retVal; - } - -TBool CSmsScheduledEntry::RecipientsAllSent() const - { - //Returns whether all recipients of this SMS have sent successfully. - //If there are NO recipients, then returns EFalse. - - CArrayPtrFlat& numbers = iHeader->Recipients(); - TInt count = numbers.Count(); - TBool retVal = count; - - while (retVal && count--) - { - CSmsNumber* rcpt = numbers[count]; - retVal &= (rcpt->Status() == CMsvRecipient::ESentSuccessfully); - } - - return retVal; - } - -TBool CSmsScheduledEntry::CheckRecipient(CSmsNumber& aRcpt, const TMsvSendErrorAction& aAction) - { -#ifndef _MSG_NO_LOGGING - TPtrC address(aRcpt.Address()); - RFileLogger::WriteFormat(KSchSendLogDir, KSchSendLogFile, EFileLoggingModeAppend, - _L("\t\tCSmsScheduledEntry::CheckRecipient() aRcpt %S: Status %d Retries %d, aAction: Action %d Retries %d MaxRetries %d"), - &address, - aRcpt.Status(), - aRcpt.Retries(), - aAction.iAction, - aAction.iRetries, - aAction.MaxRetries()); -#endif - - TBool retVal = EFalse; - - if (aRcpt.Status() != CMsvRecipient::ESentSuccessfully) - { - if (aAction.iAction == ESendActionSentAlready) - { - aRcpt.SetStatus(CMsvRecipient::ESentSuccessfully); - } - else if (aAction.iAction == ESendActionFail) - { - aRcpt.SetStatus(CMsvRecipient::EFailedToSend); - } - else if (aAction.iRetries == ESendRetriesInfinite || aRcpt.Retries() < aAction.MaxRetries()) - { - aRcpt.SetStatus(CMsvRecipient::ENotYetSent); - retVal = ETrue; - } - else - { - aRcpt.SetStatus(CMsvRecipient::EFailedToSend); - } - } - - return retVal; - } - -/** -Returns ETrue if the message can still sent to any of its recipients. -Otherwise returns EFalse. - -The appropriate error action is also returned. The error action determines if a -particular recipient can be re-scheduled. The appropriate error action is given -from the list of error actions, which defines the action for a particular error -code. - -@param aErrorActions -The list of error actions that define what re-schedule is required for particular -error codes. - -@param aAction -An output argument with the error action appropriate for the recipient send error. - -@return -A boolean value indicatinng whether the message can be sent to any of its -recipients. -*/ -TBool CSmsScheduledEntry::CanSendToAnyRecipients(const CMsvSendErrorActions& aErrorActions, TMsvSendErrorAction& aAction) - { - CArrayPtrFlat& numbers = iHeader->Recipients(); - TInt count = numbers.Count(); - - TBool retVal = EFalse; - - while (count--) - { - CSmsNumber* rcpt = numbers[count]; - - TMsvSendErrorAction action; - - if (aErrorActions.GetSendErrorAction(rcpt->Error(), action) != KErrNone) - { - action = aErrorActions.Default(); - } - - if (CheckRecipient(*rcpt, action)) - { - retVal = ETrue; - aAction = action; - } - } - - return retVal; - } - -void CSmsScheduledEntry::RecipientsResetRetries() - { - CArrayPtrFlat& numbers = iHeader->Recipients(); - TInt count = numbers.Count(); - - while (count--) - { - CSmsNumber* rcpt = numbers[count]; - - if (rcpt->Status() != CMsvRecipient::ESentSuccessfully) - { - rcpt->ResetRetries(); - } - } - } - -void CSmsScheduledEntry::RecipientsIncreaseRetries() - { - CArrayPtrFlat& numbers = iHeader->Recipients(); - TInt count = numbers.Count(); - - while (count--) - { - CSmsNumber* rcpt = numbers[count]; - - if (rcpt->Status() != CMsvRecipient::ESentSuccessfully) - { - rcpt->IncreaseRetries(); - } - } - } - -void CSmsScheduledEntry::RecipientsSetFailed() - { - CArrayPtrFlat& numbers = iHeader->Recipients(); - TInt count = numbers.Count(); - - while (count--) - { - CSmsNumber* rcpt = numbers[count]; - - if (rcpt->Status() != CMsvRecipient::ESentSuccessfully) - { - rcpt->SetStatus(CMsvRecipient::EFailedToSend); - } - } - }