uiaccelerator_plat/alf_extension_api/inc/alf/ftokenclient.h
changeset 0 15bf7259bb7c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiaccelerator_plat/alf_extension_api/inc/alf/ftokenclient.h	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,165 @@
+/*
+* Copyright (c) 2007 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:   Interface for granting a permission and for using files from 
+*                apps' private cage. No capabilities required 
+*
+*/
+
+
+
+#ifndef __FTOKENCLIENT_H__
+#define __FTOKENCLIENT_H__
+
+#include <e32std.h>
+#include <f32file.h>
+
+const TInt KMaxTokenLenght(8);
+
+/**
+* Utility class for for giving another process permission (token) to
+* access on demand a specific file from another process. The class
+* permits process (provider) to grant another process (consumer) ability to
+* open, read and close the named file on demand as the consumer so wishes, 
+* without repeated interaction between provider and consumer. 
+*
+* Tokens are valid as long the session used for grating the permission is connected 
+* 
+* @code
+*
+*    // Provider should usually instantiate session as member variable as session lifetime 
+*    // defines the tokens lifetime also, consumer may generate session on-demand based as well
+*
+*    RFTokenClient client;
+*    User::LeaveIfError(client.Connect());
+*    CleanupClosePushL(client);
+*
+*   // Provider, generating token based on known uid (made up uid in this example ;)
+*
+*   TInt64 token = 0;
+*   TPckg<TInt64> tokenbuf(token); 
+*    
+*   _LIT(KMYPRIVATEFILE, "z:\\private\\1028289F\\focus.png"); // full path with drive letter must be given
+*   
+*   TSecureId consumerSecId(0x10282845); 
+*
+*   User::LeaveIfError(iClient.GenerateToken(),TSecurityPolicy(consumerSecId), tokenbuf));
+*
+*   // Generating token based on existing token
+*   // Nb. Consumer may ensure extended lifetime for token by "cloning" it
+*   // (i.e. make sure that token remains valid even the session of orifial provider
+*   // is closed )  
+*
+*   TInt64 token2 = 0;
+*   TPckg<TInt64> tokenbuf2(token2); 
+*
+*    User::LeaveIfError(client.GenerateToken(tokenbuf, Application()->AppDllUid(), tokenbuf2));
+*
+*  // Consumer, opening file based on token
+*
+*   RFile file;
+*   User::LeaveIfError(client.OpenFileForToken(file, tokenbuf2));
+*    
+* @endcode
+*/    
+NONSHARABLE_CLASS(RFTokenClient): public RSessionBase
+    {
+public:
+    /**
+	* Connects to server. If the server does not exist, starts the server .
+	*/
+    IMPORT_C TInt Connect();
+    
+    /* Methods for granting permission */
+    
+    /**
+	* Generates token based on filename. Method is synchronous.
+	*
+	* @param aFileName          Filename of file to be shared
+	* @param aSecurityPolicy    Security policy that a process that process must fullfill to gain access to file 
+	* @param aToken             Generated token, 64-bit integer as a 8-bit descriptor              
+	* @return                   Any system wide error code, KErrNone on success
+	*/
+    IMPORT_C TInt GenerateToken(const TDesC& aFileName, const TSecurityPolicy& aSecurityPolicy, TDes8& aToken) const;    
+    
+    /**
+	* Generates token based on open file handle. Method is synchronous.
+	*
+	* @param aOpenFile          Open filehandle, can reside other process gage as well
+	* @param aSecurityPolicy    Security policy that a process that process must fullfill to gain access to file 
+	* @param aToken             Generated token, 64-bit integer as a 8-bit descriptor              
+	* @return                   Any system wide error code, KErrNone on success
+	*/
+    IMPORT_C TInt GenerateToken(const RFile& aOpenFile, const TSecurityPolicy& aSecurityPolicy, TDes8& aToken) const;    
+    
+    /**
+	* Generates token based on existing token. Method is synchronous.
+	*
+	* @param aExistingToken     Token that is valid inside this process (SecId matches)
+	* @param aSecurityPolicy    Security policy that a process that process must fullfill to gain access to file 
+	* @param aToken             Generated token, 64-bit integer as a 8-bit descriptor              
+	* @return                   Any system wide error code, KErrNone on success
+	*/
+    IMPORT_C TInt GenerateToken(const TDesC8& aExistingToken, const TSecurityPolicy& aSecurityPolicy, TDes8& aToken) const;    
+
+    
+    /* Methods for granting permission, for convenience */
+    
+    /**
+	* Generates token based on filename. Method is synchronous.
+	*
+	* @param aFileName          Filename of file to be shared
+	* @param aConsumerUid       Secure id of process that gains access to file 
+	* @param aToken             Generated token, 64-bit integer as a 8-bit descriptor              
+	* @return                   Any system wide error code, KErrNone on success
+	*/
+    IMPORT_C TInt GenerateToken(const TDesC& aFileName, const TUid& aConsumerUid, TDes8& aToken) const;
+    
+    /**
+	* Generates token based on open file handle. Method is synchronous.
+	*
+	* @param aOpenFile          Open filehandle, can reside other process gage as well
+	* @param aConsumerUid       Secure id of process that gains access to file 
+	* @param aToken             Generated token, 64-bit integer as a 8-bit descriptor              
+	* @return                   Any system wide error code, KErrNone on success
+	*/
+    IMPORT_C TInt GenerateToken(const RFile& aOpenFile, const TUid& aConsumerUid, TDes8& aToken) const;    
+    
+    /**
+	* Generates token based on existing token. Method is synchronous.
+	*
+	* @param aExistingToken     Token that is valid inside this process (SecId matches)
+	* @param aConsumerUid       Secure id of process that gains access to file 
+	* @param aToken             Generated token, 64-bit integer as a 8-bit descriptor              
+	* @return                   Any system wide error code, KErrNone on success
+	*/
+    IMPORT_C TInt GenerateToken(const TDesC8& aExistingToken, const TUid& aConsumerUid, TDes8& aToken) const;    
+    
+    
+    /* Methods for accessing file based on token */
+    
+    /**
+	* Opens filehandle based on token. Method is synchronous.
+	*
+	* @param aHandle     Unattached handle 
+	* @param aToken      Token that is valid in for this process              
+	* @return            Any system wide error code, KErrNone on success
+	*/
+    IMPORT_C TInt OpenFileForToken(RFile& aHandle, const TDesC8& aToken) const;
+
+private:
+    TInt iSpare1;
+    TInt iSpare2;
+    };
+    
+#endif
\ No newline at end of file