diff -r 000000000000 -r 15bf7259bb7c uiaccelerator_plat/alf_extension_api/inc/alf/ftokenclient.h --- /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 +#include + +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 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 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