diff -r c32dc0be5eb4 -r 6b4fc789785b remotestoragefw/remotefileengine/src/rsfwopenbypathstatemachine.cpp --- a/remotestoragefw/remotefileengine/src/rsfwopenbypathstatemachine.cpp Mon Jan 18 21:00:57 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,254 +0,0 @@ -/* -* Copyright (c) 2005-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: State machine for opening a file or directory -* -*/ - - -#include "rsfwopenbypathstatemachine.h" -#include "rsfwfileentry.h" -#include "rsfwfiletable.h" -#include "rsfwvolumetable.h" -#include "rsfwvolume.h" -#include "rsfwinterface.h" -#include "rsfwfileengine.h" -#include "rsfwlockmanager.h" -#include "mdebug.h" - - -// ---------------------------------------------------------------------------- -// CRsfwOpenByPathStateMachine::CRsfwOpenByPathStateMachine -// ---------------------------------------------------------------------------- -// -CRsfwOpenByPathStateMachine::CRsfwOpenByPathStateMachine() - { - } - -// ---------------------------------------------------------------------------- -// CRsfwOpenByPathStateMachine::~CRsfwOpenByPathStateMachine -// ---------------------------------------------------------------------------- -// -CRsfwOpenByPathStateMachine::~CRsfwOpenByPathStateMachine() - { - delete iLockToken; - } - -// ---------------------------------------------------------------------------- -// CRsfwOpenByPathStateMachine::CompleteRequestL -// ---------------------------------------------------------------------------- -// -CRsfwRfeStateMachine::TState* -CRsfwOpenByPathStateMachine::CompleteRequestL(TInt aError) - { - DEBUGSTRING(("CRsfwOpenByPathStateMachine::CompleteRequestL %d", aError)); - TRfeOpenByPathOutArgs* outArgs = - static_cast(iOutArgs); - if(!aError) - { - if ((Node()->Type() == KNodeTypeFile) && - iRealOpen) - { - // file opened successfully and was not already opened in create - Node()->iFileTable->UpdateOpenFileCount(1); - } - - outArgs->iPath.Copy(*iCacheName); - iAttrp->iAtt = Node()->Att(); - iAttrp->iSize = Node()->Size(); - iAttrp->iModified = Node()->Modified(); - } - - CompleteAndDestroyState()->SetErrorCode(aError); - return CompleteAndDestroyState(); - } - -// ---------------------------------------------------------------------------- -// CRsfwOpenByPathStateMachine::TRequestOpenModeState::TRequestOpenModeState -// ---------------------------------------------------------------------------- -// -CRsfwOpenByPathStateMachine::TRequestOpenModeState::TRequestOpenModeState( - CRsfwOpenByPathStateMachine* aParent) - : iOperation(aParent) - { - iRequestedLock = EFalse; - } - -// ---------------------------------------------------------------------------- -// CRsfwOpenByPathStateMachine::TRequestOpenModeState::EnterL -// ---------------------------------------------------------------------------- -// -void CRsfwOpenByPathStateMachine::TRequestOpenModeState::EnterL() - { - - DEBUGSTRING(("CRsfwOpenByPathStateMachine::TRequestOpenModeState::EnterL")); - - TRfeOpenByPathInArgs* inArgs = - static_cast(iOperation->iInArgs); - TRfeOpenByPathOutArgs* outArgs = - static_cast(iOperation->iOutArgs); - iOperation->iRealOpen = inArgs->iTrueOpen; - // Use inArgs->iFlags to pass desired locking information - iOperation->iFlags = inArgs->iFlags; - iOperation->iAttrp = &(outArgs->iAttr); - - if (!iOperation->Node()) - { - User::Leave(KErrNotFound); - } - - if (iOperation->Node()->Size() > iOperation->Volumes()->iMaxCacheSize) - { - DEBUGSTRING(("OPENBYPATH failed: file too large: file size %d, max cache size %d", - iOperation->Node()->Size(), - iOperation->Volumes()->iMaxCacheSize)); - User::Leave(KErrTooBig); - } - - DEBUGSTRING(("opening fid %d with flags 0x%x", - iOperation->Node()->Fid().iNodeId, - iOperation->iFlags)); - - if (!iOperation->FileEngine()->WriteDisconnected()) - { - if (!(iOperation->Node()->IsLocked()) && - (iOperation->Node()->Type() != KNodeTypeDir) && - (iOperation->iFlags & EFileWrite)) - { - DEBUGSTRING(("requesting lock")); - // For the time being - // if flag is 0 we are not interested in getting a lock - iOperation->FileEngine()->LockManager()->ObtainLockL( - iOperation->Node(), - iOperation->iFlags, - iOperation->iLockToken, - iOperation); - iRequestedLock = ETrue; - } - else - { - // IsLocked() || !(iOperation->iFlags & EFileWrite) - iOperation->HandleRemoteAccessResponse(0, KErrNone); - } - } - else - { - // if WriteDisconnected() - iOperation->HandleRemoteAccessResponse(0, KErrNone); - } - } - -// ---------------------------------------------------------------------------- -// CRsfwOpenByPathStateMachine::TRequestOpenModeState::CompleteL -// ---------------------------------------------------------------------------- -// -CRsfwOpenByPathStateMachine::TState* -CRsfwOpenByPathStateMachine::TRequestOpenModeState::CompleteL() - { - DEBUGSTRING(("CRsfwOpenByPathStateMachine::TRequestOpenModeState::CompleteL")); - if (iRequestedLock) - { - //from CRsfwLockManager::ObtainLock() -#ifdef _DEBUG - TPtrC p = iOperation->Node()->FullNameLC()->Des(); - DEBUGSTRING16(("ObtainLockL(): flags %d returned %d for file '%S'", - iOperation->iFlags, - KErrNone, - &p)); - CleanupStack::PopAndDestroy(); -#endif // DEBUG - iOperation->Node()->SetLockedL( - iOperation->FileEngine()->LockManager(), - iOperation->iLockToken); - iOperation->iLockToken = NULL; - } - - iOperation->iCacheName = iOperation->Node()->CacheFileName(); - - // make sure that the relevant cache file is on place - // (i.e. it has not been removed e.g. by other apps) - iOperation->Node()->ValidateCacheFile(); - - if (!iOperation->Node()->IsCached()) - { - if (iOperation->FileEngine()->Disconnected()) - { - if ((iOperation->Node()->Type() != KNodeTypeDir) && - !(iOperation->iFlags & EFileWrite)) - { - // While disconnected, - // write access of files returns "not found" - return iOperation->CompleteRequestL(KErrNotFound); - } - } - iOperation->FileEngine()->CreateContainerFileL(*(iOperation->Node())); - iOperation->iCacheName = iOperation->Node()->CacheFileName(); - } - else // is cached - { - if (iOperation->Node()->IsLocallyDirty()) - { - // This is a directory which has at least one kid - // that has been cached or flushed since the last opening - // of the directory - iOperation->FileEngine()->UpdateDirectoryContainerL( - *(iOperation->Node())); - } - - // If this is a cached file, - // we must remove it from LRUlist as it is now open - if (iOperation->iRealOpen) - { - iOperation->Node()->iFileTable->Volume()->iVolumeTable-> - RemoveFromLRUPriorityList(iOperation->Node()); - } - } - - // if file or dir has just been opened, remove it from metadata LRU list - iOperation->Node()->iFileTable->Volume()->iVolumeTable-> - RemoveFromMetadataLRUPriorityList(iOperation->Node()); - - return iOperation->CompleteRequestL(KErrNone); - } - -// ---------------------------------------------------------------------------- -// CRsfwOpenByPathStateMachine::TRequestOpenModeState::ErrorL -// fileEngine->RequestConnectionStateL() has returned with error -// ---------------------------------------------------------------------------- -// -CRsfwOpenByPathStateMachine::TState* -CRsfwOpenByPathStateMachine::TRequestOpenModeState::ErrorL(TInt aCode) - { - DEBUGSTRING(("CRsfwOpenByPathStateMachine::TRequestOpenModeState::ErrorL %d", aCode)); - // from CRsfwFileEngine::DoOpenByPath() - if (aCode == KErrNotSupported) - { - iRequestedLock = EFalse; - // locks not supported is not an error state - // instead we run the success state... - return CompleteL(); - } - - //from CRsfwLockManager::ObtainLock() -#ifdef _DEBUG - TPtrC p = iOperation->Node()->FullNameLC()->Des(); - DEBUGSTRING16(("ObtainLockL(): flags %d returned %d for file '%S'", - iOperation->iFlags, - aCode, - &p)); - CleanupStack::PopAndDestroy(); -#endif - - return iOperation->CompleteRequestL(aCode); - } -