diff -r 000000000000 -r 2e3d3ce01487 contextframework/cfw/inc/cfserver/CFEngine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contextframework/cfw/inc/cfserver/CFEngine.h Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,354 @@ +/* +* Copyright (c) 2002-2008 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: CCFEngine class declaration. +* +*/ + + +#ifndef C_CFENGINE_H +#define C_CFENGINE_H + + +#include +#include + +#include "cfcontextobject.h" +#include "CFServSession.h" +#include "cfextendedcontextinterface.h" +#include "CFActionInterface.h" +#include "CFScriptInterface.h" +#include "cfactionhandler.h" +#include "cfcommon.h" +#include "CFSecurityChecker.h" +#include "cfcontextsourcecommandinterface.h" + +class CCFContextManager; +class CCFStarter; +class CCFEComObserver; +class CCFServSession; +class CCFContextSourceManager; +class CCFScriptHandler; +class CCFActivator; +class MCFActionSubscriptionListener; +class CCFAsyncCmdQueue; +class CCFScriptEvent; + + +/** +* Context Framework Engine class. +*/ +NONSHARABLE_CLASS( CCFEngine ): public CBase, + public MCFExtendedContextInterface, + public MCFActionInterface, + public MCFScriptInterface, + public MCFActionHandler, + public MCFContextSourceCommand + { + public: // New methods + + static CCFEngine* NewL( MCFSecurityChecker& aSecurityChecker ); + static CCFEngine* NewLC( MCFSecurityChecker& aSecurityChecker ); + + ~CCFEngine(); + + private: // From base classes + + // @see MCFContextInterface + TInt DefineContext( const TDesC& aContextSource, + const TDesC& aContextType, + const TSecurityPolicy& aReadWritePolicy ); + + // @see MCFContextInterface + TInt DefineContext( const TDesC& aContextSource, + const TDesC& aContextType, + const TSecurityPolicy& aReadWritePolicy, + MCFContextSource& aOwner ); + + // @see MCFContextInterface + TInt DefineContext( const TDesC& aContextSource, + const TDesC& aContextType, + const TSecurityPolicy& aReadPolicy, + const TSecurityPolicy& aWritePolicy, + MCFContextSource& aOwner ); + + // @see MCFContextInterface + TInt PublishContext( CCFContextObject& aContext, + RThread& aClientThread ); + + // @see MCFContextInterface + TInt PublishContext( CCFContextObject& aContext, + CCFContextDataObject& aData, + RThread& aClientThread ); + + // @see MCFContextInterface + TInt SubscribeContext( CCFContextSubscription* aSubscription, + MCFContextSubscriptionListener* aListener, + RThread& aClientThread ); + + // @see MCFContextInterface + void UnsubscribeContext( CCFContextSubscription& aSubscription, + MCFContextSubscriptionListener& aListener ); + + // @see MCFContextInterface + void UnsubscribeContexts( + MCFContextSubscriptionListener& aObserver ); + + // @see MCFContextInterface + TInt RequestContext( + RContextObjectArray& aResultBuffer, + CCFContextQuery& aContextQuery, + RThread& aClientThread ); + + // @see MCFContextInterface + TInt GetSecurityPolicy( const TDesC& aContextSource, + const TDesC& aContextType, + TSecurityPolicy& aPolicy ); + + // @see MCFExtendedContextInterface + TInt GetReadSecurityPolicy( const TDesC& aContextSource, + const TDesC& aContextType, + TSecurityPolicy& aPolicy ); + + // @see MCFExtendedContextInterface + TInt GetWriteSecurityPolicy( const TDesC& aContextSource, + const TDesC& aContextType, + TSecurityPolicy& aPolicy ); + + // @see MCFExtendedContextInterface + TInt DefineContext( const TDesC& aContextSource, + const TDesC& aContextType, + const TSecurityPolicy& aReadPolicy, + const TSecurityPolicy& aWritePolicy, + MCFContextSource* aPublisher, const TUid& aPublisherUid ); + + // @see MCFExtendedContextInterface + void DeregisterPublisher( MCFContextSource& aPublisher ); + + // @see MCFExtendedContextInterface + TInt InstallContextSourceSetting( RFile& aSettingFile, + const TUid& aContextSourceUid, + RThread& aClientThread ); + + // @see MCFExtendedContextInterface + TInt UninstallContextSourceSetting( const TDesC& aSettingFilename, + const TUid& aContextSourceUid, + RThread& aClientThread ); + + // @see MCFExtendedContextInterface + TInt UninstallContextSourceSettings( const TUid& aContextSourceUid, + RThread& aClientThread ); + + // @see MCFExtendedContextInterface + TInt PublishContextFromAction( CCFContextObject& aContext, + TBool aAutoDefine ); + + // @see MCFActionInterface + TInt DefineAction( const TDesC& aActionIdentifier, + const TSecurityPolicy& aSecurityPolicy, + const TUid& aOwnerUid, + MCFActionOwner* aOwner ); + + // @see MCFActionInterface + TInt SubscribeAction( + CCFActionSubscription* aActionSubscription, + MCFActionSubscriptionListener* aListener, + RThread& aClientThread ); + + // @see MCFActionInterface + void UnsubscribeAction( CCFActionSubscription& aActionSubscription, + MCFActionSubscriptionListener& aListener ); + + // @see MCFActionInterface + void UnsubscribeActions( MCFActionSubscriptionListener& aListener ); + + // @see MCFActionInterface + void DeregisterActions( MCFActionOwner* aOwner ); + + // @see MCFScriptInterface + TInt RegisterScript( const TDesC& aName, + const TDesC8& aScript, + TInt& aScriptId, + const RThread& aClientThread, + MCFScriptOwner& aOwner ); + + // @see MCFScriptInterface + TInt DeregisterScript( TInt aScriptId, + const RThread& aClientThread ); + + // @see MCFScriptInterface + TInt DeregisterScript( const TDesC& aScriptName, + const RThread& aClientThread ); + + // @see MCFScriptInterface + TInt DeregisterScripts( const RThread& aClientThread ); + + // @see MCFScriptInterface + void DeregisterScriptOwner( MCFScriptOwner& aOwner ); + + // @see MCFScriptInterface + TInt SaveScript( const TDesC8& aScript, + TInt aScriptId, + const RThread& aClient ); + + // @see MCFScriptInterface + TInt DeleteScript( const TDesC& aScriptName, + RThread& aClientThread ); + + // @see MCFScriptInterface + TInt DeleteScripts( RThread& aClientThread ); + + // @see MCFScriptInterface + TBool AlreadyExists( const TDesC& aScriptName, + const RThread& aClient, + TInt& aScriptId ) const; + + // @see MCFScriptInterface + void CleanupPersistentDataByName( const TDesC& aScriptName, + const RThread& aClientThread ); + + // @see MCFScriptInterface + void CleanupPersistentDataByUid( const RThread& aClient ); + + // @see MCFScriptInterface + TInt UpdateScript( TInt aScriptID, + const RThread& aOwnerThread, + const TDesC8& aUpdatedScript, + MCFScriptOwner& aOwner ); + + // @see MCFScriptInterface + TInt RestoreRomScript( TInt aScriptId, const RThread& aClient ); + + // @see MCFScriptInterface + TInt IsUpgradeAllowed( const TDesC& aName, + const TDesC8& aScript, + const RThread& aOwnerThread ); + + // @see MCFActionHandler + void FireActionL( CCFScriptEvent* aEvent ); + + // From MCFActionHandler + void FireActionL( const CCFContextSourceCommand& aCommand ); + + // @see MCFActionHandler + TInt GetActionSecurityPolicy( const TDesC& aActionIdentifier, + TSecurityPolicy& aPolicy ); + + // @see MCFContextSourceCommand + void HandleCommandL( const CCFContextSourceCommand& aCommand ); + + private: // New functions + + /** + * Appends publish context into asynchronous command queue if the + * context publication is valid. + * + * Leaves with: + * - KErrNotFound, context not defined + * - KErrAccessDenied, insufficient capabilities to write the context + * - any other system-wide error code + * + * @since S60 5.0 + * @param aContext Context object to be published. + * @param aClientThread Handle to the current client. + * @param aData Data object associated with the context. + * @return None. + */ + void EnqueuePublishContextL( CCFContextObject& aContext, + RThread& aClientThread, + CCFContextDataObject* aData = NULL ); + + /** + * Adds unsubscribe context cleanup into front of asynchronous command + * queue. + * + * Leaves with: + * - KErrNoMemory, no memory to create the command + * - any other system-wide error code + * + * @since S60 5.0 + * @return None. + */ + void EnqueueUnsubscribeContextCleanupL(); + + /** + * Appends fire action into asynchronous command queue. + * + * Leaves with: + * - KErrNoMemory, no memory to create the command + * - any other system-wide error code + * + * @since S60 5.0 + * @param aActionHandler Action handler for firing the action. + * @param aEvent The action (script event). Ownership is transferred. + * @return None. + */ + void EnqueueFireActionL( MCFActionHandler& aActionHandler, + CCFScriptEvent* aEvent ); + + /** + * Appends source command action into asynchronous command queue. + * + * Leaves with: + * - KErrNoMemory, no memory to create the command + * - any other system-wide error code + * + * @since S60 5.0 + * @param aSourceCommandHandler Source command handler. + * @param aCommand The context source command action. + * @return None. + */ + void EnqueueSourceCommandActionL( + MCFContextSourceCommand& aSourceCommandHandler, + const CCFContextSourceCommand& aCommand ); + + private: + + void ConstructL(); + CCFEngine( MCFSecurityChecker& aSecurityChecker ); + + private: // Data + + // Own: CF starter + CCFStarter* iStarter; + + // Own: ECom observer + CCFEComObserver* iEComObserver; + + // Own: Data manager + CCFContextManager* iContextManager; + + // Own: Context source manager + CCFContextSourceManager* iContextSourceManager; + + // Own: Script Engine + CCFScriptHandler* iScriptEngine; + + // Own: Activator engine + CCFActivator* iActivatorEngine; + + // Own: File server session. + // Keep this as the only session for whole CF! + RFs iFs; + + // CFSecurityChecker + MCFSecurityChecker* iSecurityChecker; + + // Maximum data object size + TInt iMaxDataObjectSize; + + // Own: Queue for asynchronous commands. + CCFAsyncCmdQueue* iAsyncCmdQueue; + }; + +#endif // C_CFENGINE_H