presencefwsimpleadpt/src/simplepluginwatcher.cpp
branchGCC_SURGE
changeset 28 d9861ae9169c
parent 23 77cb48a03620
parent 26 04ca1926b01c
--- a/presencefwsimpleadpt/src/simplepluginwatcher.cpp	Thu Jul 01 14:09:06 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,784 +0,0 @@
-/*
-* Copyright (c) 2006 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 <utf.h>
-
-#include <personpresenceinfo.h>
-
-#include <presenceinfo.h>
-#include <presenceinfofieldcollection.h>
-#include <presenceinfofield.h>
-#include <presenceinfofieldvaluetext.h>
-#include <presenceinfofieldvalueenum.h>
-#include <presenceobjectfactory.h>
-#include <presenceerrors.hrh>
-
-#include <presentitygroupmemberinfo.h>
-
-#include <protocolpresencedatahost.h>
-#include <protocolpresentitygroupsdatahost.h>
-#include <protocolpresencewatchingdatahost.h>
-
-#include <ximpdatasubscriptionstate.h>
-#include <ximperrors.hrh>
-#include <ximpidentity.h>
-#include <ximpobjectcollection.h>
-#include <ximpobjectfactory.h>
-#include <ximpprotocolconnectionhost.h>
-#include <ximpstatus.h>
-
-#include <simplefactory.h>
-#include <simpleerrors.h>
-#include <msimplewinfo.h>
-#include <msimplewatcher.h>
-#include <msimpledocument.h>
-#include <msimpleelement.h>
-
-#include "simpleplugincommon.h"
-#include "simplepluginwatcher.h"
-#include "simplepluginentitywatcher.h"
-#include "simpleplugindebugutils.h"
-#include "simpleutils.h"
-#include "simplepluginxdmutils.h"
-#include "simpleplugindata.h"
-#include "simplepluginconnection.h"
-
-
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::CSimplePluginWatcher
-// ---------------------------------------------------------------------------
-//
-CSimplePluginWatcher::CSimplePluginWatcher(
-    MSimplePluginSettings& aConnSets,
-    MSimplePluginConnectionObs& aObs,
-    MSimpleConnection& aConn )
-: CActive( CActive::EPriorityStandard ),
-  iConnSets( aConnSets), iConnObs(aObs), iConnection(aConn), iCompleted( ETrue ),
-  iOperation( EPluginUndef ), iXdmState( EPluginIdle )
-    {
-    CActiveScheduler::Add( this );
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::ConstructL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::ConstructL( )
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::NewL
-// ---------------------------------------------------------------------------
-//
-CSimplePluginWatcher* CSimplePluginWatcher::NewL(
-    MSimplePluginSettings& aConnSets,
-    MSimplePluginConnectionObs& aObs,
-    MSimpleConnection& aConn )
-    {
-    CSimplePluginWatcher* self =
-        new( ELeave ) CSimplePluginWatcher( aConnSets, aObs, aConn );
-    CleanupStack::PushL( self );
-    self->ConstructL(  );
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::~CSimplePluginWatcher
-// ---------------------------------------------------------------------------
-//
-CSimplePluginWatcher::~CSimplePluginWatcher()
-    {
-    iWatchers.ResetAndDestroy();
-    iWatchers.Close();
-    delete iPresIdentity;
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::DoSubscribePresentityPresenceL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::DoSubscribePresentityPresenceL(
-    const MXIMPIdentity& aPresentityId,
-    const MPresenceInfoFilter& /*aPif*/,   // notice: aPif filter not supported
-    TXIMPRequestId aReqId )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginWatcher: DoSubscribePresentityPresenceL"));
-#endif
-
-    TRAPD( err, DoDoSubscribePresentityPresenceL(aPresentityId, aReqId ));
-    if ( err )
-        {
-        User::Leave( CSimplePluginConnection::HarmonizeErrorCode( err ));
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::DoDoSubscribePresentityPresenceL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::DoDoSubscribePresentityPresenceL(
-    const MXIMPIdentity& aPresentityId,
-    TXIMPRequestId aReqId )
-    {
-    iOperation = EPluginUndef;
-    iXdmState = EPluginIdle;
-
-    SetPresIdentityL( aPresentityId );
-    iPrFwId = aReqId;
-    iCompleted = EFalse;
-
-  HBufC8* pres8 = NULL;
-    pres8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( iPresIdentity->Des() );
-    CleanupStack::PushL( pres8 ); // << pres8
-
-    CSimplePluginEntityWatcher* watcher = MatchWatcher2L( pres8->Des(), ETrue );
-    watcher->StartSubscribeL( pres8->Des() );
-    CleanupStack::PopAndDestroy( pres8 );  // >> pres8
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::DoUpdatePresentityPresenceSubscriptionPifL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::DoUpdatePresentityPresenceSubscriptionPifL(
-    const MXIMPIdentity& /*aPresentityId*/,
-    const MPresenceInfoFilter& /*aPif*/,
-    TXIMPRequestId /*aReqId*/ )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(
-        _L("PluginWatcher: DoUpdatePresentityPresenceSubscriptionPifL"));
-#endif
-
-    iOperation = EPluginUndef;
-
-    // notice: aPif filter not supported
-    User::Leave( KErrNotSupported );
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::DoUnsubscribePresentityPresenceL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::DoUnsubscribePresentityPresenceL(
-    const MXIMPIdentity& aPresentityId,
-    TXIMPRequestId aReqId )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginWatcher: DoUnsubscribePresentityPresenceL"));
-#endif
-
-    TRAPD( err, DoDoUnsubscribePresentityPresenceL( aPresentityId, aReqId ) );
-    if ( err )
-        {
-        User::Leave( CSimplePluginConnection::HarmonizeErrorCode( err ));
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::DoDoUnsubscribePresentityPresenceL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::DoDoUnsubscribePresentityPresenceL(
-    const MXIMPIdentity& aPresentityId,
-    TXIMPRequestId aReqId )
-    {
-
-    iOperation = EPluginUndef;
-    iXdmState = EPluginIdle;
-
-    SetPresIdentityL( aPresentityId );
-    iPrFwId = aReqId;
-    iCompleted = EFalse;
-
-  HBufC8* pres8 = NULL;
-    pres8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( iPresIdentity->Des() );
-    CleanupStack::PushL( pres8 ); // << pres8
-
-    CSimplePluginEntityWatcher* watcher = MatchWatcher2L( pres8->Des(), EFalse );
-    if ( !watcher )
-        {
-        User::Leave( KErrNotFound ); // Notice: error code
-        }
-    else
-        {
-#ifdef _DEBUG
-        PluginLogger::Log(_L("PluginWatcher: -> StopSubscribeL"));
-#endif
-        watcher->StopSubscribeL();
-        }
-    CleanupStack::PopAndDestroy( pres8 );  // >> pres8
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::DoSubscribePresentityGroupMembersPresenceL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::DoSubscribePresentityGroupMembersPresenceL(
-    const MXIMPIdentity& aGroupId,
-    const MPresenceInfoFilter& /*aPif*/,   // notice: aPif filter not supported
-    TXIMPRequestId aReqId )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(
-        _L("PluginWatcher: DoSubscribePresentityGroupMembersPresenceL"));
-#endif
-
-    iOperation = EPluginSubscribeGroup;
-    iXdmState = EPluginIdle;
-
-    SetPresIdentityL( aGroupId );
-    iPrFwId = aReqId;
-    iCompleted = EFalse;
-
-    // Get Shared XDM lists first and create RLS service first
-    StartXdmOperationL();
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::DoUpdatePresentityGroupMembersPresenceSubscriptionPifL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::DoUpdatePresentityGroupMembersPresenceSubscriptionPifL(
-    const MXIMPIdentity& /*aGroupId*/,
-    const MPresenceInfoFilter& /*aPif*/,
-    TXIMPRequestId /*aReqId*/ )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(
-  _L("PluginWatcher: DoUpdatePresentityGroupMembersPresenceSubscriptionPifL"));
-#endif
-    // notice: aPif filter not supported
-    User::Leave( KErrNotSupported );
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::DoUnsubscribePresentityGroupMembersPresenceL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::DoUnsubscribePresentityGroupMembersPresenceL(
-    const MXIMPIdentity& aGroupId,
-    TXIMPRequestId aReqId )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(
-        _L("PluginWatcher: DoUnsubscribePresentityGroupMembersPresenceL"));
-#endif
-    TRAPD( err, DoDoUnsubscribePresentityGroupMembersPresenceL( aGroupId, aReqId ));
-    if ( err )
-        {
-        User::Leave( CSimplePluginConnection::HarmonizeErrorCode( err ));
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::DoDoUnsubscribePresentityGroupMembersPresenceL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::DoDoUnsubscribePresentityGroupMembersPresenceL(
-    const MXIMPIdentity& aGroupId,
-    TXIMPRequestId aReqId )
-    {
-    iOperation = EPluginUnsubscribeGroup;
-    iXdmState = EPluginIdle;
-
-    SetPresIdentityL( aGroupId );
-    iPrFwId = aReqId;
-    iCompleted = EFalse;
-
-    HBufC* buf16 = iXdmUtils->RlsServiceByResourceListLC( iPresIdentity->Des() ); // << buf16
-
-    HBufC8* buf = CnvUtfConverter::ConvertFromUnicodeToUtf8L( buf16->Des() );
-    CleanupStack::PushL( buf );  // << buf
-
-    CSimplePluginEntityWatcher* watcher = MatchWatcher2L( buf->Des(), EFalse );
-
-    CleanupStack::PopAndDestroy( buf );  // >> buf
-    CleanupStack::PopAndDestroy( buf16 );  // >> buf16
-
-    if ( !watcher )
-        {
-        User::Leave( KErrNotFound ); // Notice: error code
-        }
-    else
-        {
-        watcher->StopSubscribeL();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::GetInterface
-// ---------------------------------------------------------------------------
-//
-TAny* CSimplePluginWatcher::GetInterface(
-        TInt32 aInterfaceId,
-        TIfGetOps aOptions )
-    {
-    if ( aInterfaceId == GetInterfaceId() )
-        {
-        // caller wants this interface
-        MProtocolPresenceWatching* myIf = this;
-        return myIf;
-        }
-    if ( aOptions == MXIMPBase::EPanicIfUnknown )
-        {
-        User::Panic( _L("CSimplePlugin"), KErrExtensionNotSupported );
-        }
-    return NULL;
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::GetInterface
-// ---------------------------------------------------------------------------
-//
-const TAny* CSimplePluginWatcher::GetInterface(
-    TInt32 aInterfaceId,
-    TIfGetOps aOptions ) const
-    {
-    if ( aInterfaceId == GetInterfaceId() )
-        {
-        // caller wants this interface
-        const MProtocolPresenceWatching* myIf = this;
-        return myIf;
-        }
-    if ( aOptions == MXIMPBase::EPanicIfUnknown )
-        {
-        User::Panic( _L("CSimplePlugin"), KErrExtensionNotSupported );
-        }
-    return NULL;
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::GetInterfaceId
-// ---------------------------------------------------------------------------
-//
-TInt32 CSimplePluginWatcher::GetInterfaceId() const
-    {
-    return MProtocolPresenceWatching::KInterfaceId;
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::MatchWatcher2L
-// ---------------------------------------------------------------------------
-//
-CSimplePluginEntityWatcher* CSimplePluginWatcher::MatchWatcher2L(
-    const TDesC8& aPresentityid, TBool aCreate )
-    {
-    TInt count = iWatchers.Count();
-    for ( TInt i = 0; i < count; i++ )
-        {
-        CSimplePluginEntityWatcher* temp = (iWatchers[i]);
-        if ( !temp->PresentityId().CompareF( aPresentityid ))
-            {
-            return temp;
-            }
-        }
-
-    // If watcher was not found, crete it when wanted so.
-    if ( !aCreate )
-        {
-        return NULL;
-        }
-    else
-        {
-        CSimplePluginEntityWatcher* watcher = CSimplePluginEntityWatcher::NewL(
-            iConnObs, iConnection, *this );
-        iWatchers.Append( watcher );
-        return watcher;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::DeleteWatcher
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::DeleteWatcher(
-    const TDesC8& aPresentityid )
-    {
-
-#ifdef _DEBUG
-    PluginLogger::Log( _L("PluginWatcher: DeleteWatcher **"));
-#endif
-
-    TInt count = iWatchers.Count();
-    for ( TInt i = 0; i < count; i++ )
-        {
-        CSimplePluginEntityWatcher* temp = (iWatchers[i]);
-        if ( !temp->PresentityId().CompareF( aPresentityid ) )
-            {
-            iWatchers.Remove( i );
-            iWatchers.GranularCompress();
-            delete temp;
-            break;
-            }
-        else
-            {
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::GetEntitiesInListL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::GetEntitiesInListL(
-    const TDesC& aList, MXIMPObjectCollection& aMembers )
-    {
-    __ASSERT_DEBUG( iXdmUtils, User::Leave( KErrCorrupt ) );
-
-    const TInt KMyGran = 10;
-    CPtrCArray* ids = new (ELeave) CPtrCArray( KMyGran );
-    CleanupStack::PushL( ids );      // << ids
-
-    CPtrCArray* dispNames = new (ELeave) CPtrCArray( KMyGran );
-    CleanupStack::PushL( dispNames  );      // << dispNames
-
-    iXdmUtils->GetEntitiesInListL( aList, *ids, *dispNames );
-
-    CopyGroupMembersToCollectionL( *ids, *dispNames, aMembers );
-
-    CleanupStack::PopAndDestroy( dispNames );
-    CleanupStack::PopAndDestroy( ids );
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::StartWatchingRlsL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::StartWatchingRlsL()
-    {
-    HBufC* buf = iXdmUtils->RlsServiceByResourceListLC( iPresIdentity->Des() );  // << buf
-
-    HBufC8* buf2 = NULL;
-    buf2 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( buf->Des() );
-    CleanupStack::PushL( buf2 ); // << buf2
-
-    CSimplePluginEntityWatcher* watcher = MatchWatcher2L( buf2->Des(), ETrue );
-
-    watcher->StartSubscribeListL( buf2->Des() );
-
-    watcher->SetSimpleNameL( buf2->Des() );
-
-    CleanupStack::PopAndDestroy( buf2 );  // >> buf2
-    CleanupStack::PopAndDestroy( buf );  // >> buf
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::SetPresIdentityL()
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::SetPresIdentityL(
-     const MXIMPIdentity& aPresentityId )
-     {
-     delete iPresIdentity;
-     iPresIdentity = NULL;
-     iPresIdentity = aPresentityId.Identity().AllocL();
-     }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::CompletePrFwReq
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::CompletePrFwReq( TInt aStatus )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginWatcher: CompletePrFwReq status=%d"), aStatus );
-#endif
-    iXdmState = EPluginIdle;
-
-    if ( !iCompleted )
-        {
-        iCompleted = ETrue;
-        // Convert error code when needed
-        if ( aStatus == KSimpleErrNotFound &&
-             ( iOperation == EPluginSubscribeGroup ||
-               iOperation == EPluginUnsubscribeGroup ))
-            {
-            aStatus = KPresenceErrUnknownPresentityGroup;
-            }
-        else if ( aStatus == KSimpleErrNotFound )
-            {
-            aStatus = KPresenceErrUnknownPresentity;
-            }
-        else
-            {
-            }
-        iConnObs.CompleteReq( iPrFwId, aStatus );
-        iPrFwId = TXIMPRequestId();
-        iOperation = EPluginUndef;
-        }
-    else
-        {
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::CompleteWatcher
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::CompleteWatcher( TInt aStatus )
-    {
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginWatcher: CompleteWatcher status=%d"), aStatus );
-#endif
-    // start to remove RLS service when needed.
-    if ( iOperation == EPluginUnsubscribeGroup && iXdmState == EPluginIdle )
-        {
-        TRAPD( err, iXdmUtils->FetchRlsL( iStatus ));
-        if ( err )
-            {
-            CompletePrFwReq( err );
-            }
-        else
-            {
-            iXdmState = EPluginFetchRls;
-            SetActive();
-            }
-        }
-    else
-        {
-        CompletePrFwReq( aStatus );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::StartXdmOperationL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::StartXdmOperationL()
-    {
-    TRAPD( err, DoStartXdmOperationL() );
-    if ( err )
-        {
-        User::Leave( CSimplePluginConnection::HarmonizeErrorCode( err ));
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::DoStartXdmOperationL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::DoStartXdmOperationL()
-    {
-    __ASSERT_DEBUG( !IsActive(), User::Leave( KErrCorrupt ) );
-    if ( !iXdmUtils )
-        {
-        iXdmUtils = iConnObs.XdmUtilsL();
-        }
-    iXdmUtils->InitializeXdmsOnlyL( iStatus );
-
-    iXdmState = EPluginInitXdm;
-
-    SetActive();
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::DoCancel
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::DoCancel(  )
-    {
-    iXdmUtils->Cancel();
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::RunL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::RunL(  )
-    {
-
-    TInt status = iStatus.Int();
-
-#ifdef _DEBUG
-    PluginLogger::Log(_L("PluginWatcher: RunL %d"), status );
-#endif
-    if ( !status )
-        {
-        // create RLS service first here
-        if ( iOperation == EPluginSubscribeGroup )
-            {
-            DoRunForSubscriptionL();
-            }
-        // remove RLS service when needed.
-        else if ( iOperation == EPluginUnsubscribeGroup )
-            {
-            DoRunForUnsubscriptionL();
-            }
-        else
-            {
-            // Idle state should not be completed. We should not come here
-            // because of PrFw core makes one request at a time.
-            }
-        }
-    else
-        {
-        CompletePrFwReq( status );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::RunError
-// ---------------------------------------------------------------------------
-//
-TInt CSimplePluginWatcher::RunError( TInt aError )
-    {
-    CompletePrFwReq( aError );
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::GetListContentL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::GetListContentL()
-    {
-    MXIMPObjectFactory& myFactory = iConnObs.ObjectFactory();
-    MProtocolPresentityGroupsDataHost& dataHost =
-        iConnObs.Host()->ProtocolPresenceDataHost().GroupsDataHost();
-
-    MXIMPObjectCollection* entities =
-        myFactory.NewObjectCollectionLC();          // << entities
-    GetEntitiesInListL( iPresIdentity->Des(), *entities );
-
-    // callback for data
-    MXIMPIdentity* id = myFactory.NewIdentityLC();  // << id
-    id->SetIdentityL( iPresIdentity->Des() );
-#ifdef _DEBUG
-    PluginLogger::Log(
-        _L("PluginWatcher: callback HandlePresentityGroupContentL"));
-#endif
-    dataHost.HandlePresentityGroupContentL( id, entities );
-    CleanupStack::Pop();                            // >> id
-    CleanupStack::Pop();                            // >> entities
-
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::CopyGroupMembersToCollectionL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::CopyGroupMembersToCollectionL(
-    CPtrCArray& aIds, CPtrCArray& aNames, MXIMPObjectCollection& aCollection)
-    {
-    MXIMPObjectFactory& myFactory = iConnObs.ObjectFactory();
-    MPresenceObjectFactory& myPresenceFactory = iConnObs.PresenceObjectFactory();
-    TInt count = aIds.Count();
-    for ( TInt i=0; i < count; i++ )
-        {
-        // create here MPresentityGroupMemberInfo
-        MPresentityGroupMemberInfo* info = myPresenceFactory.NewPresentityGroupMemberInfoLC(); // << info
-        MXIMPIdentity* id = myFactory.NewIdentityLC();  // << id
-        id->SetIdentityL( aIds[i] );
-        info->SetGroupMemberIdL( id );
-        CleanupStack::Pop(); // >> id
-
-        info->SetGroupMemberDisplayNameL( aNames[i] );
-        aCollection.AddObjectL( info );
-        CleanupStack::Pop(); // >> info
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::DoRunForSubscriptionL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::DoRunForSubscriptionL( )
-    {
-    if ( iXdmState == EPluginInitXdm )
-        {
-        // get members of the list first
-        GetListContentL();
-
-        // Fetch RLS document first before modifying the data.
-        TRAPD( err, iXdmUtils->FetchRlsL( iStatus ));
-        if ( err )
-            {
-            CompletePrFwReq( err );
-            }
-        else
-            {
-            iXdmState = EPluginFetchRls;
-            SetActive();
-            }
-        }
-    else if ( iXdmState == EPluginFetchRls )
-        {
-        // Create RLS document service
-        iXdmUtils->AddRlsGroupL( iPresIdentity->Des() );
-        iXdmState = EPluginAddGroupMember;
-        iXdmUtils->CommitRlsL( iStatus );
-        SetActive();
-        }
-    else
-        {
-        StartWatchingRlsL();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginWatcher::DoRunForUnsubscriptionL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginWatcher::DoRunForUnsubscriptionL( )
-    {
-    TInt status = iStatus.Int();
-    if ( iXdmState == EPluginIdle )
-        {
-        TRAPD( err, iXdmUtils->FetchRlsL( iStatus ));
-        if ( err )
-            {
-            CompletePrFwReq( err );
-            }
-        else
-            {
-            iXdmState = EPluginFetchRls;
-            SetActive();
-            }
-        }
-    else if ( iXdmState == EPluginFetchRls )
-        {
-        TRAPD( err, iXdmUtils->RemoveRlsServiceByResourceListL( iPresIdentity->Des(), iStatus ));
-        if ( err )
-            {
-            CompletePrFwReq( err );
-            }
-        else
-            {
-            iXdmState = EPluginRemoveGroupMember;
-            SetActive();
-            }
-        }
-    else
-        {
-        CompletePrFwReq( status );
-        }
-    }
-
-
-
-// End of file