diff -r 88ee4cf65e19 -r 1aa8c82cb4cb remotestoragefw/remotefileengine/inc/rsfwlockmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remotestoragefw/remotefileengine/inc/rsfwlockmanager.h Wed Sep 01 12:15:08 2010 +0100 @@ -0,0 +1,91 @@ +/* +* Copyright (c) 2004-2006 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: Lock manager for locked remote files +* +*/ + + +#ifndef C_RSFWLOCKMANAGER_H +#define C_RSFWLOCKMANAGER_H + +#include + +#include "rsfwrfesession.h" +#include "rsfwremoteaccess.h" + +class CRsfwFileEntry; +class CRsfwRfeStateMachine; + +/** lock timeout in seconds */ +const TInt KDefaultLockTimeout = 900; + +/** KDefaultLockTimeout is the lock timeout requested from the server + Our lock timer is set to value KDefaultLockTimeout / KLockRefreshAdjustment. + It must be smaller, as it is started only when we receive the reply + from the server, and when it expires we still must have time to sent the + refresh request */ +const TInt KLockRefreshAdjustment = 3; + +/** If lock refresh attempt results in an error from the protocol stack + we use timeout mechanism to try again, but with a small timeout + as we are not even sending packets to the server. */ +const TInt KMinLockRefreshAttempt = 5; + +/** + * Pending lock renewal requests + * + * @lib remotefe.exe + * @since Series 60 3.1 + */ +class TPendingLockRefreshContext + { +public: + // Lock refresh request transaction Id + TUint iId; + // Pointer to the file entry waiting for this refresh + CRsfwFileEntry* iFileEntry; + }; + +class CRsfwLockManager: public CBase, public MRsfwRemoteAccessResponseHandler + { +public: + static CRsfwLockManager* NewL(CRsfwRemoteAccess* aRemoteAccess); + static CRsfwLockManager* NewLC(CRsfwRemoteAccess* aRemoteAccess); + ~CRsfwLockManager(); + + void HandleRemoteAccessResponse(TUint aId, TInt aStatus); + void ObtainLockL(CRsfwFileEntry* + aFileEntry, + TUint aLockFlags, + TDesC8*& aLockToken, + CRsfwRfeStateMachine* aOperation); + void ReleaseLockL(CRsfwFileEntry* aFileEntry, CRsfwRfeStateMachine* aOperation); + void RefreshLockL(CRsfwFileEntry* aFileEntry); + TInt LockedCount(); + void AddLockedEntryL(CRsfwFileEntry* aEntry); + void RemoveLockedEntry(CRsfwFileEntry* aEntry); + void PopulateExternalLockTokenCacheL(CRsfwFileEntry* aRoot); + +private: + void ConstructL(CRsfwRemoteAccess*) ; + +private: + CRsfwRemoteAccess* iRemoteAccess; // remote file transport module + RArray iLockRefreshContexts; + RPointerArray iLockedEntries; + }; + +#endif // LOCKMANAGER_H + +// End of File