presencefwsimpleadpt/src/simplepluginauthorization.cpp
branchRCL_3
changeset 17 2669f8761a99
parent 16 2580314736af
child 18 fbd2e7cec7ef
--- a/presencefwsimpleadpt/src/simplepluginauthorization.cpp	Thu Aug 19 10:19:02 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1071 +0,0 @@
-/*
-* Copyright (c) 2007 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:    SIMPLE Protocol implementation for Presence Framework
-*
-*/
-
-
-
-
-
-#include <e32std.h>
-
-#include <ximpdatasubscriptionstate.h>
-#include <protocolpresenceauthorizationdatahost.h>
-#include <ximpobjectfactory.h>
-#include <presenceobjectfactory.h>
-#include <ximpstatus.h>
-#include <ximpidentity.h>
-#include <presencegrantrequestinfo.h>
-#include <ximpobjectcollection.h>
-#include <presenceblockinfo.h>
-#include <presenceerrors.hrh>
-
-#include <simplefactory.h>
-#include <msimpleconnection.h>
-#include <msimplewinfo.h>
-#include <msimpleelement.h>
-
-#include "simplepluginauthorization.h"
-#include "simpleplugindebugutils.h"
-#include "simplepluginwinfo.h"
-#include "simplepluginxdmutils.h"
-#include "simpleplugincommon.h"
-#include "simplepluginconnection.h"
-
-/**
-    The design is the following one
-
-    1. DoGrantPresenceForEveryOneL
-      modify default rule to ALLOW.
-
-    2. DoWithdrawPresenceFromEveryOneL
-      if current rule is ALLOW then
-        {  BLOCK  }
-        otherwise no action.
-
-    3. DoSubscribePresenceGrantRequestListL
-      modify default rule to CONFIRM.
-
-    4. DoUnsubscribePresenceGrantRequestListL
-      if current rule is CONFIRM then
-        { go to ALLOW  }
-        otherwise no action.
-*/
-
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::CSimplePluginAuthorization
-// ---------------------------------------------------------------------------
-//
-CSimplePluginAuthorization::CSimplePluginAuthorization(
-    MSimplePluginConnectionObs& aObs )
-: CActive( CActive::EPriorityStandard ),
-  iConnObs(aObs),
-  iOperation(ENoOperation),
-  iXdmOk(EFalse), iDefRule(ERuleDef), iWinfoSubs( EFalse )
-    {
-    CActiveScheduler::Add( this );
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::ConstructL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::ConstructL( )
-    {
-
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::NewL
-// ---------------------------------------------------------------------------
-//
-CSimplePluginAuthorization* CSimplePluginAuthorization::NewL(
-    MSimplePluginConnectionObs& aObs )
-    {
-    CSimplePluginAuthorization* self =
-        new( ELeave ) CSimplePluginAuthorization( aObs );
-    CleanupStack::PushL( self );
-    self->ConstructL(  );
-    CleanupStack::Pop( self );
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: NewL this=%d"), (TInt)self );
-#endif
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::~CSimplePluginAuthorization
-// ---------------------------------------------------------------------------
-//
-CSimplePluginAuthorization::~CSimplePluginAuthorization()
-    {
-    delete iPresIdentity;
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::SetDataHost
-// We assume that this method is given by PrFw right after
-// constrcution.
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::SetDataHost(
-    MProtocolPresenceAuthorizationDataHost& aDataHost )
-    {
-    iDataHost = &aDataHost;
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::WinfoTerminatedL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::WinfoTerminatedL( TInt /*aReason*/ )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: WinfoTerminatedL") );
-#endif
-
-    if ( iWinfoSubs )
-        {
-        MXIMPDataSubscriptionState* myState = iConnObs.ObjectFactory().NewDataSubscriptionStateLC();
-        MXIMPStatus* myStatus = iConnObs.ObjectFactory().NewStatusLC();
-        // Notice: consider error codes
-        myStatus->SetResultCode( KErrCompletion );
-        myState->SetSubscriptionStateL(
-            MXIMPDataSubscriptionState::ESubscriptionInactive );
-
-        // parameters' OWNERSHIP is taken
-        iDataHost->SetPresenceGrantRequestDataSubscriptionStateL(
-            myState,
-            myStatus );
-
-        iWinfoSubs = EFalse;
-
-        CleanupStack::Pop( /*myStatus*/ );
-        CleanupStack::Pop( /*myState*/ );
-        }
- }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::DoSubscribePresenceGrantRequestListL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::DoSubscribePresenceGrantRequestListL(
-    TXIMPRequestId aReqId )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: DoSubscribePresenceGrantRequestListL"));
-#endif
-
-    /*
-    This means Reactive authorization, i.e. modify default rule as CONFIRM.
-    Also this starts the WINFO subscription.
-
-    Once the authorization request is received the
-    MProtocolPresenceAuthorizationDataHost::HandlePresenceGrantRequestReceivedL shall
-    be called in the host API.
-
-    First make the watcher list SIP subscription and after that is completed
-    in HandleIfMine then continue and modify XDMS authentication rule.
-    HandleIfMine can be called also immediately if there already exists an WINFO subscrption.
-    */
-
-    iOperation = ESubscribePresenceGrantRequestList;
-    iPrFwId = aReqId;
-    TRAPD( err, iConnObs.WinfoHandlerL()->SubscribeWinfoListL( aReqId ));
-    if ( err )
-        {
-        iOperation = ENoOperation;
-        User::Leave( CSimplePluginConnection::HarmonizeErrorCode( err ));
-        }
-    else
-        {
-        iWinfoSubs = ETrue;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::DoUnsubscribePresenceGrantRequestListL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::DoUnsubscribePresenceGrantRequestListL(
-    TXIMPRequestId aReqId )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: DoUnsubscribePresenceGrantRequestListL TEST COVERS 4"));
-#endif
-
-    // First modify XDMS authentication rule and then unsubscribe
-    // SIP watcher list subscription.
-    TRAPD( err, DoStartXdmOperationL( aReqId, EUnsubscribePresenceGrantRequestList ));
-    if ( err )
-        {
-        User::Leave( CSimplePluginConnection::HarmonizeErrorCode( err ));
-        }
-    iPrFwId = aReqId;
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::DoGrantPresenceForPresentityL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::DoGrantPresenceForPresentityL(
-    const MXIMPIdentity& aPresentityId,
-    const MPresenceInfoFilter& /*aPif*/,  // notice: pif not supported
-    TXIMPRequestId aReqId )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: DoGrantPresenceForPresentityL"));
-#endif
-    StartXdmOperationL( aPresentityId, aReqId, EGrantPresenceForPresentity );
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::DoUpdatePresenceGrantPifForPresentityL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::DoUpdatePresenceGrantPifForPresentityL(
-    const MXIMPIdentity& /*aPresentityId*/,
-    const MPresenceInfoFilter& /*aPif*/,
-    TXIMPRequestId /*aReqId*/ )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: DoUpdatePresenceGrantPifForPresentityL"));
-#endif
-    // Notice: aPif filter not supported.
-    User::Leave( KErrNotSupported );
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::DoWithdrawPresenceGrantFromPresentityL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::DoWithdrawPresenceGrantFromPresentityL(
-    const MXIMPIdentity& aPresentityId,
-    TXIMPRequestId aReqId )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: DoWithdrawPresenceGrantFromPresentityL"));
-#endif
-    StartXdmOperationL( aPresentityId, aReqId, EWithdrawFromPresentity );
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::DoGrantPresenceForPresentityGroupMembersL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::DoGrantPresenceForPresentityGroupMembersL(
-    const MXIMPIdentity& aGroupId,
-    const MPresenceInfoFilter& /*aPif*/,
-    TXIMPRequestId aReqId )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: DoGrantPresenceForPresentityGroupMembersL"));
-#endif
-    StartXdmOperationL( aGroupId, aReqId, EGrantPresenceForPresentityGroupMembers );
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::DoUpdatePresenceGrantPifForPresentityGroupMembersL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::DoUpdatePresenceGrantPifForPresentityGroupMembersL(
-    const MXIMPIdentity& /*aGroupId*/,
-    const MPresenceInfoFilter& /*aPif*/,
-    TXIMPRequestId /*aReqId*/ )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: DoUpdatePresenceGrantPifForPresentityGroupMembersL"));
-#endif
-    // Notice: aPif filter not supported
-    User::Leave( KErrNotSupported );
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::DoWithdrawPresenceGrantFromPresentityGroupMembersL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::DoWithdrawPresenceGrantFromPresentityGroupMembersL(
-    const MXIMPIdentity& aGroupId,
-    TXIMPRequestId aReqId )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: DoWithdrawPresenceGrantFromPresentityGroupMembersL"));
-#endif
-    StartXdmOperationL( aGroupId, aReqId, EWithdrawFromGroupMembers );
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::DoGrantPresenceForEveryoneL()
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::DoGrantPresenceForEveryoneL(
-    const MPresenceInfoFilter& /*aPif*/,   // // Notice: aPif filter not supported
-    TXIMPRequestId aReqId )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: DoGrantPresenceForEveryoneL"));
-#endif
-    MXIMPIdentity* nobody = iConnObs.ObjectFactory().NewIdentityLC();  // << nobody
-    StartXdmOperationL( *nobody, aReqId, EGrantForEveryone );
-    CleanupStack::PopAndDestroy( );                     // >> nobody
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::DoUpdatePresenceGrantPifForEveryoneL()
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::DoUpdatePresenceGrantPifForEveryoneL(
-    const MPresenceInfoFilter& /*aPif*/,
-    TXIMPRequestId /*aReqId*/ )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: DoUpdatePresenceGrantPifForEveryoneL"));
-#endif
-    // Notice: aPif filter not supported
-    User::Leave( KErrNotSupported );
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::DoWithdrawPresenceGrantFromEveryoneL()
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::DoWithdrawPresenceGrantFromEveryoneL(
-    TXIMPRequestId aReqId )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: DoWithdrawPresenceGrantFromEveryoneL"));
-#endif
-    MXIMPIdentity* nobody = iConnObs.ObjectFactory().NewIdentityLC();  // << nobody
-    StartXdmOperationL( *nobody, aReqId, EWithdrawFromEveryone );
-    CleanupStack::PopAndDestroy( );                     // >> nobody
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::DoSubscribePresenceBlockListL()
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::DoSubscribePresenceBlockListL(
-    TXIMPRequestId aReqId )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: DoSubscribePresenceBlockListL"));
-#endif
-    MXIMPIdentity* nobody = iConnObs.ObjectFactory().NewIdentityLC();  // << nobody
-    StartXdmOperationL( *nobody, aReqId, ESubscribeBlockList );
-    CleanupStack::PopAndDestroy( );                     // >> nobody
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::DoUnsubscribePresenceBlockListL()
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::DoUnsubscribePresenceBlockListL(
-    TXIMPRequestId aReqId )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: DoUnsubscribePresenceBlockListL"));
-#endif
-    MXIMPIdentity* nobody = iConnObs.ObjectFactory().NewIdentityLC();  // << nobody
-    StartXdmOperationL( *nobody, aReqId, EUnsubscribeBlockList );
-    CleanupStack::PopAndDestroy( );                     // >> nobody
-    }
-
-// Blocking presence information access from single presentities
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::DoBlockPresenceForPresentityL()
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::DoBlockPresenceForPresentityL(
-    const MXIMPIdentity& aPresentityId,
-    TXIMPRequestId aReqId )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: DoBlockPresenceForPresentityL"));
-#endif
-    StartXdmOperationL( aPresentityId, aReqId, EBlockPresentity );
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::DoCancelPresenceBlockFromPresentityL()
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::DoCancelPresenceBlockFromPresentityL(
-    const MXIMPIdentity& aPresentityId,
-    TXIMPRequestId aReqId )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: DoCancelPresenceBlockFromPresentityL"));
-#endif
-    StartXdmOperationL( aPresentityId, aReqId, EUnblockPresentity );
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::DoCancel()
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::DoCancel(  )
-    {
-    iXdmUtils->Cancel();
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::RunL()
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::RunL(  )
-    {
-    TInt myStatus = iStatus.Int();
-
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: RunL %d"), myStatus );
-#endif
-
-    if ( iOperation == EUnsubscribePresenceGrantRequestList && !myStatus )
-        {
-        // unsubscribe watcher list after successful default rule modification.
-        TRAPD( err, iConnObs.WinfoHandlerL()->UnsubscribeWinfoListL( iPrFwId ));
-        if ( err )
-            {
-            User::Leave( CSimplePluginConnection::HarmonizeErrorCode( err ));
-            }
-        else
-            {
-            // This will end to HandleIfMine.
-            }
-        }
-    else if ( !iXdmOk && !myStatus )
-        {
-        iXdmOk = ETrue;
-        CallActualXdmOperationL();
-        }
-    else // iXdmOK or myStatus
-        {
-        CompletePrFwReq( myStatus );
-        }
-
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::CallActualXdmOperationL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::CallActualXdmOperationL()
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: CallActualXdmOperationL") );
-#endif
-    switch ( iOperation )
-        {
-        case EGrantPresenceForPresentity:
-            // iPresIdentity can't be null in this case
-            iXdmUtils->AddEntityToGrantedL( iPresIdentity->Des(), iStatus );
-            SetActive();
-            break;
-        case EWithdrawFromPresentity:
-            // iPresIdentity can't be null in this case
-            iXdmUtils->RemoveEntityFromGrantedL( iPresIdentity->Des(),iStatus );
-            SetActive();
-            break;
-        case EGrantPresenceForPresentityGroupMembers:
-            // iPresIdentity can't be null in this case
-            iXdmUtils->AddGroupToGrantedL( iPresIdentity->Des(), iStatus );
-            SetActive();
-            break;
-        case EWithdrawFromGroupMembers:
-            // iPresIdentity can't be null in this case
-            iXdmUtils->RemoveGroupFromGrantedL( iPresIdentity->Des(), iStatus );
-            SetActive();
-            break;
-        case EGrantForEveryone:
-            iXdmUtils->GrantForEveryoneL( iStatus );
-            SetActive();
-            break;
-        case EWithdrawFromEveryone:
-            iXdmUtils->WithdrawFromEveryoneL( iStatus );
-            SetActive();
-            break;
-        case ESubscribeBlockList:
-            HandleSubscribeBlockListL();
-            break;
-        case EUnsubscribeBlockList:
-            iXdmUtils->UnsubscribeBlockListL( iStatus );
-            SetActive();
-            break;
-        case EBlockPresentity:
-            // iPresIdentity can't be null in this case
-            iXdmUtils->AddEntityToBlockedL( iPresIdentity->Des(), iStatus );
-            SetActive();
-            break;
-        case EUnblockPresentity:
-            // iPresIdentity can't be null in this case
-            iXdmUtils->RemoveEntityFromBlockedL( iPresIdentity->Des(), iStatus );
-            SetActive();
-            break;
-        case ESubscribePresenceGrantRequestList:
-            iXdmUtils->SetReactiveAuthL( iStatus );
-            SetActive();
-            break;
-        case EUnsubscribePresenceGrantRequestList:
-        default:
-            iXdmUtils->SetProactiveAuthL( iStatus );
-            SetActive();
-            break;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::CopyBlockersToArrayL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::CopyBlockersToArrayL(
-        CPtrCArray& aBlockers, RPointerArray<MXIMPIdentity>& aBlockedSouls )
-    {
-    MXIMPObjectFactory& myFactory = iConnObs.ObjectFactory();
-
-    aBlockedSouls.Reset();
-
-    TInt nodeCount = aBlockers.Count();
-    for ( TInt i = 0; i < nodeCount; i++ )
-        {
-        MXIMPIdentity* entity = myFactory.NewIdentityLC(); // << entity
-        entity->SetIdentityL( aBlockers[i] );
-        aBlockedSouls.AppendL( entity );
-        CleanupStack::Pop(); // >> entity
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::RunError
-// ---------------------------------------------------------------------------
-//
-TInt CSimplePluginAuthorization::RunError( TInt aError )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: RunError %d"), aError );
-#endif
-    // complete the open request
-    CompletePrFwReq( aError );
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::GetInterface()
-// ---------------------------------------------------------------------------
-//
-TAny* CSimplePluginAuthorization::GetInterface(
-        TInt32 aInterfaceId,
-        TIfGetOps aOptions )
-    {
-    if ( aInterfaceId == GetInterfaceId() )
-        {
-        // caller wants this interface
-        MProtocolPresenceAuthorization* myIf = this;
-        return myIf;
-        }
-    if ( aOptions == MXIMPBase::EPanicIfUnknown )
-        {
-        User::Panic( _L("CSimplePlugin"), KErrExtensionNotSupported );
-        }
-    return NULL;
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::GetInterface()
-// ---------------------------------------------------------------------------
-//
-const TAny* CSimplePluginAuthorization::GetInterface(
-    TInt32 aInterfaceId,
-    TIfGetOps aOptions ) const
-    {
-    if ( aInterfaceId == GetInterfaceId() )
-        {
-        // caller wants this interface
-        const MProtocolPresenceAuthorization* myIf = this;
-        return myIf;
-        }
-    if ( aOptions == MXIMPBase::EPanicIfUnknown )
-        {
-        User::Panic( _L("CSimplePlugin"), KErrExtensionNotSupported );
-        }
-    return NULL;
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::GetInterfaceId()
-// ---------------------------------------------------------------------------
-//
-TInt32 CSimplePluginAuthorization::GetInterfaceId() const
-    {
-    return MProtocolPresenceAuthorization::KInterfaceId;
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::SetPresIdentityL()
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::SetPresIdentityL(
-     const MXIMPIdentity& aPresentityId )
-     {
-     delete iPresIdentity;
-     iPresIdentity = NULL;
-     iPresIdentity = aPresentityId.Identity().AllocL();
-     }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::WinfoNotificationL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::WinfoNotificationL(
-    MSimpleWinfo& aWinfo )
-    {
-    if ( !iWinfoSubs )
-        {
-        return;
-        }
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: WinfoNotificationL starts"));
-#endif
-
-    using namespace NSimplePlugin::NSimpleOma;
-
-    RPointerArray<MSimpleElement> elems;
-    CleanupClosePushL( elems );
-    TInt err = aWinfo.SimpleElementsL( elems );
-    User::LeaveIfError( err );
-    TInt count = elems.Count();
-
-    if ( !count )
-        {
-        // stop parsing empty notification
-        User::Leave( KErrArgument );
-        }
-
-    __ASSERT_DEBUG( count == 1, User::Leave( KErrCorrupt ) );
-
-    const TDesC8* stateVal = aWinfo.AttrValue( KSimpleState8 );
-    if ( stateVal && !stateVal->CompareF( KSimpleFull8 ))
-        {
-        // Call full list method
-        HandleFullWinfoNotificationL( aWinfo );
-        }
-    else
-        {
-        // Indicate changes in WINFO list one by one.
-        HandlePartialWinfoNotificationL( aWinfo );
-        }
-    CleanupStack::PopAndDestroy( &elems );
-
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: WinfoNotificationL ends"));
-#endif
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::StartXdmOperationL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::StartXdmOperationL(
-    const MXIMPIdentity& aId,
-    TXIMPRequestId aReqId,
-    TPluginAuthOperation aOperation )
-    {
-    TRAPD( err, DoStartXdmOperationL(aId, aReqId, aOperation ));
-    if ( err )
-        {
-        User::Leave( CSimplePluginConnection::HarmonizeErrorCode( err ));
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::DoStartXdmOperationL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::DoStartXdmOperationL(
-    const MXIMPIdentity& aId,
-    TXIMPRequestId aReqId,
-    TPluginAuthOperation aOperation )
-    {
-    SetPresIdentityL( aId );
-    DoStartXdmOperationL( aReqId, aOperation );
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::DoStartXdmOperationL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::DoStartXdmOperationL(
-    TXIMPRequestId aReqId,
-    TPluginAuthOperation aOperation )
-    {
-    __ASSERT_DEBUG( !IsActive(), User::Leave( KErrCorrupt ) );
-    iPrFwId = aReqId;
-    iOperation = aOperation;
-    if ( !iXdmUtils )
-        {
-        iXdmUtils = iConnObs.XdmUtilsL();
-        }
-    if ( iXdmOk )
-        {
-        CallActualXdmOperationL();
-        }
-    else
-        {
-        iXdmUtils->InitializeXdmL( iStatus );
-        SetActive();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::HandleFullWinfoNotificationL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::HandleFullWinfoNotificationL(
-    MSimpleWinfo& aWinfo )
-    {
-
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: HandleFullWinfoNotificationL starts"));
-#endif
-
-    // Search for pending watchers and call HandlePresenceGrantRequestListL
-    using namespace NSimplePlugin::NSimpleOma;
-
-    RPointerArray<MSimpleElement> elems;
-    CleanupClosePushL( elems );
-    TInt err = aWinfo.SimpleElementsL( elems );
-    User::LeaveIfError( err );
-    TInt count = elems.Count();
-
-    MSimpleElement* elem = elems[0];
-    TPtrC8 p8 = elem->LocalName();
-    err = p8.CompareF( KSimpleWatcherList8 );
-    User::LeaveIfError( err );
-
-    err = elem->SimpleElementsL( elems );
-    User::LeaveIfError( err );
-    count = elems.Count();
-
-    // Search watchers who are pending (status = pending)
-    HBufC* nodeContent = NULL;
-    MXIMPObjectCollection *pendings = iConnObs.ObjectFactory().NewObjectCollectionLC();
-
-    TBool pendingFound(EFalse);
-
-    for ( TInt i = 0; i < count; i++ )
-        {
-        elem = elems[i];
-        p8.Set( elem->LocalName());
-        if (!( p8.CompareF( KSimpleWatcher8 )))
-            {
-            const TDesC8* pp8 = elem->AttrValue( KSimpleStatus8 );
-            if ( pp8 && !pp8->CompareF( KSimplePending8 ))
-                {
-                // Build collection of grant requests
-                // Find the child node containing the SIP entity
-                nodeContent = elem->ContentUnicodeL();
-                CleanupStack::PushL( nodeContent );
-                // create the collection entry here
-                MPresenceGrantRequestInfo* grInfo =
-                   iConnObs.PresenceObjectFactory().NewPresenceGrantRequestInfoLC();
-                MXIMPIdentity* identity = iConnObs.ObjectFactory().NewIdentityLC();
-                identity->SetIdentityL( nodeContent->Des());
-                grInfo->SetRequestorIdL( identity ); // ownership is taken
-                CleanupStack::Pop( ); // identity
-#ifdef _DEBUG
-                TBuf<200> debug_buffer;
-                debug_buffer = nodeContent->Des();
-                PluginLogger::Log(
-                    _L("PluginAuth: add pending into collection: %S"), &debug_buffer );
-#endif
-                pendings->AddObjectL( grInfo );  // ownership is taken
-                CleanupStack::Pop( );            // grInfo
-                pendingFound = ETrue;
-                CleanupStack::PopAndDestroy( nodeContent );
-                }
-            }
-        }
-
-    if ( pendingFound )
-        {
-#ifdef _DEBUG
-        PluginLogger::Log(_L("PluginAuthorization: callback HandlePresenceGrantRequestListL"));
-#endif
-        iPrFwIdOwn = iDataHost->HandlePresenceGrantRequestListL( pendings );
-        CleanupStack::Pop();    // >> pendings
-        }
-    else
-        {
-        CleanupStack::PopAndDestroy( ); // >> pendings
-        }
-
-    CleanupStack::PopAndDestroy( &elems );
-
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: HandleFullWinfoNotificationL ends"));
-#endif
-
-    /* example:
-
-   <?xml version="1.0"?>
-     <watcherinfo xmlns="urn:ietf:params:xml:ns:watcherinfo"
-   version="0" state="full">
-     <watcher-list resource="sip:presentity@example.com"
-                   package="presence">
-         <watcher status="active"
-            id="sr8fdsj"
-            duration-subscribed="509"
-            expiration="20"
-            event="approved">sip:watcherA@example.com"
-          </watcher>
-     */
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::HandlePartialWinfoNotificationL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::HandlePartialWinfoNotificationL(
-    MSimpleWinfo& aWinfo )
-    {
-
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: HandlePartialWinfoNotificationL starts"));
-#endif
-
-    using namespace NSimplePlugin::NSimpleOma;
-
-    RPointerArray<MSimpleElement> elems;
-    CleanupClosePushL( elems );
-    TInt err = aWinfo.SimpleElementsL( elems );
-    User::LeaveIfError( err );
-    TInt count = elems.Count();
-
-    MSimpleElement* elem = elems[0];
-    TPtrC8 p8 = elem->LocalName();
-    err = p8.CompareF( KSimpleWatcherList8 );
-    User::LeaveIfError( err );
-
-    err = elem->SimpleElementsL( elems );
-    User::LeaveIfError( err );
-    count = elems.Count();
-
-    HBufC* nodeContent = NULL;
-
-    for ( TInt i = 0; i < count; i++ )
-        {
-        elem = elems[i];
-        p8.Set( elem->LocalName());
-        if (!( p8.CompareF( KSimpleWatcher8 )))
-            {
-            const TDesC8* pp8 = elem->AttrValue( KSimpleStatus8 );
-            if ( pp8 && !pp8->CompareF( KSimplePending8 ))
-                {
-                nodeContent = elem->ContentUnicodeL();
-                CleanupStack::PushL( nodeContent );
-                CallHandlePresenceGrantRequestReceivedL( nodeContent->Des() );
-                CleanupStack::PopAndDestroy( nodeContent );
-                }
-            else if ( pp8 && !pp8->CompareF( KSimpleTerminated8 ))
-                {
-                nodeContent = elem->ContentUnicodeL();
-                CleanupStack::PushL( nodeContent );
-                CallHandlePresenceGrantRequestObsoletedL( nodeContent->Des() );
-                CleanupStack::PopAndDestroy( nodeContent );
-                }
-            }
-        }
-    CleanupStack::PopAndDestroy( &elems );
-
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: HandlePartialWinfoNotificationL ends"));
-#endif
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::CallHandlePresenceGrantRequestReceivedL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::CallHandlePresenceGrantRequestReceivedL(
-    const TDesC& aUserId )
-    {
-    // create the collection entry here
-    MPresenceGrantRequestInfo* grInfo =
-       iConnObs.PresenceObjectFactory().NewPresenceGrantRequestInfoLC();  // +grInfo
-    MXIMPIdentity* identity = iConnObs.ObjectFactory().NewIdentityLC();   // +identity
-    identity->SetIdentityL( aUserId );
-    grInfo->SetRequestorIdL( identity ); // ownership is taken
-    CleanupStack::Pop( );    // -identity
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: callback HandlePresenceGrantRequestReceivedL"));
-#endif
-    iPrFwIdOwn = iDataHost->HandlePresenceGrantRequestReceivedL( grInfo ); // ownership is taken
-    CleanupStack::Pop( );           // -grInfo
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::CallHandlePresenceGrantRequestObsoletedL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::CallHandlePresenceGrantRequestObsoletedL(
-    const TDesC& aUserId)
-    {
-    MXIMPIdentity* identity = iConnObs.ObjectFactory().NewIdentityLC();
-    identity->SetIdentityL( aUserId );
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: callback HandlePresenceGrantRequestObsoletedL"));
-#endif
-    iPrFwIdOwn = iDataHost->HandlePresenceGrantRequestObsoletedL( identity); // ownership is taken
-    CleanupStack::Pop( );           // >> identity
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::HandleSubscribeBlockListL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::HandleSubscribeBlockListL()
-    {
-    RPointerArray<MXIMPIdentity> blockedSouls;
-    CleanupClosePushL( blockedSouls );
-
-    const TInt KMyGran = 10;
-    CPtrCArray* blockers = new (ELeave) CPtrCArray( KMyGran );
-    CleanupStack::PushL( blockers );      // << blockers
-
-    iXdmUtils->SubscribeBlockListL( *blockers );
-
-    CopyBlockersToArrayL( *blockers, blockedSouls );
-
-    CleanupStack::PopAndDestroy( blockers );
-
-    MXIMPObjectCollection* coll =
-        iConnObs.ObjectFactory().NewObjectCollectionLC();    // << coll
-    TInt count = blockedSouls.Count();
-    for ( TInt i = count-1; i >= 0; i-- )
-        {
-        MXIMPIdentity* currId = blockedSouls[i];
-        MPresenceBlockInfo* bInfo = iConnObs.PresenceObjectFactory().NewPresenceBlockInfoLC();
-        bInfo->SetBlockedEntityIdL( currId ); // ownership is taken
-        bInfo->SetBlockedEntityDisplayNameL( currId->Identity() );
-        blockedSouls.Remove( i );
-        coll->AddObjectL( bInfo );      // ownership is taken
-        CleanupStack::Pop();                                // >> bInfo
-        }
-    CompletePrFwReq( KErrNone );
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuth: callback HandlePresenceBlockListL"));
-#endif
-    // Callback for subscription result
-    iDataHost->HandlePresenceBlockListL( coll );
-
-    CleanupStack::Pop();                                // >> coll
-    CleanupStack::PopAndDestroy( &blockedSouls );
-
-    // Callback for subscription state (terminated).
-    MXIMPDataSubscriptionState* myState = iConnObs.ObjectFactory().NewDataSubscriptionStateLC();
-    MXIMPStatus* myStatus = iConnObs.ObjectFactory().NewStatusLC();
-    // Notice: consider error codes
-    myStatus->SetResultCode( KErrNone );
-    myState->SetSubscriptionStateL(
-        MXIMPDataSubscriptionState::ESubscriptionInactive );
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: callback SetPresenceBlockDataSubscriptionStateL"));
-#endif
-    iDataHost->SetPresenceBlockDataSubscriptionStateL(
-        myState, myStatus );
-    CleanupStack::Pop( 2 ); // >> myState, myStatus
-
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::CompletePrFwReq
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginAuthorization::CompletePrFwReq( TInt aStatus )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: CompletePrFwReq status=%d"), aStatus );
-#endif
-    iOperation = ENoOperation;
-    iConnObs.CompleteReq( iPrFwId, aStatus  );
-    iPrFwId = TXIMPRequestId();
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginAuthorization::HandleIfMine
-// ---------------------------------------------------------------------------
-//
-TBool CSimplePluginAuthorization::HandleIfMine( TXIMPRequestId aReqId, TInt aStatus )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: HandleIfMine aStatus=%d iOper=%d"), aStatus, iOperation);
-#endif
-    TInt err = KErrNone;
-    TBool ret = EFalse;
-
-    // We check wheter the request is made by this entity.
-    if ( iPrFwId != aReqId )
-        {
-        // Nothing to do, request was not orginated by this entity.
-        }
-    else
-        {
-        if ( !aStatus )
-            {
-            switch ( iOperation )
-                {
-                case ESubscribePresenceGrantRequestList:
-                    // Modify rule to CONFIRM
-#ifdef _DEBUG
-                    PluginLogger::Log(_L("PluginAuthorization: HandleIfMine TEST COVERS 7"));
-#endif
-                    TRAP( err, DoStartXdmOperationL( aReqId, iOperation ));
-                    err = CSimplePluginConnection::HarmonizeErrorCode( err );
-                    ret = ETrue;
-                    break;
-                // In UnsubscribePresenceGrantRequestList case the rule modifcation
-                // has been made first before SIP unsubscribe operation.
-                case EUnsubscribePresenceGrantRequestList:
-                default:
-                    iWinfoSubs = EFalse;
-                    break;
-                }
-            }
-        else
-            {
-            CompletePrFwReq( err );
-            ret = ETrue;
-            }
-        if ( err )
-            {
-            CompletePrFwReq( err );
-            ret = ETrue;
-            }
-        else
-            {
-            }
-        }
-
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginAuthorization: HandleIfMine returns %d"), ret );
-#endif
-    return ret;
-    }
-
-// End of file
-