diff -r 000000000000 -r 094583676ce7 PECengine/PresenceManager2/SrcReactAuth/CPEngReactAuthNotifierImp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PECengine/PresenceManager2/SrcReactAuth/CPEngReactAuthNotifierImp.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,273 @@ +/* +* Copyright (c) 2004 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: Notifier API to listen presence reactive authorization changes. +* +*/ + +// INCLUDE FILES +#include "CPEngNWSessionSlotID2Imp.h" +#include "CPEngReactAuthNotifierImp.h" +#include "CPEngNWSessionSlotEventEntry.h" +#include "GenObserverNotifyMediators.h" + +#include "CPEngNWSessionSlotStorageProxy.h" +#include "PEngListLibraryFactory.h" +#include "MPEngAuthorizationManager.h" +#include "TPEngGenArrayAdapter.h" +#include "MPEngAuthorizationRequest.h" +#include +#include + + + + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CPEngReactAuthNotifierImp::NewL() +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CPEngReactAuthNotifierImp* CPEngReactAuthNotifierImp::NewL( + CPEngReactAuthNotifier& aInterface, + TInt aPriority, + const CPEngNWSessionSlotID2& aNWSessionSlotID ) + { + CPEngReactAuthNotifierImp* self = + new ( ELeave ) CPEngReactAuthNotifierImp( aInterface, aPriority ); + CleanupStack::PushL( self ); + self->ConstructL( aNWSessionSlotID ); + CleanupStack::Pop( self ); + return self; + } + + + +// Destructor +CPEngReactAuthNotifierImp::~CPEngReactAuthNotifierImp() + { + iDying = ETrue; + Stop(); + if ( iAuthManager ) + { + iAuthManager->Close(); + } + + iObsArray.Close(); + delete iUsedSlot; + } + + + +// ----------------------------------------------------------------------------- +// CPEngReactAuthNotifierImp::CPEngReactAuthNotifierImp +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CPEngReactAuthNotifierImp::CPEngReactAuthNotifierImp( + CPEngReactAuthNotifier& aInterface, + TInt aPriority ) + : iInterface( aInterface ), + iCActivePriority( aPriority ) + { + } + + + +// ----------------------------------------------------------------------------- +// CPEngReactAuthNotifierImp::ConstructL() +// ----------------------------------------------------------------------------- +// +void CPEngReactAuthNotifierImp::ConstructL( + const CPEngNWSessionSlotID2& aNWSessionSlotID ) + { + iUsedSlot = CPEngNWSessionSlotStorageProxy::NewL( aNWSessionSlotID ); + iAuthManager = PEngListLibraryFactory::AuthorizationManagerL( iUsedSlot->BaseId() ); + } + + +// ----------------------------------------------------------------------------- +// CPEngReactAuthNotifierImp::Start() +// ----------------------------------------------------------------------------- +// +TInt CPEngReactAuthNotifierImp::Start( TInt /*aOptions*/ ) + { + //sanity checks to encapsulate notifier behaviour + if ( iDying ) + { + //if dying, the notifier restart is silently ignored + //because notifier is evidently shutting down + return KErrNone; + } + + if ( iStarted ) + { + return KErrInUse; + } + + + TRAPD( err, + { + //Register for reactive authorization events + iAuthManager->RegisterAuthorizationObserverL( *this ); + } ); + + if ( err == KErrNone ) + { + iStarted = ETrue; + } + + else + { + //Cancel the reactive authorization notification requests + iAuthManager->UnRegisterAuthorizationObserver( *this ); + } + + return err; + } + + +// ----------------------------------------------------------------------------- +// CPEngReactAuthNotifierImp::Stop() +// ----------------------------------------------------------------------------- +// +void CPEngReactAuthNotifierImp::Stop() + { + if ( !iStarted ) + { + return; + } + + iAuthManager->UnRegisterAuthorizationObserver( *this ); + iStarted = EFalse; + } + + +// ----------------------------------------------------------------------------- +// CPEngReactAuthNotifierImp::IsActive() +// ----------------------------------------------------------------------------- +// +TBool CPEngReactAuthNotifierImp::IsActive() const + { + return iStarted; + } + + +// ----------------------------------------------------------------------------- +// CPEngReactAuthNotifierImp::AddObserver() +// ----------------------------------------------------------------------------- +// +TInt CPEngReactAuthNotifierImp::AddObserver( + MPEngReactAuthObserver& aObserver ) + + { + return iObsArray.AddObserver( &aObserver ); + } + + +// ----------------------------------------------------------------------------- +// CPEngReactAuthNotifierImp::RemoveObserver() +// ----------------------------------------------------------------------------- +// +TInt CPEngReactAuthNotifierImp::RemoveObserver( + MPEngReactAuthObserver& aObserver ) + + { + return iObsArray.RemoveObserver( &aObserver ); + } + + +// ----------------------------------------------------------------------------- +// CPEngReactAuthNotifierImp::HandleNewPendingAuthorization() +// From MPEngAuthorizationObserver +// ----------------------------------------------------------------------------- +// +void CPEngReactAuthNotifierImp::HandleNewPendingAuthorization( + MPEngAuthorizationRequest& aNewPendingAuthorization ) + { + TPEngGenArrayAdapter< MPEngAuthorizationRequest* > adapter( &aNewPendingAuthorization ); + TArray< MPEngAuthorizationRequest* > array = adapter.Array(); + + TGenNotifyMediator2 < MPEngReactAuthObserver, + CPEngReactAuthNotifier&, + TArray< MPEngAuthorizationRequest* >& > + eventMediator( &MPEngReactAuthObserver::HandlePendingAuthorizationReqL, + &MPEngReactAuthObserver::HandleReactAuthError, + iInterface, + array ); + + iObsArray.NotifyObservers( eventMediator ); + } + + +// ----------------------------------------------------------------------------- +// CPEngReactAuthNotifierImp::HandlerNewAuthorizationStatus() +// From MPEngAuthorizationObserver +// ----------------------------------------------------------------------------- +// +void CPEngReactAuthNotifierImp::HandlerNewAuthorizationStatus( + const MPEngAuthorizationStatus& aNewAuthorizationStatus ) + { + TPEngGenArrayAdapter< const MPEngAuthorizationStatus* > adapter( &aNewAuthorizationStatus ); + TArray< const MPEngAuthorizationStatus* > array = adapter.Array(); + + TGenNotifyMediator2 < MPEngReactAuthObserver, + CPEngReactAuthNotifier&, + TArray< const MPEngAuthorizationStatus* > > + eventMediator( &MPEngReactAuthObserver::HandlerAuthorizationStatusL, + &MPEngReactAuthObserver::HandleReactAuthError, + iInterface, + array ); + + iObsArray.NotifyObservers( eventMediator ); + } + + +// ----------------------------------------------------------------------------- +// CPEngReactAuthNotifierImp::HandleAuthorizationEngineUpdate() +// From MPEngAuthorizationObserver +// ----------------------------------------------------------------------------- +// +void CPEngReactAuthNotifierImp::HandleAuthorizationEngineUpdate() + { + //Nothing to do + } + + +// ----------------------------------------------------------------------------- +// CPEngReactAuthNotifierImp::HandleAuthorizationEngineError() +// From MPEngAuthorizationObserver +// ----------------------------------------------------------------------------- +// +void CPEngReactAuthNotifierImp::HandleAuthorizationEngineError( TInt aError ) + { + TPEngGenArrayAdapter< MPEngAuthorizationRequest* > adapter( NULL ); + TArray< MPEngAuthorizationRequest* > array = adapter.Array(); + + TGenNotifyMediator2 < MPEngReactAuthObserver, + CPEngReactAuthNotifier&, + TArray< MPEngAuthorizationRequest* >& > + eventMediator( &MPEngReactAuthObserver::HandlePendingAuthorizationReqL, + &MPEngReactAuthObserver::HandleReactAuthError, + iInterface, + array ); + + iObsArray.NotifyErrorObservers( eventMediator, aError ); + } + + +// End of File +