diff -r c32dc0be5eb4 -r 6b4fc789785b remotestoragefw/remotefileengine/src/rsfwrfemessagerequest.cpp --- a/remotestoragefw/remotefileengine/src/rsfwrfemessagerequest.cpp Mon Jan 18 21:00:57 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,461 +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: A request sent by a client (i.e. non-internal request) -* -*/ - - -#include "rsfwrfemessagerequest.h" -#include "rsfwrfeoperation.h" -#include "rsfwvolumetable.h" -#include "rsfwvolume.h" -#include "rsfwcommon.h" -#include "rsfwinterface.h" -#include "mdebug.h" -#include "rsfwrfesession.h" - - - -// ---------------------------------------------------------------------------- -// CRsfwRfeMessageRequest::CRsfwRfeMessageRequest -// ---------------------------------------------------------------------------- -// -CRsfwRfeMessageRequest::CRsfwRfeMessageRequest() - { - SetRequestType(EMessageRequest); - iMessageCompleted = EFalse; - } - -// ---------------------------------------------------------------------------- -// CRsfwRfeMessageRequest::SetL -// ---------------------------------------------------------------------------- -// -void CRsfwRfeMessageRequest::SetL(const RMessage2& aMessage, - CRsfwRfeSession* aSession) - { - DEBUGSTRING(("CRsfwRfeMessageRequest::Set")); - - // common for all operations - iMessage = aMessage; - iSession = aSession; - iVolumeTable = aSession->Volume(); - - // if a file system access operation - if (aMessage.Function() >= ERenameReplace) - { - switch (aMessage.Function()) - { - // read input parameters - case ERenameReplace: - { - TRfeRenameInArgs* inArgs = new (ELeave) TRfeRenameInArgs(); - CleanupStack::PushL(inArgs); - TPckg pkgInArgs(*inArgs); - aMessage.ReadL(0, pkgInArgs); - CleanupStack::Pop(inArgs); - iInArgs = inArgs; - iOutArgs = NULL; - break; - } - case ESetAttr: - { - TRfeSetAttrInArgs* inArgs = new (ELeave) TRfeSetAttrInArgs(); - CleanupStack::PushL(inArgs); - TPckg pkgInArgs(*inArgs); - aMessage.ReadL(0, pkgInArgs); - CleanupStack::Pop(inArgs); - iInArgs = inArgs; - iOutArgs = NULL; - break; - } - case EFsIoctl: - { - TRfeIoctlInArgs* inArgs = new (ELeave) TRfeIoctlInArgs(); - CleanupStack::PushL(inArgs); - TPckg pkgInArgs(*inArgs); - aMessage.ReadL(0, pkgInArgs); - CleanupStack::Pop(inArgs); - iInArgs = inArgs; - iOutArgs = NULL; - break; - } - - case EGetAttr: - { - TRfeGetAttrInArgs* inArgs = new (ELeave) TRfeGetAttrInArgs(); - CleanupStack::PushL(inArgs); - TRfeGetAttrOutArgs* outArgs = new (ELeave )TRfeGetAttrOutArgs(); - CleanupStack::PushL(outArgs); - TPckg pkgInArgs(*inArgs); - aMessage.ReadL(0, pkgInArgs); - CleanupStack::Pop(2, inArgs); // inArgs, outArgs - iInArgs = inArgs; - iOutArgs = outArgs; - break; - } - - case EOpenByPath: - { - TRfeOpenByPathInArgs* inArgs = new (ELeave) TRfeOpenByPathInArgs(); - CleanupStack::PushL(inArgs); - TRfeOpenByPathOutArgs* outArgs = new (ELeave) TRfeOpenByPathOutArgs(); - CleanupStack::PushL(outArgs); - TPckg pkgInArgs(*inArgs); - aMessage.ReadL(0, pkgInArgs); - CleanupStack::Pop(2, inArgs); // inArgs, outArgs - iInArgs = inArgs; - iOutArgs = outArgs; - break; - } - - case EFsRoot: - { - TRfeRootInArgs* inArgs = new (ELeave) TRfeRootInArgs(); - CleanupStack::PushL(inArgs); - TRfeRootOutArgs* outArgs = new (ELeave) TRfeRootOutArgs(); - CleanupStack::PushL(outArgs); - TPckg pkgInArgs(*inArgs); - aMessage.ReadL(0, pkgInArgs); - CleanupStack::Pop(2, inArgs); // inArgs, outArgs - iInArgs = inArgs; - iOutArgs = outArgs; - break; - } - - case EMkDir: - { - TRfeMkdirInArgs* inArgs = new (ELeave) TRfeMkdirInArgs(); - CleanupStack::PushL(inArgs); - TPckg pkgInArgs(*inArgs); - aMessage.ReadL(0, pkgInArgs); - CleanupStack::Pop(inArgs); - iInArgs = inArgs; - iOutArgs = NULL; - break; - } - - case ERemoveDir: - { - TRfeRmdirInArgs* inArgs = new (ELeave) TRfeRmdirInArgs(); - CleanupStack::PushL(inArgs); - TPckg pkgInArgs(*inArgs); - aMessage.ReadL(0, pkgInArgs); - CleanupStack::Pop(inArgs); - iInArgs = inArgs; - iOutArgs = NULL; - break; - } - - case ECreateFile: - { - TRfeCreateInArgs* inArgs = new (ELeave) TRfeCreateInArgs(); - CleanupStack::PushL(inArgs); - TRfeCreateOutArgs* outArgs = new (ELeave) TRfeCreateOutArgs(); - CleanupStack::PushL(outArgs); - TPckg pkgInArgs(*inArgs); - aMessage.ReadL(0, pkgInArgs); - CleanupStack::Pop(2, inArgs); // inArgs, outArgs - iInArgs = inArgs; - iOutArgs = outArgs; - break; - } - - case ERemove: - { - TRfeRemoveInArgs* inArgs = new (ELeave) TRfeRemoveInArgs(); - CleanupStack::PushL(inArgs); - TPckg pkgInArgs(*inArgs); - aMessage.ReadL(0, pkgInArgs); - CleanupStack::Pop(inArgs); - iInArgs = inArgs; - iOutArgs = NULL; - break; - } - - case ELookUp: - { - TRfeLookupInArgs* inArgs = new (ELeave) TRfeLookupInArgs(); - CleanupStack::PushL(inArgs); - TRfeLookupOutArgs* outArgs = new (ELeave) TRfeLookupOutArgs(); - CleanupStack::PushL(outArgs); - TPckg pkgInArgs(*inArgs); - aMessage.ReadL(0, pkgInArgs); - CleanupStack::Pop(2, inArgs); - iInArgs = inArgs; - iOutArgs = outArgs; - break; - } - - case EClose: - { - TRfeCloseInArgs* inArgs = new (ELeave) TRfeCloseInArgs(); - inArgs->iFid.iVolumeId = aMessage.Int0(); - inArgs->iFid.iNodeId = aMessage.Int1(); - inArgs->iOpCode = EClose; - inArgs->iFlags = aMessage.Int2(); - iInArgs = inArgs; - iOutArgs = NULL; - break; - } - - case EFlush: - { - TRfeFlushInArgs* inArgs = new (ELeave) TRfeFlushInArgs(); - CleanupStack::PushL(inArgs); - TPckg pkgInArgs(*inArgs); - aMessage.ReadL(0, pkgInArgs); - CleanupStack::Pop(inArgs); - iInArgs = inArgs; - break; - } - - case EFetch: - { - TRfeFetchInArgs* inArgs = new (ELeave) TRfeFetchInArgs(); - CleanupStack::PushL(inArgs); - TRfeFetchOutArgs* outArgs = new (ELeave) TRfeFetchOutArgs(); - CleanupStack::PushL(outArgs); - TPckg pkgInArgs(*inArgs); - aMessage.ReadL(0, pkgInArgs); - CleanupStack::Pop(2, inArgs); - iInArgs = inArgs; - iOutArgs = outArgs; - break; - } - - case EFetchData: - { - TRfeFetchDataInArgs* inArgs = new (ELeave) TRfeFetchDataInArgs(); - CleanupStack::PushL(inArgs); - TRfeFetchDataOutArgs* outArgs = new (ELeave) TRfeFetchDataOutArgs(); - CleanupStack::PushL(outArgs); - TPckg pkgInArgs(*inArgs); - aMessage.ReadL(0, pkgInArgs); - CleanupStack::Pop(2, inArgs); - iInArgs = inArgs; - iOutArgs = outArgs; - break; - } - - case EOkToWrite: - { - TRfeWriteDataInArgs* inArgs = new (ELeave) TRfeWriteDataInArgs(); - CleanupStack::PushL(inArgs); - TRfeWriteDataOutArgs* outArgs = new (ELeave) TRfeWriteDataOutArgs(); - CleanupStack::PushL(outArgs); - TPckg pkgInArgs(*inArgs); - aMessage.ReadL(0, pkgInArgs); - CleanupStack::Pop(2, inArgs); - iInArgs = inArgs; - iOutArgs = outArgs; - break; - } - } - - DEBUGSTRING(("volume id %d", iInArgs->iFid.iVolumeId)); - // Here volumeId may be 0 to denote "no volume id" - // This is OK - we assume that drive letter A is never allocated - iVolume = iVolumeTable->VolumeByVolumeId(iInArgs->iFid.iVolumeId); - - // As this is a file system access operation - not mount operation, - // if volume is null we are not ready for file operations - // - indicate this to the client who needs to call mount - TBool ready = - iVolume && - (iVolume->iMountInfo.iMountStatus.iMountState != - KMountStateDormant); - if (!ready && aMessage.Function() != EFsRoot && aMessage.Function() != EClose) - { - aMessage.Complete(KErrNotReady); - iMessageCompleted = ETrue; - } - } - } - -// ---------------------------------------------------------------------------- -// CRsfwRfeMessageRequest::Message -// ---------------------------------------------------------------------------- -// -const RMessage2& CRsfwRfeMessageRequest::Message() - { - return iMessage; - } - -// ---------------------------------------------------------------------------- -// CRsfwRfeMessageRequest::Session -// ---------------------------------------------------------------------------- -// -CRsfwRfeSession* CRsfwRfeMessageRequest::Session() - { - return iSession; - } - - -// ---------------------------------------------------------------------------- -// CRsfwRfeMessageRequest::Session -// ---------------------------------------------------------------------------- -// -void CRsfwRfeMessageRequest::SetSession(CRsfwRfeSession* aSession) - { - iSession = aSession; - } - - -// ---------------------------------------------------------------------------- -// CRsfwRfeMessageRequest::Complete -// ---------------------------------------------------------------------------- -// -void CRsfwRfeMessageRequest::Complete(TInt aError) - { - DEBUGSTRING(("CRsfwRfeMessageRequest::Complete")); - if (iSession) - { - DEBUGSTRING((">>> Dispatch exit (operation %d, error %d, return %d)", - Operation()->iFunction, - aError, - aError)); - DEBUGSTRING(("completing request")); - if (!Message().IsNull()) - { - Message().Complete(aError); - } - DEBUGSTRING(("request completed")); - iMessageCompleted = ETrue; - } - } - -// ---------------------------------------------------------------------------- -// CRsfwRfeMessageRequest::CompleteAndDestroy -// ---------------------------------------------------------------------------- -// -void CRsfwRfeMessageRequest::CompleteAndDestroy(TInt aError) - { - DEBUGSTRING(("CRsfwRfeMessageRequest::CompleteAndDestroy")); - - TInt err; - err = KErrNone; - if (iSession) - { - DEBUGSTRING((">>> Dispatch exit (operation %d, error %d, return %d)", - Operation()->iFunction, aError, aError)); - switch (Operation()->iFunction) - { - // write output parameters - case EFetch: - { - DEBUGSTRING(("writing parameters: EFetch")); - TRfeFetchOutArgs* outArgs = (TRfeFetchOutArgs *)(iOutArgs); - TPckg pkgOutArgs(*outArgs); - err = Message().Write(1, pkgOutArgs); - break; - } - - case EFetchData: - { - DEBUGSTRING(("writing parameters: EFetchData")); - TRfeFetchDataOutArgs* outArgs = (TRfeFetchDataOutArgs *)(iOutArgs); - TPckg pkgOutArgs(*outArgs); - err = Message().Write(1, pkgOutArgs); - break; - } - - case EOkToWrite: - { - DEBUGSTRING(("writing parameters: EOkToWrite")); - TRfeWriteDataOutArgs* outArgs = (TRfeWriteDataOutArgs *)(iOutArgs); - TPckg pkgOutArgs(*outArgs); - err = Message().Write(1, pkgOutArgs); - break; - } - - case ELookUp: - { - DEBUGSTRING(("writing parameters: ELookup")); - TRfeLookupOutArgs* outArgs = (TRfeLookupOutArgs *)(iOutArgs); - TPckg pkgOutArgs(*outArgs); - err = Message().Write(1, pkgOutArgs); - break; - } - - case ECreateFile: - { - DEBUGSTRING(("writing parameters: ECreateFile")); - TRfeCreateOutArgs* outArgs = (TRfeCreateOutArgs *)(iOutArgs); - TPckg pkgOutArgs(*outArgs); - err = Message().Write(1, pkgOutArgs); - break; - } - - case EOpenByPath: - { - DEBUGSTRING(("writing parameters: EOpenByPath")); - TRfeOpenByPathOutArgs* outArgs = - (TRfeOpenByPathOutArgs *)(iOutArgs); - TPckg pkgOutArgs(*outArgs); - err = Message().Write(1, pkgOutArgs); - break; - } - - case EGetAttr: - { - DEBUGSTRING(("writing parameters: EGetAttr")); - TRfeGetAttrOutArgs* outArgs = (TRfeGetAttrOutArgs *)(iOutArgs); - TPckg pkgOutArgs(*outArgs); - err = Message().Write(1, pkgOutArgs); - break; - } - - case EFsRoot: - { - DEBUGSTRING(("writing parameters: EFsRoot")); - TRfeRootOutArgs* outArgs = (TRfeRootOutArgs *)(iOutArgs); - TPckg pkgOutArgs(*outArgs); - err = Message().Write(1, pkgOutArgs); - break; - } - } - - if (err) - { - aError = err; - } - - DEBUGSTRING(("completing request")); - if (!Message().IsNull()) - { - Message().Complete(aError); - } - DEBUGSTRING(("request completed")); - iMessageCompleted = ETrue; - } - - Destroy(); - } - - - // ---------------------------------------------------------------------------- -// CRsfwRfeRequest::Destroy -// ---------------------------------------------------------------------------- -// -void CRsfwRfeMessageRequest::Destroy() - { - if (iSession) - { - iSession->RemoveFromMessageRequestArray(this); - } - - CRsfwRfeRequest::Destroy(); - } - -