remotestoragefw/remotefilesystemplugin/src/rsfwfilesystem.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:15:08 +0100
branchRCL_3
changeset 16 1aa8c82cb4cb
parent 0 3ad9d5175a89
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201021 Kit: 201035

/*
* Copyright (c) 2003-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:  Factory class for a file system. Allows creating
*               objects derived from CMountCB, CFileCB, CDirCB and CFormatCB.
*
*/


#include "rsfwfilesystem.h"
#include <f32ver.h>
#include "rsfwfsfilecb.h"
#include "rsfwfsdircb.h"
#include "rsfwfsmountcb.h"
#include "rsfwfsformatcb.h"
#include "rsfwinterface.h"

// ============================ MEMBER FUNCTIONS ===============================

// static constructor
CRsfwFileSystem* CRsfwFileSystem::New()
    {
    // non-leaving new, NULL returned for failed creation
    CRsfwFileSystem *self = new CRsfwFileSystem;
    return self;      
    }

// -----------------------------------------------------------------------------
// CRsfwFileSystem::CRsfwFileSystem
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CRsfwFileSystem::CRsfwFileSystem()
    {
    }

// Destructor
CRsfwFileSystem::~CRsfwFileSystem()
    {
    }
  
// -----------------------------------------------------------------------------
// CRsfwFileSystem::Install
// Installs the file system.

// The function sets the name of the file system object through a call
// to CObject::SetName(), thus making it accessible, internally, 
// using FileSystems->FindByFullName(). This enables the file server
// to find and handle installed file systems. The function also sets 
// unique identifier for the file system and the file system version.
// The version is determined by the file system implementation.
// It is used in calls to CFileSystem::QueryVersionSupported().
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CRsfwFileSystem::Install()
    {
    
    iVersion = TVersion(KF32MajorVersionNumber,
                            KF32MinorVersionNumber,
                            KF32BuildVersionNumber);

    TTime timeID;
    timeID.HomeTime();
    iUniqueID = I64LOW(timeID.Int64());

    return (SetName(&KRemoteFSName));
  
    }

// -----------------------------------------------------------------------------
// CRsfwFileSystem::Remove
// This is called just before the file system object is destroyed, and allows
// any clean up to be carried out.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CRsfwFileSystem::Remove()
    {
    
    return KErrNone;  
  
    }

// -----------------------------------------------------------------------------
// CRsfwFileSystem::NewMountL
// Creates a new remote mount control block, a CMountCB derived object. 
// On success, a pointer to the new mount object is returned,
// otherwise the function leaves.
//
// This function is defined as a const function in the base class CFileSystem.
// However, we need to pass to the mount class modifiable pointers to 
// the shared memory chunks used in the parameter passing. That's why we need 
// to cast away const.
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
CMountCB* CRsfwFileSystem::NewMountL() const
    {
    
    return const_cast<CRsfwFileSystem*>(this)->NewRemoteFsMountL();
  
    }

 
// -----------------------------------------------------------------------------
// CRsfwFileSystem::NewFileL
// Creates a new remote file control block, i.e. a CFileCB derived object.
// On success, a pointer to the new file object is returned,
// otherwise the function leaves.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
CFileCB* CRsfwFileSystem::NewFileL() const
    {
    return new(ELeave) CRsfwFsFileCB();
    }


// -----------------------------------------------------------------------------
// CRsfwFileSystem::NewDirL
// Creates a new remote directory control block, i.e. a CDirCB derived object.
// On success, a pointer to the new directory control block is returned,
// otherwise the function leaves.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
CDirCB* CRsfwFileSystem::NewDirL() const
    {
    return(CRsfwFsDirCB::NewL());
    }
   
// -----------------------------------------------------------------------------
// CRsfwFileSystem::NewFormatL
// Creates a new remote volume format control block, i.e. a CFormatCB derived object.
// On success, a pointer to the new volume format control block is returned,
// otherwise the function leaves.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
CFormatCB* CRsfwFileSystem::NewFormatL() const
    {
    return new(ELeave) CRsfwFsFormatCB();
    }

// -----------------------------------------------------------------------------
// CRsfwFileSystem::DriveInfo
// Retrieves drive information.
// The function assumes that we are not handling different local drives, and 
// sets anInfo.iMediaAtt, anInfo.iDriveAtt and anInfo.iType to values "sensible"
// for remote drives discarding the specified drive number. For local drives 
// the function would obtain the necessary information by calling the appropriate 
// TBusLocalDrive::Caps() function using the argument aDriveNumber.

// Note that and anInfo.iBatteryState will already have been
// set by the calling function.
    
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CRsfwFileSystem::DriveInfo(
    TDriveInfo& anInfo,
    TInt /* aDriveNumber */) const
    {
    
    anInfo.iType = EMediaRemote;
    anInfo.iMediaAtt = KMediaAttVariableSize; 
    anInfo.iDriveAtt = KDriveAttRemote;

    }

// -----------------------------------------------------------------------------
// CRsfwFileSystem::NewRemoteFsMountL
// Creates a new remote mount control block, a CMountCB derived object. 
// On success, a pointer to the new mount object is returned,
// otherwise the function leaves.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
CMountCB* CRsfwFileSystem::NewRemoteFsMountL()
    {
    
    return CRsfwFsMountCB::NewL();
  
    }

// -----------------------------------------------------------------------------
// CRsfwFileSystem::DefaultPath
// Returns the default path for the file system. 
// Always returns "C:\\".
//
// Each session with the file server has a current session path.
// When a new session is opened, its session path is set to the default path
// of the file server. At file server start-up, this default path is set to the 
// default path returned by the local file system. 
// The default implementation in the base class raises an "Fserv fault" 31 panic.
//
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt CRsfwFileSystem::DefaultPath(
    TDes& aPath) const
    {

    _LIT(KDefaultPath, "C:\\");
    aPath = KDefaultPath;
    return (KErrNone);
  
    }