--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/TokenServer/ClientSrc/ftokenclient.cpp Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,131 @@
+/*
+* Copyright (c) 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: Client interface for granting other processes to token to access
+* particular files in app directory
+*
+*/
+
+
+
+#include "alf/ftokenclient.h"
+#include "ftokenconsts.h"
+
+EXPORT_C TInt RFTokenClient::Connect()
+ {
+ TInt err = KErrNone;
+ TFindServer serveFinder(FTOKEN_SERVER_NAME);
+ TFullName fullName;
+ if (serveFinder.Next(fullName) != KErrNone)
+ {
+ const TUidType serverUid(KNullUid,KNullUid,KServerUid3);
+
+ RProcess server;
+ err = server.Create(_L("Z:\\sys\\bin\\!ftokenserver.exe"),FTOKEN_SERVER_NAME,serverUid);
+ if (!err)
+ {
+ TRequestStatus stat;
+ server.Rendezvous(stat);
+ if (stat!=KRequestPending)
+ {
+ server.Kill(0); // abort startup
+ }
+ else
+ {
+ server.Resume(); // logon OK - start the server
+ }
+ User::WaitForRequest(stat); // wait for start or death
+ err = stat.Int();
+ }
+ }
+
+ if ( !err )
+ {
+ err = CreateSession(FTOKEN_SERVER_NAME,TVersion(1,1,1));
+ }
+
+ return err;
+ }
+
+EXPORT_C TInt RFTokenClient::GenerateToken(const TDesC& aFileName, const TUid& aConsumerUid, TDes8& aToken) const
+ {
+ TSecureId consumerUid(aConsumerUid);
+ return GenerateToken(aFileName, TSecurityPolicy(consumerUid), aToken);
+ }
+
+EXPORT_C TInt RFTokenClient::GenerateToken(const TDesC& aFileName, const TSecurityPolicy& aSecurityPolicy, TDes8& aToken) const
+ {
+ // unefficient, but this way we can make _easily_ sure that client is actually allowed to open a file
+ // Not sure if we were allowed to just change CEikonEnv's file server session to shared, so we could acutally save
+ // this extra session..
+ RFs fs;
+ TInt err = fs.Connect();
+ if (!err)
+ {
+ err = fs.ShareProtected();
+ if (!err)
+ {
+ RFile file;
+ err = file.Open(fs, aFileName, EFileShareReadersOnly); // Todo: check the correct mode
+ if (!err)
+ {
+ err = GenerateToken(file, aSecurityPolicy, aToken);
+ }
+ file.Close();
+ }
+ fs.Close();
+ }
+
+ return err;
+ //return SendReceive(EGenerateTokenBasedOnName, TIpcArgs(&aFileName, aAllowedProcessUid.iUid, &aToken));
+ }
+
+EXPORT_C TInt RFTokenClient::GenerateToken(const RFile& aOpenFile, const TUid& aConsumerUid,TDes8& aToken) const
+ {
+ TSecureId consumerUid(aConsumerUid);
+ return GenerateToken(aOpenFile, TSecurityPolicy(consumerUid), aToken);
+ }
+
+EXPORT_C TInt RFTokenClient::GenerateToken(const RFile& aOpenFile, const TSecurityPolicy& aSecurityPolicy,TDes8& aToken) const
+ {
+ TPtrC8 ptr = aSecurityPolicy.Package();
+ TIpcArgs ipcArgs(&ptr, &aToken, 0, 0);
+ TInt ret = aOpenFile.TransferToServer(ipcArgs, 2, 3);
+ if (ret == KErrNone)
+ {
+ ret = SendReceive(EGenerateTokenBasedOnOpenHandle, ipcArgs);
+ }
+ return ret;
+ }
+
+EXPORT_C TInt RFTokenClient::GenerateToken(const TDesC8& aExistingToken, const TUid& aConsumerUid,TDes8& aToken) const
+ {
+ TSecureId consumerUid(aConsumerUid);
+ return GenerateToken(aExistingToken, TSecurityPolicy(consumerUid), aToken);
+ }
+
+EXPORT_C TInt RFTokenClient::GenerateToken(const TDesC8& aExistingToken, const TSecurityPolicy& aSecurityPolicy,TDes8& aToken) const
+ {
+ TPtrC8 ptr = aSecurityPolicy.Package();
+ return SendReceive(EGenerateTokenBasedOnAnotherToken, TIpcArgs(&ptr, &aExistingToken, &aToken));
+ }
+
+EXPORT_C TInt RFTokenClient::OpenFileForToken(RFile& aHandle, const TDesC8& aToken) const
+ {
+ TInt serverhandle = 0;
+ TPckg<TInt> buf(serverhandle);
+ TInt rfsHandle = SendReceive(EOpenHandleForToken, TIpcArgs(&buf, &aToken));
+ return aHandle.AdoptFromServer(rfsHandle, serverhandle);
+ }
+
+// end of file