sl@0: // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0: // All rights reserved.
sl@0: // This component and the accompanying materials are made available
sl@0: // under the terms of the License "Eclipse Public License v1.0"
sl@0: // which accompanies this distribution, and is available
sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0: //
sl@0: // Initial Contributors:
sl@0: // Nokia Corporation - initial contribution.
sl@0: //
sl@0: // Contributors:
sl@0: //
sl@0: // Description:
sl@0: //
sl@0: 
sl@0: #include "template_plugin.h"
sl@0: #include <f32pluginutils.h>
sl@0: 
sl@0: /**
sl@0: Leaving New function for the plugin
sl@0: @internalComponent
sl@0: */
sl@0: CTemplatePlugin* CTemplatePlugin::NewL()
sl@0: 	{
sl@0: 	CTemplatePlugin* self = new(ELeave) CTemplatePlugin;
sl@0:     CleanupStack::PushL(self);
sl@0:     self->ConstructL();
sl@0:     CleanupStack::Pop();
sl@0: 	return self;
sl@0: 	}
sl@0: 
sl@0: 
sl@0: /**
sl@0: Constructor for the plugin
sl@0: @internalComponent
sl@0: */
sl@0: CTemplatePlugin::CTemplatePlugin() : iInterceptsEnabled(EFalse),
sl@0: 									 iLogging(ETrue)
sl@0: 	{
sl@0: 	}
sl@0: 
sl@0: 
sl@0: void CTemplatePlugin::ConstructL()
sl@0: 	{
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: The destructor for the plugin
sl@0: @internalComponent
sl@0: */
sl@0: CTemplatePlugin::~CTemplatePlugin()
sl@0: 	{
sl@0: 	iFs.Close();
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: Initialise the plugin.
sl@0: @internalComponent
sl@0: */
sl@0: void CTemplatePlugin::InitialiseL()
sl@0: 	{
sl@0: 	User::LeaveIfError(iFs.Connect());
sl@0: 	CleanupClosePushL(iFs);
sl@0: 
sl@0: 	_LOG(_L("CTemplatePlugin InitialiseL"));
sl@0: 	EnableInterceptsL();
sl@0: 	
sl@0: 	CleanupStack::Pop(); // iFs
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: Enable the plugin's intercepts.
sl@0: @internalComponent
sl@0: */
sl@0: void CTemplatePlugin::EnableInterceptsL()
sl@0: 	{
sl@0: 	if (iInterceptsEnabled) return;
sl@0: 	
sl@0: 	User::LeaveIfError(RegisterIntercept(EFsFileRead,		EPrePostIntercept));
sl@0: 	User::LeaveIfError(RegisterIntercept(EFsFileWrite,		EPrePostIntercept));
sl@0: 	User::LeaveIfError(RegisterIntercept(EFsDirOpen,		EPrePostIntercept));
sl@0: 	User::LeaveIfError(RegisterIntercept(EFsFileLock,		EPrePostIntercept));
sl@0: 	User::LeaveIfError(RegisterIntercept(EFsFileUnLock,		EPrePostIntercept));
sl@0: 	User::LeaveIfError(RegisterIntercept(EFsFileSeek,		EPrePostIntercept));
sl@0: 	User::LeaveIfError(RegisterIntercept(EFsFileSize,		EPrePostIntercept));
sl@0: 	User::LeaveIfError(RegisterIntercept(EFsFileSetSize,	EPrePostIntercept));
sl@0: 	User::LeaveIfError(RegisterIntercept(EFsDirReadOne,		EPrePostIntercept));
sl@0: 	User::LeaveIfError(RegisterIntercept(EFsDirReadPacked,	EPrePostIntercept));
sl@0: 	User::LeaveIfError(RegisterIntercept(EFsFileOpen,	EPrePostIntercept));
sl@0: 	User::LeaveIfError(RegisterIntercept(EFsFileCreate,	EPrePostIntercept));
sl@0: 	User::LeaveIfError(RegisterIntercept(EFsFileReplace,EPrePostIntercept));
sl@0: 	User::LeaveIfError(RegisterIntercept(EFsFileRename,	EPrePostIntercept));
sl@0:    	User::LeaveIfError(RegisterIntercept(EFsReadFileSection,EPrePostIntercept));
sl@0: 	User::LeaveIfError(RegisterIntercept(EFsFileSubClose,        EPrePostIntercept)); 
sl@0: 
sl@0: 	_LOG(_L("Template Plugin: Enabled intercepts."));
sl@0:     
sl@0: 	iInterceptsEnabled = ETrue;
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: Disable the plugin's intercepts.
sl@0: @internalComponent
sl@0: */
sl@0: void CTemplatePlugin::DisableInterceptsL()
sl@0: 	{
sl@0: 	if (!iInterceptsEnabled) return;
sl@0: 	
sl@0: 	User::LeaveIfError(UnregisterIntercept(EFsFileRead,		EPrePostIntercept));
sl@0: 	User::LeaveIfError(UnregisterIntercept(EFsFileRename,	EPrePostIntercept));
sl@0: 	User::LeaveIfError(UnregisterIntercept(EFsFileWrite,	EPrePostIntercept));
sl@0: 	User::LeaveIfError(UnregisterIntercept(EFsDirOpen,		EPrePostIntercept));
sl@0: 	User::LeaveIfError(UnregisterIntercept(EFsFileLock,		EPrePostIntercept));
sl@0: 	User::LeaveIfError(UnregisterIntercept(EFsFileUnLock,	EPrePostIntercept));
sl@0: 	User::LeaveIfError(UnregisterIntercept(EFsFileSeek,		EPrePostIntercept));
sl@0: 	User::LeaveIfError(UnregisterIntercept(EFsFileSize,		EPrePostIntercept));
sl@0: 	User::LeaveIfError(UnregisterIntercept(EFsFileSetSize,	EPrePostIntercept));
sl@0: 	User::LeaveIfError(UnregisterIntercept(EFsFileCreate,	EPrePostIntercept));
sl@0: 	User::LeaveIfError(UnregisterIntercept(EFsFileOpen, 	EPrePostIntercept));
sl@0: 	User::LeaveIfError(UnregisterIntercept(EFsFileReplace, 	EPrePostIntercept));
sl@0: 	User::LeaveIfError(UnregisterIntercept(EFsFileSubClose, EPrePostIntercept));
sl@0: 	User::LeaveIfError(UnregisterIntercept(EFsReadFileSection,EPrePostIntercept));
sl@0: 	User::LeaveIfError(UnregisterIntercept(EFsDirReadOne,	EPrePostIntercept));
sl@0: 	User::LeaveIfError(UnregisterIntercept(EFsDirReadPacked,EPrePostIntercept));
sl@0: 
sl@0: 
sl@0: 	_LOG(_L("Template Plugin: Disabled intercepts."));
sl@0:     
sl@0: 	iInterceptsEnabled = EFalse;
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: Handle requests
sl@0: @internalComponent
sl@0: */
sl@0: TInt CTemplatePlugin::DoRequestL(TFsPluginRequest& aRequest)
sl@0: 	{
sl@0: 	TInt err = KErrNone;
sl@0: 
sl@0: 	TInt function = aRequest.Function();
sl@0: 
sl@0: 	if (aRequest.IsPostOperation())
sl@0: 		{
sl@0: 		_LOG2(_L("CTemplatePlugin post intercept for function %d"), function);
sl@0: 		}
sl@0: 	else
sl@0: 		{
sl@0: 		_LOG2(_L("CTemplatePlugin pre intercept for function %d"), function);
sl@0: 		}
sl@0: 
sl@0: 	return err;
sl@0: 	}
sl@0: 
sl@0: 
sl@0: CFsPluginConn* CTemplatePlugin::NewPluginConnL()
sl@0: 	{
sl@0: 	return new(ELeave) CTemplatePluginConn();
sl@0: 	}
sl@0: 
sl@0: //Synchronous RPlugin::DoControl
sl@0: TInt CTemplatePlugin::FsPluginDoControlL(CFsPluginConnRequest& /*aRequest*/)
sl@0: 	{
sl@0: 	/*TInt function = aRequest.Function();
sl@0: 
sl@0: 	switch(function)
sl@0: 		{
sl@0: 		default:
sl@0: 			break;
sl@0: 		}
sl@0: 	*/
sl@0: 	return KErrNone;
sl@0: 	}
sl@0: 
sl@0: 
sl@0: TInt CTemplatePluginConn::DoControl(CFsPluginConnRequest& aRequest)
sl@0: 	{
sl@0: 	return ((CTemplatePlugin*)Plugin())->FsPluginDoControlL(aRequest);
sl@0: 	}
sl@0: 
sl@0: void CTemplatePluginConn::DoRequest(CFsPluginConnRequest& aRequest)
sl@0: 	{
sl@0: 	DoControl(aRequest);
sl@0: 	}
sl@0: 
sl@0: void CTemplatePluginConn::DoCancel(TInt /*aReqMask*/)
sl@0: 	{
sl@0: 	}
sl@0: 
sl@0: 
sl@0: 
sl@0: 
sl@0: 
sl@0: //factory functions
sl@0: 
sl@0: class CTemplatePluginFactory : public CFsPluginFactory
sl@0: 	{
sl@0: public:
sl@0: 	CTemplatePluginFactory();
sl@0: 	virtual TInt Install();			
sl@0: 	virtual CFsPlugin* NewPluginL();
sl@0: 	virtual CFsPlugin* NewPluginConnL();
sl@0: 	virtual TInt UniquePosition();
sl@0: 	};
sl@0: 
sl@0: /**
sl@0: Constructor for the plugin factory
sl@0: @internalComponent
sl@0: */
sl@0: CTemplatePluginFactory::CTemplatePluginFactory()
sl@0: 	{
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: Install function for the plugin factory
sl@0: @internalComponent
sl@0: */
sl@0: TInt CTemplatePluginFactory::Install()
sl@0: 	{
sl@0: 	SetSupportedDrives(KPluginSupportAllDrives);
sl@0: 	return(SetName(&KTemplatePluginName));
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: @internalComponent
sl@0: */
sl@0: TInt CTemplatePluginFactory::UniquePosition()
sl@0: 	{
sl@0: 	return(KTemplatePos);
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: Plugin factory function
sl@0: @internalComponent
sl@0: */
sl@0: CFsPlugin* CTemplatePluginFactory::NewPluginL()
sl@0: 
sl@0: 	{
sl@0: 	return CTemplatePlugin::NewL();
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: Plugin factory function
sl@0: @internalComponent
sl@0: */
sl@0: CFsPlugin* CTemplatePluginFactory::NewPluginConnL()
sl@0: 
sl@0: 	{
sl@0: 	return CTemplatePlugin::NewL();
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: Create a new Plugin
sl@0: @internalComponent
sl@0: */
sl@0: extern "C" {
sl@0: 
sl@0: EXPORT_C CFsPluginFactory* CreateFileSystem()
sl@0: 	{
sl@0: 	return(new CTemplatePluginFactory());
sl@0: 	}
sl@0: }
sl@0: