diff -r 000000000000 -r 72b543305e3a email/pop3andsmtpmtm/popservermtm/inc/POPSRFSH.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/pop3andsmtpmtm/popservermtm/inc/POPSRFSH.h Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,245 @@ +// Copyright (c) 2006-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: +// popservermtm module header +// @internalComponent +// @released +// +// + +#ifndef __POPSRFSH_H__ +#define __POPSRFSH_H__ + +#include +#include + +class CImPop3Session; +class CImPop3RefreshOperation; +class CImTextServerSession; +class CImPop3UidlMap; +class CImPop3Stat; +class CImPop3List; +class CImPop3Uidl; +class CImPop3Top; +class CImPop3Retr; +class CImPop3Capa; +class CImRecvConvert; + +// +// CImPop3RefreshMailBox +// +// Changes the modes for CImPop3RefreshOperation depending on +// operation failures, +// +// CImPop3RefreshMailBox was the original name of CImPop3RefreshOperation +// This version is written to trap a Leave while downloading equal UIDLs +// and re-run CImPop3RefreshOperation skiping UIDL downloading. (BFSW1-2016) +// +// The public section is left to be exactly the same as the original +// CImPop3RefreshOperation structure. +// +// +// +class CImPop3RefreshMailBox : public CMsgActive +{ +private : + enum TState { + EPop3RefreshBoxDefault, + EPop3RefreshBoxTop, + EPop3RefreshBoxPurgeInput + }; +public: + static CImPop3RefreshMailBox* NewL(CMsvServerEntry&, CImPop3Session&, RFs&); + ~CImPop3RefreshMailBox(); + void Start(TRequestStatus& aStatus, CArrayFixFlat* aMsgIdArray); + + TPop3Progress Progress(); + + void SetMessagesToKeepL(const CMsvEntrySelection* aMessagesToKeep); + + TUint RemoteMessageSizeL(TMsvId aId); + void Pause(); + void ResumeL(CImPop3Session* aPopSession, TRequestStatus& aStatus); + void CancelAllowResume(); + +private: + CImPop3RefreshMailBox(CImPop3Session& aPopSession); + + void ConstructL(CMsvServerEntry&, RFs&); + + void DoRunL(); + void DoCancel(); + void ChangeStateL(TState aState); + +private : + TState iState; + CImPop3RefreshOperation* iRefreshOperation; + CImTextServerSession* iTextServer; + CImPop3Session& iPopSession; + TImMailBuffer iTextServerResponse; + + TBufC8<3> iFullStopTerminator; + CArrayFixFlat * iMsvIdArray; + TBool iMigratingToNewBearer; +}; + +// +// CImPop3RefreshOperation +// +// +// Performs a refresh email sink +// +class CImPop3RefreshOperation : public CMsgActive + { +public: + static CImPop3RefreshOperation *NewL(CMsvServerEntry&, CImPop3Session*, RFs&); + ~CImPop3RefreshOperation(); + void Start(TRequestStatus& aStatus, CArrayFixFlat* aMsvIdArray); + void Start(TRequestStatus& aStatus); + + TPop3Progress Progress(); + + void SetMessagesToKeepL(const CMsvEntrySelection* aMessagesToKeep); + TUint RemoteMessageSizeL(TMsvId aId); + void Pause(); + void ResumeL(CImPop3Session* aPopSession, TRequestStatus& aStatus); + void CancelAllowResume(); + +private: + enum TState { + EPopRefreshSyncCollection, + EPopRefreshStat, + EPopRefreshList, + EPopRefreshUidl, + EPopRefreshSyncUidl, + EPopRefreshGetHeader, + EPopRefreshDeleteDeadMessages, + EPopRefreshComplete, + EPopRefreshDeleteExcessMessages, + EPopMigratingBearer + }; + + class TMsgUidlStore + { + public: + void ExternalizeL(RWriteStream& aStream) const; + public: + enum {EInvalid=-1,EPresent=-2}; + public: + HBufC8* iPopId; + TMsvId iMsvId; + TUint iRemoteSize; + // + TInt iSelectionPos; // transient member + }; + +private: + CImPop3RefreshOperation(CMsvServerEntry&, CImPop3Session*, RFs&); + void ConstructL(); + + void ChangeStateL(TState aState); // the state machine engine + void ChangeStateForMigrate(TState aState); + TInt SelectNextState(); + + void DoRunL(); + void DoComplete(TInt&); + void DoCancel(); + + void AllocateArraysL(); + void GetNoMessagesL(); + void GetMsgSizesL(); + void GetMsgUidlsL(); + void GetCapabilitiesL(); + + void DeleteUidl(TInt anIndex); + + void RetrieveHeadersL(); + + void GetHeaderByIndexL(TInt); + void GetMessageByIndexL(TInt); + + void CreateNewHeaderEntryL(TMsvEntry& aNewEntry); + void GetRemoteMessagesL(); + void QueueRemoteUpdate(); // will be asynch + void SyncCollectionL(); + void CompleteSyncCollection(); + void SyncUidlL(); + + TBool CompareIdAndSizeL(); + TBool GetMessagesIfAny(); + + void OpenUidlFileL(); + void CreateUidlFileL(); + + void RefreshFinishedL(); + + TBool CanDeleteEntry(const TMsvEmailEntry& aEntry) const; + +private: + TState iState; + TUint iNoMessages; + TUint iMboxSize; + TInt32* iIdTab; + TUint* iSize; + CArrayFixFlat* iNewMsg; + TPtrC8 iImMsgId; + + TInt iRemoteArrayCtr; + CImPop3UidlMap* iPop3Uidls; + CArrayFix* iUidlArray; + TKeyArrayFix iUidlKey; + + CMsvServerEntry& iRemoteServerEntry; + CMsvServerEntry* iLocalEntry; + CMsvEntrySelection* iMsvSelection; + + CImPop3Session* iPopSession; + CImPop3Stat* iPopStat; + CImPop3List* iPopList; + CImPop3Uidl* iPopUidl; + CImPop3Top* iPopTop; + CImPop3Retr* iPopRetr; + + CImRecvConvert* iRecvConverter; + RArray iUniqueUidlPosArray; + RArray iTemporaryUidlPosArray; + TInt iPreviousIndex; + + TInt iMsgCtr; + RFs& iFs; + + TMsvId iRemoteId; + + TPop3Progress iProgress; + TMsvEntry iEntry; + + // flags for existence of UIDL / TOP command + TBool iUidlExists; + TBool iTopExists; + TBool iFirstCallToTop; + TBool iEmptyHeaders; + // array of unwanted entries + CMsvEntrySelection* iUnwantedEntries; + + TInt iCheckDiskSpaceCounter; + TInt iCurrentDrive; + + TInt iLastHeaderToGet; + TInt iRemoteArraySize; + + CMsvEntrySelection* iMessagesToKeep; + + TBool iPipeliningSupported; + TBool iMigratingToNewBearer; + }; +#endif