diff -r 87c71b25c937 -r 88ee4cf65e19 remotestoragefw/remotefileengine/src/rsfwfetchdatastatemachine.cpp --- a/remotestoragefw/remotefileengine/src/rsfwfetchdatastatemachine.cpp Wed Jun 09 10:37:35 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,180 +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 fetching data without caching it permanently -* -*/ - - -#include "rsfwfetchdatastatemachine.h" -#include "rsfwfileentry.h" -#include "rsfwfiletable.h" -#include "rsfwinterface.h" -#include "rsfwvolumetable.h" -#include "rsfwvolume.h" -#include "rsfwrfeserver.h" -#include "mdebug.h" -#include "rsfwfileengine.h" - - -// ---------------------------------------------------------------------------- -// CRsfwFetchDataStateMachine::CRsfwFetchDataStateMachine -// ---------------------------------------------------------------------------- -// -CRsfwFetchDataStateMachine::CRsfwFetchDataStateMachine() - { - } - -// ---------------------------------------------------------------------------- -// CRsfwFetchDataStateMachine::CompleteRequestL -// ---------------------------------------------------------------------------- -// -CRsfwRfeStateMachine::TState* -CRsfwFetchDataStateMachine::CompleteRequestL(TInt aError) - { - TRfeFetchDataOutArgs* outArgs = - static_cast(iOutArgs); - if(!aError) - { - outArgs->iTempPath.Copy(*iCacheName); - } - - CompleteAndDestroyState()->SetErrorCode(aError); - return CompleteAndDestroyState(); - } - -// ---------------------------------------------------------------------------- -// CRsfwFetchDataStateMachine::TFetchDataState::TFetchDataState -// ---------------------------------------------------------------------------- -// -CRsfwFetchDataStateMachine::TFetchDataState::TFetchDataState( - CRsfwFetchDataStateMachine* aParent) - : iOperation(aParent) - { - } - -// ---------------------------------------------------------------------------- -// CRsfwFetchDataStateMachine::TFetchDataState::EnterL -// ---------------------------------------------------------------------------- -// -void CRsfwFetchDataStateMachine::TFetchDataState::EnterL() - { - TInt err = KErrNone; - TRfeFetchDataInArgs* inArgs = - static_cast(iOperation->iInArgs); - TRfeFetchDataOutArgs* outArgs = - static_cast(iOperation->iOutArgs); - TInt firstByte = inArgs->iFirstByte; - TInt lastByte = inArgs->iLastByte; - - - TCachingMode cachingMode = - iOperation->Node()->iFileTable->Volume()->iVolumeTable->iCachingMode; - - if (iOperation->Node()) - { - DEBUGSTRING(("Fetch without caching fid %d, bytes %d - %d", - iOperation->Node()->Fid().iNodeId, - firstByte, - lastByte)); - - if (cachingMode == EWholeFileCaching) - { - outArgs->iUseTempPath = EFalse; - // in this mode we always fetch the whole file to the normal cache - iOperation->iCacheName = iOperation->Node()->CacheFileName(); - iOperation->iLength = iOperation->Node()->Size() - - iOperation->Node()->iCachedSize + - 1; - TUint transactionId = iOperation-> - FileEngine()->FetchAndCacheL(*iOperation->Node(), - iOperation->Node()->iCachedSize, - &iOperation->iLength, - &(iOperation->iDirEnts), - iOperation); - // transactionId = 0 means syncronous non-cancellable operation - if (transactionId > 0) - { - iOperation->iTransactionId = transactionId; - } - } - else - { - // reset and use the temporary cache file... - outArgs->iUseTempPath = ETrue; - TParse parser; - parser.Set(*iOperation->Node()->CacheFileName(), NULL, NULL); - HBufC* tempPath = HBufC::NewLC(KMaxPath); - TPtr tempfile = tempPath->Des(); - tempfile.Append(parser.DriveAndPath()); - tempfile.Append(KTempFileName); - iOperation->iCacheName = iOperation->Node()->CacheFileName(); - // This much will be added to the cache by this fetch - iOperation->iLength =lastByte - firstByte + 1; - if (!iOperation-> - Node()-> - iFileTable-> - Volume()-> - iVolumeTable->EnsureCacheCanBeAddedL(iOperation->iLength)) - { - User::Leave(KErrDiskFull); - } - RFile f; - err = f.Replace(CRsfwRfeServer::Env()->iFs, - *tempPath, - EFileShareAny | EFileWrite); - if (err == KErrNone) - { - f.Close(); - HBufC* fullName = - iOperation->FileEngine()->FullNameLC(*iOperation->Node()); - TUint transactionId = iOperation->FileEngine()->RemoteAccessL()-> - GetFileL(*fullName, - *tempPath, - firstByte, - &iOperation->iLength, - KRemoteAccessOptionGetToStartOfFile, - iOperation); - // transactionId = 0 means syncronous non-cancellable operation - if (transactionId > 0) - { - iOperation->iTransactionId = transactionId; - } - CleanupStack::PopAndDestroy(fullName); - } - CleanupStack::PopAndDestroy(tempPath); - } - } - } - -// ---------------------------------------------------------------------------- -// CRsfwFetchDataStateMachine::TFetchDataState::CompleteL -// ---------------------------------------------------------------------------- -// -CRsfwFetchDataStateMachine::TState* -CRsfwFetchDataStateMachine::TFetchDataState::CompleteL() - { - return iOperation->CompleteRequestL(KErrNone); - } - -// ---------------------------------------------------------------------------- -// CRsfwFetchDataStateMachine::TFetchDataState::ErrorL -// ---------------------------------------------------------------------------- -// -CRsfwFetchDataStateMachine::TState* -CRsfwFetchDataStateMachine::TFetchDataState::ErrorL(TInt aCode) - { - return iOperation->CompleteRequestL(aCode); - } - -