--- /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 <CPEngReactAuthNotifier.h>
+#include <MPEngReactAuthObserver.h>
+
+
+
+
+// ============================ 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
+