--- a/authenticationservices/authenticationserver/source/client/authclient.cpp Tue Aug 31 17:00:08 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,774 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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:
-* authclient - exported authentication client session implementation
-*
-*/
-
-
-/**
- @file
-*/
-
-#include <e32debug.h>
-#include <s32mem.h>
-#include "authclient_impl.h"
-#include "authrepository.h"
-
-namespace AuthServer
-{
-
-/**
- Helper function for Authenticate. This allocates
- a buffer to hold the externalized authentication expression.
-
- @param aExpr Expression to externalize.
- @return Descriptor containing externalized expression.
- The memory must be freed by the caller.
- */
-HBufC8* ExternalizeExpressionL(const CAuthExpression* aExpr)
- {
- AuthServer::TSizeStream ss;
- RWriteStream ws(&ss);
- aExpr->ExternalizeL(ws);
-
- TInt len = ss.Size();
- HBufC8* buf = HBufC8::NewLC(len);
- TPtr8 bufDes(buf->Des());
-
- RDesWriteStream dws(bufDes);
- aExpr->ExternalizeL(dws);
- dws.CommitL();
-
- CleanupStack::Pop(buf);
- return buf;
- }
-}
-
-using namespace AuthServer;
-
-
-/**
- * Connect to the server, attempt to start it if it is not yet running
- *
- * @return KErrNone if successful or an error code
- */
-EXPORT_C TInt RAuthClient::Connect()
- {
- const TUidType serverUid(KNullUid, KNullUid, KAuthServerSecureId);
-
- TInt err = RScsClientBase::Connect(AuthServer::KAuthServerName, TVersion(1, 0, 0),
- AuthServer::KAuthServerImg, serverUid );
- return err;
- }
-
-EXPORT_C RAuthClient::RAuthClient() :
- RScsClientBase(), iAsyncResponseDecoder(0)
- {
-
- }
-
-
-
-/**
- Authenticate the current device holder using a specified combination of
- authentication methods. The ownership of the heap allocated CIdentity
- object is passed to the caller. Requesting a user specific key
- requires ReadUserData capability.
-
- @capability None/ReadUserData
-
- @param aExpression An authentication expression specifying which
- combination of methods to use to authenticate the device holder.
-
- @param aTimeout If an authentication has previously been performed
- within this period then a cached identity is returned.
-
- @param aClientSpecificKey If this value is true then the key returned
- by this server will be unique to the calling client. This is achieved
- by combining the identity protection key with the client process UID.
- If this value is set to false then the call requires ReadUserData.
-
- @param aWithString If this value is true then the identity object returned
- by the server will contain the identities string. If this value is set to
- true then the call requires ReadUserData.
-
- @return CIdentity object corresponding to the authenticated device
- holder. It is possible for the identity to be 'unknown'.
-
- @leave KErrServerTerminated, if the server no longer present
- @leave KErrServerBusy, if the request cannot be handled at this time.
- @leave KErrNoMemory, if there is insufficient memory available.
- @leave KErrPermissionDenied, if the caller has insufficient capabilities.
- @leave ... One of the AuthServer error codes defined in
- auth_srv_errs.h or one of the system-wide error codes.
- **/
-EXPORT_C CIdentity* RAuthClient::AuthenticateL(
- const CAuthExpression& aExpression,
- TTimeIntervalSeconds aTimeout,
- TBool aClientSpecificKey,
- TBool aWithString)
- {
- TUid clientSid = {0};
-
- CIdentity* identity = AuthenticateL(aExpression, aTimeout,
- aClientSpecificKey, clientSid,
- aWithString, KNullDesC());
-
- return identity;
-
- }
-
-
-
-/**
- Authenticate the current device holder using a specified combination of
- authentication methods. The ownership of the heap allocated CIdentity
- object is passed to the caller. Requesting a user specific key
- requires ReadUserData capability.
-
- @capability None/ReadUserData
-
- @param aExpression An authentication expression specifying which
- combination of methods to use to authenticate the device holder.
-
- @param aTimeout If an authentication has previously been performed
- within this period then a cached identity is returned.
-
- @param aClientSpecificKey If this value is true then the key returned
- by this server will be unique to the calling client. This is achieved
- by combining the identity protection key with the client process UID.
- If this value is set to false then the call requires ReadUserData.
-
- @param aWithString If this value is true then the identity object returned
- by the server will contain the identities string. If this value is set to
- true then the call requires ReadUserData.
-
- @param aIdentityResult The returned identity will be placed in this
- parameter when the asynchronous request completes.
-
- @param aStatus The request status for this asynchronous request.
-
- @leave KErrServerTerminated, if the server no longer present
- @leave KErrServerBusy, if the request cannot be handled at this time.
- @leave KErrNoMemory, if there is insufficient memory available.
- @leave KErrPermissionDenied, if the caller has insufficient capabilities.
- @leave ... One of the AuthServer error codes defined in
- auth_srv_errs.h or one of the system-wide error codes.
-
- **/
-EXPORT_C void RAuthClient::AuthenticateL(
- const CAuthExpression& aExpression,
- TTimeIntervalSeconds aTimeout,
- TBool aClientSpecificKey,
- TBool aWithString,
- CIdentity*& aIdentityResult,
- TRequestStatus& aStatus)
- {
- TUid clientSid = {0};
- AuthenticateL(aExpression, aTimeout, aClientSpecificKey,
- clientSid, aWithString, KNullDesC(),
- aIdentityResult, aStatus);
-
- }
-
-
-/**
- Authenticate the current device holder using a specified combination of
- authentication methods. The ownership of the heap allocated CIdentity
- object is passed to the caller. Requesting a user specific key requires
- ReadUserData capability.
-
- @capability None/ReadUserData
-
- @param aAuthStrength Descriptor specifying the authentication strength,
- which inturn maps to a combination of methods to be used to authenticate
- the device holder.
-
- @param aTimeout If an authentication has previously been performed
- within this period then a cached identity is returned.
-
- @param aClientSpecificKey If this value is true then the key returned
- by this server will be unique to the calling client. This is achieved
- by combining the identity protection key with the client process UID.
- If this value is set to false then the call requires ReadUserData.
-
- @param aClientSid Sid of the client application from where the authentication
- request originated and is used to generate protection key.This value is ignored
- when aClientSpecificKey is set to false. If aClientSid is non-zero and is not
- the calling application's sid, then the call requires ReadUserData.
-
- @param aWithString If this value is true then the identity object returned
- by the server will contain the identities string. If this value is set to
- true then the call requires ReadUserData.
-
- @param aClientMessage A displayable text string parameter for authentication
- requests.It shall be passed to plug-ins to display to the users.
-
- @return the CIdentity object corresponding to the authenticated device
- holder. It is possible for the identity to be 'unknown'.
-
- @leave KErrServerTerminated, if the server no longer present
- @leave KErrServerBusy, if the request cannot be handled at this time.
- @leave KErrNoMemory, if there is insufficient memory available.
- @leave KErrPermissionDenied, if the caller has insufficient capabilities.
- @leave ... One of the AuthServer error codes defined in
- auth_srv_errs.h or one of the system-wide error codes.
-
- **/
-
-EXPORT_C CIdentity* RAuthClient::AuthenticateL(
- const CAuthExpression& aAuthExpression,
- TTimeIntervalSeconds aTimeout,
- TBool aClientSpecificKey,
- TUid aClientSid,
- TBool aWithString,
- const TDesC& aClientMessage)
- {
-
- //Create a flat buffer
- CBufFlat* flatBuffer = CBufFlat::NewL(KDefaultBufferSize);
- CleanupStack::PushL(flatBuffer);
-
- //Initialize the CAuthParams object
- CAuthParams* params = CAuthParams::NewL(aTimeout,
- aClientSpecificKey,
- aClientSid,
- aWithString,
- aClientMessage);
- CleanupStack::PushL(params);
- //Externalize params
- RBufWriteStream stream(*flatBuffer);
- CleanupClosePushL(stream);
- params->ExternalizeL(stream);
- CleanupStack::PopAndDestroy(2, params);
-
- HBufC8* paramsBuffer = HBufC8::NewLC(flatBuffer->Size());
- TPtr8 paramsPtr(paramsBuffer->Des());
- flatBuffer->Read(0, paramsPtr, flatBuffer->Size());
-
- //Externalize the expression
- HBufC8* exprBuf = ExternalizeExpressionL(&aAuthExpression);
- CleanupStack::PushL(exprBuf);
-
- // allocate buffer for identity result
- HBufC8* identityResultbuf = HBufC8::NewLC(KDefaultBufferSize);
- TPtr8 bufDes(identityResultbuf->Des());
-
- TIpcArgs args(exprBuf, ¶msPtr, &bufDes);
- User::LeaveIfError(CallSessionFunction(EAuthenticate, args));
-
-
-
- RDesReadStream readStream(*identityResultbuf);
- CIdentity* identity = CIdentity::InternalizeL(readStream);
-
- CleanupStack::PopAndDestroy(4,flatBuffer);//identityResultbuf, exprBuf,
- //paramsBuffer, flatBuffer
- return identity;
- }
-
-/**
- Authenticate the current device holder using a specified combination of
- authentication methods. The ownership of the heap allocated CIdentity
- object is passed to the caller. Requesting a user specific key requires
- ReadUserData capability.
-
- @capability None/ReadUserData
-
- @param aAuthStrength Descriptor specifying the authentication strength,
- which inturn maps to a combination of methods to be used to authenticate the device holder.
-
- @param aTimeout If an authentication has previously been performed
- within this period then a cached identity is returned.
-
- @param aClientSpecificKey If this value is true then the key returned
- by this server will be unique to the calling client. This is achieved
- by combining the identity protection key with the client process UID.
- If this value is set to false then the call requires ReadUserData.
-
- @param aClientSid Sid of the client application from where the authentication
- request originated and is used to generate protection key.This value is ignored
- when aClientSpecificKey is set to false. If aClientSid is non-zero and is not
- the calling application's sid, then the call requires ReadUserData.
-
- @param aWithString If this value is true then the identity object returned
- by the server will contain the identities string. If this value is set to
- true then the call requires ReadUserData.
-
- @param aClientMessage A displayable text string parameter for authentication
- requests.It shall be passed to plug-ins to display to the users.
-
- @param aIdentityResult The returned identity will be placed in this
- parameter when the asynchronous request completes.
-
- @param aStatus The request status for this asynchronous request.
-
- @leave KErrServerTerminated, if the server no longer present
- @leave KErrServerBusy, if the request cannot be handled at this time.
- @leave KErrNoMemory, if there is insufficient memory available.
- @leave KErrPermissionDenied, if the caller has insufficient capabilities.
- @leave ... One of the AuthServer error codes defined in
- auth_srv_errs.h or one of the system-wide error codes.
-
- **/
-
-EXPORT_C void RAuthClient::AuthenticateL(
- const CAuthExpression& aExpression,
- TTimeIntervalSeconds aTimeout,
- TBool aClientSpecificKey,
- TUid aClientSid,
- TBool aWithString,
- const TDesC& aClientMessage,
- CIdentity*& aIdentityResult,
- TRequestStatus& aStatus
- )
- {
-
- CheckAsyncDecoderL();
- iAsyncResponseDecoder->AuthenticateL(aExpression,
- aTimeout,
- aClientSpecificKey,
- aClientSid,
- aWithString,
- aClientMessage,
- aIdentityResult,
- aStatus);
-
-
- }
-
-/**
- * creates the async decoder if it's not already been created.
- */
-void RAuthClient::CheckAsyncDecoderL()
- {
- if (iAsyncResponseDecoder == 0)
- {
- iAsyncResponseDecoder = new (ELeave) CAsyncResponseDecoder(*this);
- }
- }
-
-
-
-
-/**
- * Retrieves all plugin descriptions.
- *
- * @param aPluginList will be filled with the full list of plugins available on the device.
- *
- * @leave KErrServerTerminated, if the server no longer present
- * @leave KErrServerBusy, if the request cannot be handled at this time.
- * @leave KErrNoMemory, if there is insufficient memory available.
- **/
-EXPORT_C void RAuthClient::PluginsL(RPluginDescriptions& aPluginList)
- {
- HBufC8* buffer = SendReceiveBufferLC(EPlugins);
- // create a stream based on the buffer
- RDesReadStream stream(*buffer);
- CleanupClosePushL(stream);
-
- // reassemble the array from the stream
- InternalizePointerArrayL(aPluginList, stream);
-
- CleanupStack::PopAndDestroy(2, buffer);// buffer, stream
- }
-
-/**
- * @param aPluginList the list of active plugins available on the device.
- *
- * @leave KErrServerTerminated, if the server no longer present
- * @leave KErrServerBusy, if the request cannot be handled at this time.
- * @leave KErrNoMemory, if there is insufficient memory available.
- **/
-EXPORT_C void RAuthClient::ActivePluginsL(RPluginDescriptions& aPluginList)
- {
- HBufC8* buffer = SendReceiveBufferLC(EActivePlugins);
- // create a stream based on the buffer
- RDesReadStream stream(*buffer);
- CleanupClosePushL(stream);
-
- // reassemble the array from the stream
- InternalizePointerArrayL(aPluginList, stream);
-
- CleanupStack::PopAndDestroy(2, buffer);// buffer, stream
- }
-
-/**
- *
- * Retrieves plugin descriptions for plugins matching the specified
- * type.
- *
- * @param aType the plugin type for which the method should return
- * the list of plugins.
- *
- * @param aPluginList the list of plugins with the specified type available
- * on the device.
- *
- * @leave KErrServerTerminated, if the server no longer present
- * @leave KErrServerBusy, if the request cannot be handled at this time.
- * @leave KErrNoMemory, if there is insufficient memory available.
- *
- * @see TAuthPluginType
- **/
-EXPORT_C void RAuthClient::PluginsOfTypeL(
- TAuthPluginType aType,
- RPluginDescriptions& aPluginList)
- {
- TIpcArgs args(TIpcArgs::ENothing, aType);
- HBufC8* buffer = SendReceiveBufferLC(EPluginsByType, args);
- // create a stream based on the buffer
- RDesReadStream stream(*buffer);
- CleanupClosePushL(stream);
-
- // reassemble the array from the stream
- InternalizePointerArrayL(aPluginList, stream);
-
- CleanupStack::PopAndDestroy(2, buffer);// buffer, stream
- }
-
-/**
- * Retrieves plugin descriptions for plugins matching the specified
- * training status.
- *
- * @param aStatus the training status for which the method should
- * return the list of plugins.
- *
- * @param aPluginList the list of plugins with the specified type available
- * on the device.
- *
- * @leave KErrServerTerminated, if the server no longer present
- * @leave KErrServerBusy, if the request cannot be handled at this time.
- * @leave KErrNoMemory, if there is insufficient memory available.
- *
- * @see TAuthTrainingStatus
- **/
-EXPORT_C void RAuthClient::PluginsWithTrainingStatusL(
- TAuthTrainingStatus aStatus,
- RPluginDescriptions& aPluginList)
- {
- TIpcArgs args(TIpcArgs::ENothing, aStatus);
- HBufC8* buffer = SendReceiveBufferLC(EPluginsByTraining, args);
- // create a stream based on the buffer
- RDesReadStream stream(*buffer);
- CleanupClosePushL(stream);
-
- // reassemble the array from the stream
- InternalizePointerArrayL(aPluginList, stream);
-
- CleanupStack::PopAndDestroy(2, buffer);// buffer, stream
- }
-
-/**
- * @param aIdList populated with the list of identities known by the
- * phone.
- *
- * @capability ReadDeviceData
- *
- * @leave KErrServerTerminated, if the server no longer present
- * @leave KErrServerBusy, if the request cannot be handled at this time.
- * @leave KErrNoMemory, if there is insufficient memory available.
- * @leave KErrPermissionDenied, if the caller has insufficient capabilities.
- **/
-EXPORT_C void RAuthClient::IdentitiesL(RIdentityIdArray& aIdList)
- {
- HBufC8* buffer = SendReceiveBufferLC(EIdentities);
- // create a stream based on the buffer
- RDesReadStream stream(*buffer);
- CleanupClosePushL(stream);
-
- // reassemble the array from the stream
- InternalizeArrayL(aIdList, stream);
-
- CleanupStack::PopAndDestroy(2, buffer);// buffer, stream
- }
-
-/**
- * @param aIdList populated with the list of identities and their strings
- * known by the phone.
- *
- * @capability ReadDeviceData
- * @capability ReadUserData
- *
- * @leave KErrServerTerminated, if the server no longer present
- * @leave KErrServerBusy, if the request cannot be handled at this time.
- * @leave KErrNoMemory, if there is insufficient memory available.
- * @leave KErrPermissionDenied, if the caller has insufficient capabilities.
- **/
-EXPORT_C void RAuthClient::IdentitiesWithStringL(RIdAndStringArray& aIdList)
- {
- HBufC8* buffer = SendReceiveBufferLC(EIdentitiesWithString);
- // create a stream based on the buffer
- RDesReadStream stream(*buffer);
- CleanupClosePushL(stream);
-
- // reassemble the array from the stream
- InternalizePointerArrayL(aIdList, stream);
-
- CleanupStack::PopAndDestroy(2, buffer);// buffer, stream
- }
-
-/**
- * @param aId the Id number of the identity for which to set the
- * string.
- *
- * @param aId the identity who's string to set.
- * @param aString the string to use
- *
- * @capability WriteUserData
- *
- * @leave KErrServerTerminated, if the server no longer present
- * @leave KErrServerBusy, if the request cannot be handled at this time.
- * @leave KErrNoMemory, if there is insufficient memory available.
- * @leave KErrPermissionDenied, if the caller has insufficient capabilities.
- * @leave KErrAuthServIdentityNotFound, if the id does not exist.
- **/
-EXPORT_C void RAuthClient::SetIdentityStringL(TIdentityId aId,
- const TDesC& aString)
- {
- TIpcArgs args(aId, &aString);
-
- User::LeaveIfError(CallSessionFunction(ESetIdentityString, args));
- }
-
-/**
- * Deauthenticates the current user. This means that clients requesting an
- * authentication will always cause a plug-in to be called regardless of
- * any timeout value specified.
- *
- * @leave KErrServerTerminated, if the server no longer present
- * @leave KErrServerBusy, if the request cannot be handled at this time.
- * @leave KErrNoMemory, if there is insufficient memory available.
- *
- **/
-EXPORT_C void RAuthClient::DeauthenticateL()
- {
- User::LeaveIfError(CallSessionFunction(EDeauthenticate));
- }
-
-/**
- * @param aId the Id number of the identity for which to return the
- * string.
- *
- * @return the string associated with the specified identity.
- *
- * @capability ReadUserData
- *
- * @leave KErrServerTerminated, if the server no longer present
- * @leave KErrServerBusy, if the request cannot be handled at this time.
- * @leave KErrNoMemory, if there is insufficient memory available.
- * @leave KErrPermissionDenied, if the caller has insufficient capabilities.
- * @leave KErrAuthServIdentityNotFound, if the id does not exist.
- **/
-EXPORT_C HBufC* RAuthClient::IdentityStringL(TIdentityId aId)
- {
- HBufC* buffer = HBufC::NewLC(KDefaultBufferSize);
- TPtr ptr = buffer->Des();
- User::LeaveIfError(CallSessionFunction(EIdentityString, TIpcArgs(&ptr, aId)));
- CleanupStack::Pop(buffer);
- return buffer;
- }
-
-
-/**
- */
-HBufC8* RAuthClient::SendReceiveBufferLC(TInt aMessage)
- {
- HBufC8* output = HBufC8::NewLC(KDefaultBufferSize);
-
- TPtr8 pOutput(output->Des());
-
- TInt result = CallSessionFunction(aMessage, TIpcArgs(&pOutput));
-
- if (result == KErrOverflow)
- {
- TInt sizeNeeded = 0;
- TPckg<TInt> sizeNeededPackage(sizeNeeded);
- sizeNeededPackage.Copy(*output);
-
- // Re-allocate buffer after reclaiming memory
- CleanupStack::PopAndDestroy(output);
- output = HBufC8::NewLC(sizeNeeded);
-
- TPtr8 pResizedOutput(output->Des());
-
- result=CallSessionFunction(aMessage, TIpcArgs(&pResizedOutput));
- }
- User::LeaveIfError(result);
- return output;
- }
-
-/**
- * aArgs[0] is set to the buffer to be sent/received
- */
-HBufC8* RAuthClient::SendReceiveBufferLC(
- TInt aMessage,
- TIpcArgs& aArgs)
- {
- HBufC8* output = HBufC8::NewLC(KDefaultBufferSize);
-
- TPtr8 pOutput(output->Des());
-
- aArgs.Set(0, &pOutput);
-
- TInt result = CallSessionFunction(aMessage, aArgs);
-
- if (result == KErrOverflow)
- {
- TInt sizeNeeded;
- TPckg<TInt> sizeNeededPackage(sizeNeeded);
- sizeNeededPackage.Copy(*output);
-
- // Re-allocate buffer
- CleanupStack::PopAndDestroy(output);
- output = HBufC8::NewLC(sizeNeeded);
-
- TPtr8 pResizedOutput(output->Des());
- aArgs.Set(0, &pResizedOutput);
- result=CallSessionFunction(aMessage, aArgs);
- }
- User::LeaveIfError(result);
- return output;
- }
-
-/**
- * @param aPluginType the type of plugin for which to return the preferred
- * plugin id
- *
- * @return the id of the preferred plugin for the specified type
- *
- * @leave KErrServerTerminated, if the server no longer present
- * @leave KErrServerBusy, if the request cannot be handled at this time.
- * @leave KErrNoMemory, if there is insufficient memory available.
- * @leave KErrPermissionDenied, if the caller has insufficient capabilities.
- **/
-EXPORT_C TPluginId RAuthClient::PreferredTypePluginL(TAuthPluginType aPluginType)
- {
- TPluginId id = KUnknownPluginId;
- TPckg<TPluginId> idPckg(id);
-
- User::LeaveIfError(CallSessionFunction(EGetAuthPreferences, TIpcArgs(aPluginType, &idPckg)));
-
- return id;
- }
-
-/**
- * Cancel any operation in progress.
- *
- * @return KErrNone, if the send operation is successful or no operation
- * is in effect.
- * @return KErrServerTerminated, if the server no longer present
- * @return KErrServerBusy, if the request cannot be handled at this time.
- * @return KErrNoMemory, if there is insufficient memory available.
- **/
-EXPORT_C TUint RAuthClient::Cancel()
- {
- CallSessionFunction(ECancel);
- if(iAsyncResponseDecoder)
- {
- iAsyncResponseDecoder->Cancel();
- }
-
- return KErrNone;
- }
-
-
-EXPORT_C void RAuthClient::Close()
- {
- delete iAsyncResponseDecoder;
- iAsyncResponseDecoder = 0;
-
- RScsClientBase::Close();
- }
-
-/**
- Lists the authentication aliases.
-
- @return An array of authentication strength aliases.
-
- @leave KErrServerTerminated, if the server no longer present
- @leave KErrServerBusy, if the request cannot be handled at this time.
- @leave KErrNoMemory, if there is insufficient memory available.
- @leave KErrPermissionDenied, if the caller has insufficient capabilities.
- **/
-
-EXPORT_C void RAuthClient::ListAuthAliasesL(RPointerArray<HBufC>& aAuthAliasesList)
- {
- HBufC8* buffer = SendReceiveBufferLC(EListAuthAliases);
-
- // create a stream based on the buffer
- RDesReadStream stream(*buffer);
- CleanupClosePushL(stream);
-
- // reassemble the array from the stream
- TInt strengthAliasCount = stream.ReadInt32L();
- for(TInt i = 0; i < strengthAliasCount; ++i)
- {
- HBufC* strengthAlias = HBufC::NewLC(stream, KMaxTInt);
- aAuthAliasesList.AppendL(strengthAlias);
- CleanupStack::Pop(strengthAlias);
- }
-
- CleanupStack::PopAndDestroy(2, buffer);// buffer, stream
- }
-
-/**
- Returns a CAuthExpression object from a free form expression
- which can be a combination of plugin Ids, plugin types and alias names.
- This can be used for calling the authentication APIs.
-
-
- @capability None
-
- @param aAuthString Descriptor specifying a free form expression
- which can be a combination of plugin Ids, plugin types and alias names.
-
-
- @return the CAuthExpression object which can be used to call the
- authentication APIs.
-
- @leave KErrServerTerminated, if the server no longer present
- @leave KErrServerBusy, if the request cannot be handled at this time.
- @leave KErrNoMemory, if there is insufficient memory available.
- @leave KErrPermissionDenied, if the caller has insufficient capabilities.
- @leave ... One of the AuthServer error codes defined in
- auth_srv_errs.h or one of the system-wide error codes.
-
- **/
-
-EXPORT_C CAuthExpression* RAuthClient::CreateAuthExpressionL(const TDesC& aAuthString) const
- {
- CAuthExpression* authExpr(0);
-
- if(aAuthString == KNullDesC)
- {
- authExpr = AuthExpr();
- return authExpr;
- }
- HBufC* buffer = HBufC::NewLC(KDefaultBufferSize);
- TPtr bufDes(buffer->Des());
-
- // get the string in combination of plugin ID and plugin type.
- User::LeaveIfError(CallSessionFunction(EResolveExpression, TIpcArgs(&bufDes, &aAuthString)));
-
- // create an auth expression from alias string.
- authExpr = CAuthExpressionImpl::CreateAuthExprObjectL(*buffer);
- CleanupStack::PopAndDestroy(buffer);
-
- return authExpr;
- }
-
-
-
-