authenticationservices/authenticationserver/source/server/authserversession.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 24 Nov 2009 09:06:03 +0200
changeset 29 ece3df019add
permissions -rw-r--r--
Revision: 200948 Kit: 200948

/*
* 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: 
* authserverserversession.cpp
* CAuthserverSession class implementation
*
*/


/**
 @file 
*/

#include "authserver_impl.h"
#include "log.h"

using namespace AuthServer;

void CAuthServerSession::PanicClient(const RMessagePtr2& aMessage,
									 TAuthServerPanic aPanic)
	{
	aMessage.Panic(KAuthServerShortName, aPanic);
	}

//
// 2nd phase construct for sessions - called by the CServer framework
//
void CAuthServerSession::CreateL()
	{
	iAuthServer =
	  static_cast<CAuthServer*>(const_cast<CServer2*>(CSession2::Server()));
	}
CAuthServerSession* CAuthServerSession::NewL(CAuthServer &aServer)
/**
	Factory function allocates new instance of CAuthServerSession.

	@return					New, initialized instance of CAuthServerSession
							which is owned by the caller.
 */
	{
	CAuthServerSession* self = new(ELeave) CAuthServerSession(aServer);
	CleanupStack::PushL(self);
	self->ConstructL();			// CScsSession implementation
	CleanupStack::Pop(self);
	return self;
	}

CAuthServerSession::CAuthServerSession(CAuthServer &aServer)
/**
	This private constructor prevents direct instantiation.
 */
 :	CScsSession(aServer)
	{
	// empty.
	}


CAuthServerSession::~CAuthServerSession()
	{
	}

//
// Handle a client request.
// Leaving is handled by CAuthServer::ServiceError() which reports
// the error code to the client
//
TBool CAuthServerSession::DoServiceL(TInt aFunction, const RMessage2& aMessage)
/**
	Implement CScsSession by handling the supplied message.

	Note the subsession creation command is automatically sent to
	DoCreateSubsessionL, and not this function.

	@param	aFunction		Function identifier without SCS code.
	@param	aMessage		Standard server-side handle to message.	 Not used.
 */
	{
	TAuthServerMessages func = static_cast<TAuthServerMessages>(aFunction);
	
	switch (func)
		{
    case EAuthenticate:
        iAuthServer->AuthenticateL(aMessage);
        break;
    case ECancel:
		iAuthServer->CancelL(aMessage);
		break;
	case EPlugins:
		iAuthServer->PluginsL(aMessage);
		break;
	case EActivePlugins:
		iAuthServer->ActivePluginsL(aMessage);
		break;
	case EPluginsByType:
		iAuthServer->PluginsByTypeL(aMessage);
		break;
	case EPluginsByTraining:
		iAuthServer->PluginsByTrainingL(aMessage);
		break;
	case EIdentities:
		iAuthServer->IdentitiesL(aMessage);
		break;
	case EIdentityString:
		iAuthServer->IdentityStringL(aMessage);
		break;
	case ESetIdentityString:
		iAuthServer->SetIdentityStringL(aMessage);
		break;
	case ERegisterIdentity:
		iAuthServer->RegisterIdentityL(aMessage);
		break;
	case ERemoveIdentity:
		iAuthServer->RemoveIdentityL(aMessage);
		break;
	case ETrainPlugin:
		iAuthServer->TrainPluginL(aMessage);
		break;
	case EForgetPlugin:
		iAuthServer->ForgetPluginL(aMessage); 
		break;
    case EDeauthenticate:
		iAuthServer->DeauthenticateL(aMessage);
		break;
	case EGetAuthPreferences:
		iAuthServer->PreferredTypePluginL(aMessage);
	    break;
	case ESetAuthPreferences:
		iAuthServer->SetPreferredTypePluginL(aMessage);
		break;
	case EIdentitiesWithString:
		iAuthServer->IdentitiesWithStringL(aMessage);
		break;
	case EListAuthAliases:
		iAuthServer->ListAuthAliasesL(aMessage);
		break;
	case EResolveExpression:
		iAuthServer->ResolveExpressionL(aMessage);
		break;
	case EResetIdentity:
	case EResetIdentityByType:
		iAuthServer->ResetIdentityL(aFunction, aMessage);
		break;
	case EResetIdentityByList:
		iAuthServer->ResetIdentityByListL(aMessage);
		break;
	default:
		PanicClient(aMessage,EPanicInvalidFunction);
		break;
		}
	return EFalse;
	}

//
// Handle an error from CAuthServerSession::ServiceL()
// A bad descriptor error implies a badly programmed client, so panic it;
// otherwise use the default handling (report the error to the client)
//
void CAuthServerSession::ServiceError(const RMessage2& aMessage, TInt aError)
	{
	TBool panicClient = ETrue;
	TAuthServerPanic cliPanicReason = EPanicCorruptDescriptor;	//Init
	
	switch (aError)
		{
	case KErrBadDescriptor:
		cliPanicReason = EPanicCorruptDescriptor;
		break;
	
	case KErrAuthServInvalidInternalizeExpr:
		cliPanicReason = EPanicBadExternalizedAuthExpr;
		break;
	case KErrAuthServNoSuchPlugin:
		cliPanicReason = EPanicNoSuchAuthPlugin;
		break;
	
	default:
		panicClient = EFalse;
		}
	DEBUG_PRINTF3(_L8("Error in CAuthServerSession %d, func %d"), aError, aMessage.Function());

	if (panicClient)
		PanicClient(aMessage, cliPanicReason);
	else
		CScsSession::ServiceError(aMessage, aError);
	}