authenticationservices/authenticationserver/source/server/pluginobserver.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) 2008-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: 
*
*/


/**
 @file
 @internalComponent
 @released
*/


#include <e32debug.h>
#include <s32mem.h>
#include "authserver_impl.h"
#include "log.h"

using namespace AuthServer;

/**
  CPluginObserver registers for ECOM notification when new authentication plugins are added 
  or removed and updates the plugin manager accordingly. 
 
  */

/** 
  Constructs a new CPluginObserver object and puts it on the cleanup stack.
  */

CPluginObserver* CPluginObserver::NewLC(CPluginMgr& aPluginMgr)
	{
	CPluginObserver* self = new (ELeave) CPluginObserver(aPluginMgr);
	CleanupStack::PushL(self);
	self->ConstructL();
	return self;
	}

/** 
  Constructs a new CPluginObserver object.
  */

CPluginObserver* CPluginObserver::NewL(CPluginMgr& aPluginMgr)
	{
	CPluginObserver* self = CPluginObserver::NewLC(aPluginMgr);
	CleanupStack::Pop(self);
	return self;
	}

CPluginObserver::CPluginObserver(CPluginMgr& aPluginMgr) : CActive(EPriorityStandard), iPluginMgr(aPluginMgr)
	{
	
	}

CPluginObserver::~CPluginObserver()
	{
	Cancel();
		
	// Close our ECOM session
	if(iEcomSession)
		{
		iEcomSession->CancelNotifyOnChange(iStatus);
		iEcomSession->Close();
		REComSession::FinalClose();
		}
	}

void CPluginObserver::ConstructL()
	{
	// Add ourselves to the current active scheduler so we can get dynamic 
	// updates when authentication plugins are removed or new plugins are added
	CActiveScheduler::Add(this);
	
	iEcomSession = &REComSession::OpenL();
	
	// register for ECOM update notifications in case a new agent appears
	iEcomSession->NotifyOnChange(iStatus);
	SetActive();
	}
	
void CPluginObserver::DoCancel()
	{
	// Abort any update notification 
	iEcomSession->CancelNotifyOnChange(iStatus);
	}

void CPluginObserver::RunL()
	{
	// Leave if there has been an error
	User::LeaveIfError(iStatus.Int());
	
	// the ownership is with auth server, so dont delete it.
	iPluginMgr.BuildAuthPluginsListL();
	
	// request notification of any further changes
	iEcomSession->NotifyOnChange(iStatus);
	SetActive();
	}
	
TInt CPluginObserver::RunError(TInt aError)
    {
    _LIT(KAuthError, "Authserver Panic :");
    User::Panic(KAuthError, aError);
	    			
	return KErrNone;
	}