--- a/simpledatamodeladapter/src/presencepluginxdmutils.cpp Thu Aug 19 10:19:02 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1687 +0,0 @@
-/*
-* Copyright (c) 2006-2010 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: IETF SIMPLE Protocol implementation for XIMP Framework
-*
-*/
-
-
-#include <e32std.h>
-#include <utf.h>
-#include <e32test.h>
-#include <ximpobjectfactory.h>
-#include <presenceobjectfactory.h>
-#include <ximpidentity.h>
-#include <ximpobjectcollection.h>
-#include <presentitygroupinfo.h>
-#include <presentitygroupmemberinfo.h>
-#include <XdmEngine.h>
-#include <XdmDocument.h>
-#include <XdmProtocolInfo.h>
-#include <XdmDocumentNode.h>
-#include <XdmNodeAttribute.h>
-#include <XdmErrors.h>
-#include <pressettingsapi.h> //for TPresSettingsSet
-#include <XdmSettingsApi.h>
-#include <XdmProtocolUidList.h>
-#include <avabilitytext.h>
-
-#include "presencepluginxdmpresrules.h"
-#include "mpresencepluginconnectionobs.h"
-#include "presenceplugincommon.h"
-#include "presencepluginxdmutils.h"
-#include "presencepluginvirtualgroup.h"
-#include "presencepluginauthorization.h"
-#include "presenceplugindata.h"
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::CPresencePluginXdmUtils()
-// ---------------------------------------------------------------------------
-//
-CPresencePluginXdmUtils::CPresencePluginXdmUtils(
- MPresencePluginConnectionObs& aObs , TInt aXmdId, TBool aLocalmode )
- : CActive( CActive::EPriorityStandard ),
- iConnObs(aObs), iSettingsId(aXmdId),
- iXdmState(EStateIdle), iOperation( ENoOperation ),
- iPresXdmOk( EFalse ), iXdmOk( EFalse ),
- iRulesUpdateState(EStateNoOperation), iLocalMode( aLocalmode )
- {
- CActiveScheduler::Add( this );
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::ConstructL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::ConstructL( )
- {
-
- //If we are in normalmode we need presence rules too
- if ( !iLocalMode )
- {
- DP_SDA("CPresencePluginXdmUtils::ConstructL NormalMode");
- iXdmPresRules = CPresencePluginXdmPresRules::NewL(
- iSettingsId, EFalse );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::NewL()
-// ---------------------------------------------------------------------------
-//
-CPresencePluginXdmUtils* CPresencePluginXdmUtils::NewL(
- MPresencePluginConnectionObs& aObs, TInt aXmdId, TBool aLocalmode )
- {
- CPresencePluginXdmUtils* self =
- new( ELeave ) CPresencePluginXdmUtils( aObs, aXmdId, aLocalmode );
- CleanupStack::PushL( self );
- self->ConstructL( );
- CleanupStack::Pop( self );
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::~CPresencePluginXdmUtils()
-// ---------------------------------------------------------------------------
-//
-CPresencePluginXdmUtils::~CPresencePluginXdmUtils()
- {
- DP_SDA("CPresencePluginXdmUtils::~CPresencePluginXdmUtils");
- if ( iXdmDoc )
- {
- DP_SDA("CPresencePluginXdmUtils::~CPresencePluginXdmUtils 1");
- if (iXdmEngine)
- {
- DP_SDA("CPresencePluginXdmUtils::~CPresencePluginXdmUtils del doc");
- TRAP_IGNORE( iXdmEngine->DeleteDocumentModelL( iXdmDoc ));
- }
- }
-
- DP_SDA("CPresencePluginXdmUtils::~CPresencePluginXdmUtils 3");
- delete iXdmEngine;
- iXdmEngine = NULL;
-
-
- DP_SDA("CPresencePluginXdmUtils::~CPresencePluginXdmUtils 4");
- delete iXdmPresRules;
- iXdmPresRules = NULL;
-
-
- DP_SDA("CPresencePluginXdmUtils::~CPresencePluginXdmUtils 5");
- delete iEntityUri;
- iEntityUri = NULL;
-
- iBlockedContacts.ResetAndDestroy();
-
- DP_SDA("CPresencePluginXdmUtils::~CPresencePluginXdmUtils end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::InitializeXdmL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::InitializeXdmL( TRequestStatus& aStatus )
- {
- DP_SDA("CPresencePluginXdmUtils::InitializeXdmL");
-
- aStatus = KRequestPending;
- iClientStatus = &aStatus;
-
- // if resource-list not ready
- if ( !iXdmOk )
- {
- DP_SDA("CPresencePluginXdmUtils::InitializeXdmL !iXdmOk");
- if ( !iLocalMode )
- {
- DP_SDA("CPresencePluginXdmUtils::InitializeXdmL NormalMode");
- GetXdmListsL( ETrue, EFalse );
- }
- else
- {
- DP_SDA("CPresencePluginXdmUtils::InitializeXdmL LocalMode");
- GetXdmListsL( ETrue, ETrue );
- }
- }
- else if ( !iPresXdmOk && !iLocalMode )
- {
- DP_SDA("CPresencePluginXdmUtils::InitializeXdmL !iPresXdmOk");
- GetXdmRulesL();
- }
- else
- {
- DP_SDA("CPresencePluginXdmUtils::InitializeXdmL All is OK ");
- // All is ok
- DP_SDA("CPresencePluginXdmUtils::InitializeXdmL SEND COMPLETE")
- CompleteClientReq( KErrNone );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::InitializeXdmL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::InitializePresRulesL( )
- {
- DP_SDA("CPresencePluginXdmUtils:: MakeInitialRules");
- iXdmState = ECreateXdmRules;
- iRulesUpdateState = EStateInitializeRules;
- iXdmPresRules->MakeInitialRulesDocumentL( this );
- UpdateXdmRulesL();
- DP_SDA("CPresencePluginXdmUtils:: MakeInitialRules done");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::GetXdmRulesL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::GetXdmRulesL()
- {
- DP_SDA("CPresencePluginXdmUtils:: GetXdmRulesL");
-
- if ( !iXdmPresRules )
- {
- // get data from a network if not done so yet
- if ( !iLocalMode )
- {
- iXdmPresRules = CPresencePluginXdmPresRules::NewL(
- iSettingsId, EFalse );
- }
- else
- {
- /*localmode*/
- //iXdmPresRules
- //= CPresencePluginXdmPresRules::NewL( iSettingsId, ETrue );
- }
- }
-
- if( !iLocalMode && iXdmPresRules )
- {
- User::LeaveIfError( iXdmPresRules->UpdateFromServerL( this ));
- }
- iXdmState = EGetXdmRules;
- DP_SDA("CPresencePluginXdmUtils:: GetXdmRulesL done");
- DP_SDA("CPresencePluginXdmUtils::GetXdmRulesL - add buddies to virtual");
- AddIdentityToVirtualListL( KPresenceBuddyList );
-
- DP_SDA("CPresencePluginXdmUtils::GetXdmRulesL - add blocked to virtual");
- AddIdentityToVirtualListL( KPresenceBlockedList );
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::InitializeXdmsOnlyL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::InitializeXdmsOnlyL( TRequestStatus& aStatus )
- {
- DP_SDA("CPresencePluginXdmUtils::InitializeXdmsOnlyL");
- aStatus = KRequestPending;
- iClientStatus = &aStatus;
-
- if ( !iXdmOk )
- {
- DP_SDA("CPresencePluginXdmUtils::InitializeXdmsOnlyL 1");
- GetXdmListsL( EFalse, EFalse );
- }
- else
- {
- DP_SDA("CPresencePluginXdmUtils::InitializeXdmsOnlyL all ok");
- // All is ok
- DP_SDA("CPresencePluginXdmUtils::InitializeXdmsOnlyL SEND COMPLETE")
- CompleteClientReq( KErrNone );
- }
- DP_SDA("CPresencePluginXdmUtils::InitializeXdmsOnlyL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::CheckXdmDoc()
-// ---------------------------------------------------------------------------
-//
-TBool CPresencePluginXdmUtils::CheckXdmDoc()
- {
- DP_SDA("CPresencePluginXdmUtils::CheckXdmDoc");
-
- if ( iXdmDoc )
- {
- CXdmDocumentNode* root = iXdmDoc->DocumentRoot();
- DP_SDA("CPresencePluginXdmUtils::CheckXdmDoc2");
- if( root )
- {
- TInt count = root->NodeCount();
- DP_SDA2("CPresencePluginXdmUtils::CheckXdmDoc count %d", count);
- if ( !count )
- {
- DP_SDA("CPresencePluginXdmUtils::CheckXdmDoc NotFound");
- iXdmOk = EFalse;
- }
- else
- {
- DP_SDA("CPresencePluginXdmUtils::CheckXdmDoc file ok");
- iXdmOk = ETrue;
- }
- }
- }
- else
- {
- DP_SDA("CPresencePluginXdmUtils::CheckXdmDoc file False");
- iXdmOk = EFalse;
- }
-
- return iXdmOk;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::CheckIfError
-// ---------------------------------------------------------------------------
-//
-TInt CPresencePluginXdmUtils::CheckIfErrorL( TInt aMyStatus )
- {
- TInt myStatus = aMyStatus;
- DP_SDA2("CPresencePluginXdmUtils::CheckIfError ErrorCode %d ", myStatus);
- if ( myStatus == KErrTimedOut )
- {
- DP_SDA("CPresencePluginXdmUtils::CheckIfError TimeOut error");
- myStatus = KErrTimedOut;
- User::Leave( KErrTimedOut );
- }
- else if ( myStatus == KErrCouldNotConnect ||
- myStatus == KXcapErrorNetworkNotAvailabe )
- {
- DP_SDA("CheckIfError KErrCouldNotConnect error");
- myStatus = aMyStatus;
- }
- else if ( myStatus == KXcapErrorHttpNotFound )
- {
- DP_SDA("CheckIfError KXcapErrorHttpNotFound");
- myStatus = aMyStatus;
- }
- else if ( myStatus == KXcapErrorAuthentication )
- {
- DP_SDA("CPresencePluginXdmUtils::CheckIfError auth error");
- myStatus = aMyStatus;
- }
- else if ( myStatus == KXcapErrorTooManyOccurencies )
- {
- DP_SDA("CPresencePluginXdmUtils KXcapErrorTooManyOccurencies");
- myStatus = 0;
- }
- else if( myStatus == KErrDisconnected )
- {
- myStatus = aMyStatus;
- User::Leave( KErrCancel );
- }
- else if( myStatus == KXcapErrorHttpPrecondFailed )
- {
- DP_SDA("CheckIfError KXcapErrorHttpPrecondFailed");
- myStatus = aMyStatus;
- }
- else if ( KErrNoMemory == myStatus )
- {
- DP_SDA("CheckIfError KErrNoMemory");
- User::Leave( KErrNoMemory );
- }
- else
- {
- DP_SDA("CPresencePluginXdmUtils::CheckIfError ERROR");
- myStatus = aMyStatus;
- }
- return myStatus;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::RunL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::RunL( )
- {
- DP_SDA("CPresencePluginXdmUtils::RunL");
- TPluginXdmState origState = iXdmState;
- iXdmState = EStateIdle;
- TInt myStatus = iStatus.Int();
-
- DP_SDA2("CPresencePluginXdmUtils::RunL mystatus %d ", myStatus);
- DP_SDA2("CPresencePluginXdmUtils::RunL state %d ", origState);
- DP_SDA2("CPresencePluginXdmUtils:: ClientStatus %d",iClientStatus->Int() );
-
- if ( myStatus == KErrCancel )
- {
- DP_SDA("CPresencePluginXdmUtils::RunL CANCEL SEND COMPLETE")
- CompleteClientReq( KErrCancel );
- }
-
- switch ( origState )
- {
- case EGetXdmLists:
- case EGetXdmListsOnly:
- {
- DoGetXdmListsL( myStatus, origState );
- }
- break;
-
- case ECreateXdmLists:
- {
- DoCreateXdmListsL( myStatus, origState, EFalse );
- }
- break;
-
- case ECreateXdmListsOnly:
- {
- DoCreateXdmListsL( myStatus, origState, ETrue );
- }
- break;
-
- case EGetXdmBlockList:
- {
- DP_SDA("RunL EGetXdmBlockList SEND COMPLETE");
- CompleteClientReq( KErrNone );
- }
- break;
-
- case EUpdateXdmList:
- {
- DoUpdateXdmListsL( myStatus, origState );
- }
- break;
-
- case EUpdateBlockedContactPresenceCache:
- DoUpdateBlockedContactPresenceCacheL( myStatus );
- break;
-
- default:
- {
- DP_SDA("CPresencePluginXdmUtils::RunL last else");
- //check myStatus error
- myStatus = CheckIfErrorL( myStatus );
-
- if ( myStatus )
- {
- // complete reqular request
- DP_SDA("CPresencePluginXdmUtils::RunL SEND LAST COMPLETE");
- CompleteClientReq( myStatus );
- }
- DP_SDA("CPresencePluginXdmUtils::RunL default end")
- }
- break;
-
- }
- DP_SDA("CPresencePluginXdmUtils::RunL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::DoUpdateXdmLists()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::DoUpdateXdmListsL(
- TInt aMyStatus,
- TPluginXdmState /*aOrigState*/)
- {
- DP_SDA("CPresencePluginXdmUtils::DoUpdateXdmLists EUpdateXdmList");
- if ( !iLocalMode )
- {
- DP_SDA("CPresencePluginXdmUtils::DoUpdateXdmLists updaterules");
- if( aMyStatus )
- {
- DP_SDA("DoUpdateXdmLists updaterules error");
- aMyStatus = CheckIfErrorL( aMyStatus );
- CompleteClientReq( aMyStatus );
- }
- else
- {
- DP_SDA("DoUpdateXdmLists updaterules else");
- UpdateXdmRulesL();
- }
- }
- else
- {
- DP_SDA("EUpdateXdmList LOCALMODE SEND COMPLETE");
- aMyStatus = CheckIfErrorL( aMyStatus );
- CompleteClientReq( aMyStatus );
- }
- iRulesUpdateState = EStateNoOperation;
- DP_SDA("CPresencePluginXdmUtils::DoUpdateXdmLists EUpdateXdmList end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::DoCreateXdmLists()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::DoCreateXdmListsL(
- TInt aMyStatus,
- TPluginXdmState /*aOrigState*/,
- TBool aOnlyResourceList )
- {
- DP_SDA("CPresencePluginXdmUtils::DoCreateXdmListsL ECreateXdmLists");
- //check myStatus error
- aMyStatus = CheckIfErrorL( aMyStatus );
- if( !aOnlyResourceList )
- {
- if ( aMyStatus )
- {
- DP_SDA("DoCreateXdmLists ECreateXdmLists SEND COMPLETE");
- CompleteClientReq( aMyStatus );
- }
- else if ( !iLocalMode )
- {
- DP_SDA("ECreateXdmLists !myStatus GetXdmRules");
- iXdmOk = ETrue;
- GetXdmRulesL();
- }
- else if ( iLocalMode )
- {
- DP_SDA("DoCreateXdmLists ECreateXdmLists SEND COMPLETE 2");
- iXdmOk = ETrue;
- CompleteClientReq( aMyStatus );
- }
- }
- else
- {
- //check myStatus error
- aMyStatus = CheckIfErrorL( aMyStatus );
- if ( aMyStatus == KErrTimedOut )
- {
- DP_SDA("DoCreateXdmLists EGetXdmListsOnly 1");
- aMyStatus = 0;
- }
- if ( !aMyStatus )
- {
- DP_SDA("DoCreateXdmLists EGetXdmListsOnly 2");
- iXdmOk = ETrue;
- }
-
- if( !(KXcapErrorNetworkNotAvailabe == aMyStatus ||
- KErrCouldNotConnect == aMyStatus ) )
- {
- DP_SDA("DoCreateXdmLists EGetXdmListsOnly SEND COMPLETE");
- CompleteClientReq( aMyStatus );
- }
- }
- DP_SDA("CPresencePluginXdmUtils::DoCreateXdmListsL ECreateXdmLists end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::DoGetXdmLists()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::DoGetXdmListsL(
- TInt aMyStatus,
- TPluginXdmState aOrigState )
- {
- DP_SDA("CPresencePluginXdmUtils::DoGetXdmLists EGetXdmLists");
- //check myStatus error
- aMyStatus = CheckIfErrorL( aMyStatus );
-
- if ( aMyStatus )//Check is file includes nodes
- {
- DP_SDA("CPresencePluginXdmUtils::DoGetXdmLists CreateXDM");
- // no resource-list, let's start to create it.
- CreateXdmListsL( ETrue );
- }
- else
- {
- DP_SDA("CPresencePluginXdmUtils::DoGetXdmLists EGetXdmLists else");
- if( iLocalMode )
- {
- //Check if document empty
- TBool empty = CheckXdmDoc();
- if( !empty )
- {
- CreateXdmListsL( ETrue );
- }
- else
- {
- iXdmOk = ETrue;
- DP_SDA("DoGetXdmLists Localmode SEND COMPLETE");
- CompleteClientReq( KErrNone );
- }
- }
- else
- {
- iXdmOk = ETrue;
- if ( !iPresXdmOk && !iLocalMode && aOrigState == EGetXdmLists )
- {
- DP_SDA("CPresencePluginXdmUtils::DoGetXdmLists GetXDM");
- GetXdmRulesL();
- }
- else
- {
- DP_SDA("CPresencePluginXdmUtils::DoGetXdmLists SEND COMPLETE");
- CompleteClientReq( KErrNone );
- }
- }
- }
- DP_SDA("CPresencePluginXdmUtils::DoGetXdmLists end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::DoCancel()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::DoCancel( )
- {
- DP_SDA("CPresencePluginXdmUtils::DoCancel");
- iOperation = EXdmCancel;
-
- if ( iXdmState == EGetXdmLists || iXdmState == ECreateXdmLists ||
- iXdmState == EUpdateXdmRules || iXdmState == EUpdateXdmList ||
- iXdmState == EGetXdmBlockList || iXdmState == ECreateXdmRules ||
- iXdmState == ESubsBlockList ||
- iXdmState == EGetResourceListFromServer ||
- iXdmState == EGetXdmListsOnly || iXdmState == ECreateXdmListsOnly )
- {
- DP_SDA("CPresencePluginXdmUtils::DoCancel list get or create");
- iXdmState = ECancelDocument;
- iXdmEngine->CancelUpdate( iXdmDoc );
- // cancel presrules too
- iXdmPresRules->Cancel();
- }
- else
- {
- iStatus = KRequestPending;
- TRequestStatus* s= &iStatus;
- DP_SDA("CPresencePluginXdmUtils::DoCancel SEND COMPLETE");
- User::RequestComplete( s, KErrCancel );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::RunError()
-// ---------------------------------------------------------------------------
-//
-TInt CPresencePluginXdmUtils::RunError( TInt aError )
- {
- DP_SDA("CPresencePluginXdmUtils::RunError");
- // complete the open request
- CompleteClientReq( aError );
- return KErrNone;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::AddEntityToGrantedL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::AddEntityToGrantedL(
- const TDesC& aUri,
- TRequestStatus& aStatus )
- {
- DP_SDA("CPresencePluginXdmUtils::AddEntityToGrantedL");
- DP_SDA2("CPresencePluginXdmUtils::AddEntityToGrantedL, uri: %S", &aUri );
-
- TRAPD( err, iEntityUri = aUri.AllocL() );
- DP_SDA2(" AddEntityToGrantedL, uri alloc err: %d", err );
-
- //Add entity to virtualGroup
- iConnObs.SubscribedContacts()->AddEntityL( iEntityUri->Des() );
-
- if ( !err )
- {
- DP_SDA("CPresencePluginXdmUtils::AddEntityToGrantedL !err");
- iXdmState = EUpdateXdmList;
- iClientStatus = &aStatus;
- iOperation = EXdmAddUserToGroup;
- iRulesUpdateState = EStateAddToWhiteList;
-
- //add user to resouce-list list
- DoAddUserToListL( KPresenceBuddyList, aUri );
- DP_SDA("CPresencePluginXdmUtils::AddEntityToGrantedL 1");
- UpdateXdmsL();
-
- *iClientStatus = KRequestPending;
- DP_SDA("CPresencePluginXdmUtils::AddEntityToGrantedL end");
- }
- else
- {
- DP_SDA("AddEntityToGrantedL else error SEND COMPLETE");
- //If error we can complete request
- CompleteClientReq( KErrNone );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::AddEntityToBlockedL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::AddEntityToBlockedL(
- const TDesC& aUri,
- TRequestStatus& aStatus )
- {
- DP_SDA("CPresencePluginXdmUtils::AddEntityToBlockedL");
- iClientStatus = &aStatus;
-
- if( iLocalMode )
- {
- //Block is not used in localmode
- DP_SDA("AddEntityToBlockedL localmode rules not support");
- CompleteClientReq( KErrNotSupported );
- }
- else
- {
- DP_SDA("CPresencePluginXdmUtils::AddEntityToBlockedL !localmode");
- TRAPD(err, iEntityUri = aUri.AllocL() );
- //Remove entity form subscribed virtual group
- iConnObs.SubscribedContacts()->RemoveEntityL( iEntityUri->Des() );
-
- if ( !err )
- {
- DP_SDA("CPresencePluginXdmUtils::AddEntityToBlockedL no error");
- iXdmState = EUpdateXdmList;
- iOperation = EXdmAddUserToGroup;
- iRulesUpdateState = EStateAddToBlockList;
-
- DoAddUserToListL( KPresenceBlockedList, aUri );
- UpdateXdmsL();
-
- *iClientStatus = KRequestPending;
- DP_SDA("CPresencePluginXdmUtils::AddEntityToBlockedL ready");
- }
- else
- {
- //If error we can complete request
- DP_SDA("AddEntityToBlockedL SEND COMPLETE");
- CompleteClientReq( KErrNone );
- }
- }
- DP_SDA("CPresencePluginXdmUtils::AddEntityToBlockedL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::DoAddUserToListL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::DoAddUserToListL(
- const TDesC& aList,
- const TDesC& aUri )
- {
- DP_SDA("CPresencePluginXdmUtils::DoAddUserToListL");
- DP_SDA2("CPresencePluginXdmUtils::DoAddUserToListL aList: %S", &aList);
- DP_SDA2("CPresencePluginXdmUtils::DoAddUserToListL aUri: %S", &aUri);
-
- using namespace NPresencePlugin::NPresence;
-
- CXdmDocumentNode* root = iXdmDoc->DocumentRoot();
- CXdmDocumentNode* foundNode = SearchListUnderParentL( root, aList );
-
- if ( foundNode )
- {
- DP_SDA("CPresencePluginXdmUtils::DoAddUserToListL found");
- if ( !CheckIfEnityExistL( aList, aUri ) )
- {
- DP_SDA("DoAddUserToListL entity not exist");
- if ( foundNode->IsEmptyNode() )
- {
- DP_SDA("DoAddUserToListL IsEmptyNode");
- foundNode->SetEmptyNode( EFalse );
- }
-
- DP_SDA("CPresencePluginXdmUtils::DoAddUserToListL newNode");
- CXdmDocumentNode* newNode =
- foundNode->CreateChileNodeL( KPresenceEntry );
- DP_SDA("DoAddUserToListL entry attribute");
- CXdmNodeAttribute* attributeEntryUri =
- newNode->CreateAttributeL( KPresenceUri );
- DP_SDA("CPresencePluginXdmUtils::DoAddUserToListL set entry");
- attributeEntryUri->SetAttributeValueL( aUri );
- DP_SDA("CPresencePluginXdmUtils::DoAddUserToListL Append");
- iXdmDoc->AppendL( );
- }
- }
- else
- {
- DP_SDA("CPresencePluginXdmUtils::DoAddUserToListL leave");
- User::Leave( KErrNotFound );
- }
- DP_SDA("CPresencePluginXdmUtils::DoAddUserToListL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::CheckIfEnityExistL
-// ---------------------------------------------------------------------------
-//
-TBool CPresencePluginXdmUtils::CheckIfEnityExistL(
- const TDesC& aList,
- const TDesC& aUri )
- {
- DP_SDA("CPresencePluginXdmUtils::CheckIfEnityExist");
-
- using namespace NPresencePlugin::NPresence;
-
- CXdmNodeAttribute* attr = NULL;
- RPointerArray<CXdmDocumentNode> nodes;
- CleanupClosePushL( nodes );
- TBool state( EFalse );
-
- CXdmDocumentNode* root = iXdmDoc->DocumentRoot();
- CXdmDocumentNode* foundNode = SearchListUnderParentL( root, aList );
-
- if ( foundNode )
- {
- DP_SDA("CPresencePluginXdmUtils::CheckIfEnityExist check nodes");
- TInt findErr = foundNode->Find( KPresenceEntry, nodes );
- DP_SDA2("CheckIfEnityExist - findErr: %d", findErr );
-
- if ( findErr )
- {
- DP_SDA("CheckIfEnityExist Enity not exist ");
- state = EFalse;
- }
- else
- {
- DP_SDA("CPresencePluginXdmUtils::CheckIfEnityExist Else");
- TInt nodeCount = nodes.Count();
- for ( TInt i = 0; i < nodeCount; i++ )
- {
- CXdmDocumentNode* currNode = nodes[i];
- attr = ( currNode )->Attribute( KPresenceUri );
-
- TBool uriMatch( EFalse );
- uriMatch = CompareUriWithoutPrefixL(
- aUri, attr->AttributeValue() );
-
- if ( attr && uriMatch )
- {
- DP_SDA("CheckIfEnityExist entity exists");
- //Enity is exist
- state = ETrue;
- break;
- }
- }
- }
- }
- DP_SDA("CPresencePluginXdmUtils::CheckIfEnityExist Destroy nodes");
- CleanupStack::PopAndDestroy( &nodes ); // >>> nodes
- return state;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::SearchListUnderParentL
-// ---------------------------------------------------------------------------
-//
-CXdmDocumentNode* CPresencePluginXdmUtils::SearchListUnderParentL(
- CXdmDocumentNode* aParent,
- const TDesC& aName )
- {
- DP_SDA("CPresencePluginXdmUtils::SearchListUnderParentL");
-
- using namespace NPresencePlugin::NPresence;
-
- if ( !aParent )
- {
- DP_SDA("CPresencePluginXdmUtils::SearchListUnderParentL return NULL");
- return NULL;
- }
-
- RPointerArray<CXdmDocumentNode> resultArray;
- RPointerArray<SXdmAttribute16> attributeArray;
-
- CleanupClosePushL( resultArray ); // <<< resultArray
- CleanupClosePushL( attributeArray ); // <<< attributeArray
-
- SXdmAttribute16 attr;
- attr.iName.Set( KPresenceName );
- attr.iValue.Set( aName );
- attributeArray.AppendL( &attr );
-
- CXdmDocumentNode* currNode = NULL;
-
- aParent->Find( KPresenceList, resultArray, attributeArray );
-
- TInt count = resultArray.Count();
- DP_SDA2("SearchListUnderParentL node count %d",count);
- for ( TInt i=0; i < count; i++ )
- {
- currNode = resultArray[i];
- CXdmDocumentNode* parent = currNode->Parent();
- if ( parent == aParent )
- {
- DP_SDA("SearchListUnderParentL parent MATCH");
- break;
- }
- currNode = NULL;
- }
-
- CleanupStack::PopAndDestroy( &attributeArray); // >>> attributeArray
- CleanupStack::PopAndDestroy( &resultArray ); // >>> resultArray
- DP_SDA("CPresencePluginXdmUtils::SearchListUnderParentL return");
- return currNode;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::RemoveEntityFromGrantedL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::RemoveEntityFromGrantedL(
- const TDesC& aUri,
- TRequestStatus& aStatus )
- {
- DP_SDA("CPresencePluginXdmUtils::RemoveEntityFromGrantedL");
-
- iEntityUri = aUri.AllocL();
- iConnObs.SubscribedContacts()->RemoveEntityL( iEntityUri->Des() );
-
- iClientStatus = &aStatus;
- *iClientStatus = KRequestPending;
-
- iRulesUpdateState = EStateRemoveFromWhiteList;
- iOperation = EXdmRemoveUserFromGroup;
-
- TRAPD( err, DoRemoveUserFromListL( KPresenceBuddyList, aUri ) );
-
- if ( !err )
- {
- // send to the server and start wait a response
- UpdateXdmsL();
- iXdmState = EUpdateXdmList;
- }
- else
- {
- //complete request with error
- DP_SDA2( "RemoveEntityFromGrantedL -DoRemoveUserFromListL error = %d", err );
- CompleteClientReq( err );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::RemoveEntityFromBlockedL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::RemoveEntityFromBlockedL(
- const TDesC& aUri,
- TRequestStatus& aStatus )
- {
- DP_SDA("CPresencePluginXdmUtils::RemoveEntityFromBlockedL");
- TRAPD(err, iEntityUri = aUri.AllocL() );
-
- if ( !err )
- {
- iClientStatus = &aStatus;
- iRulesUpdateState = EStateRemoveFromBlackList;
- iOperation = EXdmRemoveUserFromGroup;
-
- DoRemoveUserFromListL( KPresenceBlockedList, aUri );
- // send to the server and start wait a response
- UpdateXdmsL();
- iXdmState = EUpdateXdmList;
- *iClientStatus = KRequestPending;
- }
- else
- {
- //If error we can complete request
- DP_SDA("RemoveEntityFromBlockedL SEND COMPLETE");
- CompleteClientReq( KErrNone );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::DoRemoveUserFromListL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::DoRemoveUserFromListL(
- const TDesC& aList,
- const TDesC& aUri )
- {
- DP_SDA("CPresencePluginXdmUtils::DoRemoveUserFromListL");
- CXdmNodeAttribute* attr = NULL;
-
- using namespace NPresencePlugin::NPresence;
-
- RPointerArray<CXdmDocumentNode> lists;
- CleanupClosePushL( lists );
-
- RPointerArray<CXdmDocumentNode> nodes;
- CleanupClosePushL( nodes );
-
- CXdmDocumentNode* root = iXdmDoc->DocumentRoot();
- CXdmDocumentNode* foundNode = SearchListUnderParentL( root, aList );
- if ( foundNode )
- {
- DP_SDA("CPresencePluginXdmUtils::DoRemoveUserFromListL Node Found");
- User::LeaveIfError( foundNode->Find( KPresenceEntry, nodes ));
- TInt nodeCount = nodes.Count();
- for ( TInt i = 0; i < nodeCount; i++ )
- {
- CXdmDocumentNode* currNode = nodes[i];
- attr = ( currNode )->Attribute( KPresenceUri );
-
- TBool uriMatch( EFalse );
- uriMatch = CompareUriWithoutPrefixL(
- aUri, attr->AttributeValue() );
-
- if ( attr && uriMatch )
- {
- DP_SDA(" DoRemoveUserFromListL Node Found, do delete");
-
- // This is the user we are looking for deletion.
- //First remove currNode form model
- iXdmDoc->RemoveFromModelL( currNode );
- // Update model to server
- iXdmDoc->AppendL();
- break;
- }
- }
- }
- else
- {
- DP_SDA("CPresencePluginXdmUtils::DoRemoveUserFromListL Leave");
- User::Leave( KErrNotFound );
- }
-
- CleanupStack::PopAndDestroy( &nodes ); // >>> nodes
- CleanupStack::PopAndDestroy( &lists ); // >>> lists
- DP_SDA("CPresencePluginXdmUtils::DoRemoveUserFromListL END");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::SubscribeBuddyListL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::SubscribeBuddyListL(
- RPointerArray<MXIMPIdentity>& aMembers )
- {
- DP_SDA("CPresencePluginXdmUtils::SubscribeBuddyListL");
-
- iOperation = EXdmGetBuddyList;
- DoGetListMembersL( KPresenceBuddyList, aMembers );
-
- DP_SDA("CPresencePluginXdmUtils::SubscribeBuddyListL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::SubscribeBlockListL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::SubscribeBlockListL(
- RPointerArray<MXIMPIdentity>& aMembers )
- {
- DP_SDA("CPresencePluginXdmUtils::SubscribeBlockListL");
-
- if ( !iLocalMode )
- {
- DP_SDA("CPresencePluginXdmUtils::SubscribeBlockListL !iLocalMode");
- iOperation = EXdmGetBlockedList;
- DoGetListMembersL( KPresenceBlockedList, aMembers );
- }
- DP_SDA("CPresencePluginXdmUtils::SubscribeBlockListL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::DoGetListMembersL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::DoGetListMembersL(
- const TDesC& aList,
- RPointerArray<MXIMPIdentity>& aMembers )
- {
- DP_SDA("CPresencePluginXdmUtils::DoGetListMembersL");
- using namespace NPresencePlugin::NPresence;
-
- aMembers.Reset();
-
- RPointerArray<CXdmDocumentNode> nodes;
- CleanupClosePushL( nodes );
-
- CXdmDocumentNode* listNode = NULL;
- CXdmNodeAttribute* attr = NULL;
-
- TBool found(EFalse);
-
- if ( iXdmDoc )
- {
- DP_SDA("CPresencePluginXdmUtils::DoGetListMembersL iXdmDoc");
- User::LeaveIfError( iXdmDoc->Find( KPresenceList, nodes ) );
- DP_SDA("CPresencePluginXdmUtils::DoGetListMembersL find ready");
- TInt count = nodes.Count();
- DP_SDA2("DoGetListMembersL find Count %d", count);
- for ( TInt i=0; i < count; i++ )
- {
- listNode = nodes[i];
- attr = listNode->Attribute( KPresenceName );
- if ( attr && !attr->AttributeValue().CompareF( aList ))
- {
- // That's the right list
- DP_SDA("DoGetListMembersL Target found");
- found = ETrue;
- break;
- }
- }
- }
-
- if ( found )
- {
- DP_SDA("CPresencePluginXdmUtils::DoGetListMembersL found");
- MXIMPObjectFactory& myFactory = iConnObs.ObjectFactory();
- nodes.Reset();
- TInt err = listNode->Find( KPresenceEntry, nodes );
- DP_SDA2("CPresencePluginXdmUtils::DoGetListMembersL err %d", err);
- if( !err )
- {
- DP_SDA("CPresencePluginXdmUtils::DoGetListMembersL Entry found");
- TInt nodeCount = nodes.Count();
- for ( TInt i = 0; i < nodeCount; i++ )
- {
- attr = (nodes[i])->Attribute( KPresenceUri );
- if ( attr )
- {
- DP_SDA("DoGetListMembersL attr check");
- MXIMPIdentity* entity =
- myFactory.NewIdentityLC(); // << entity
- entity->SetIdentityL( attr->AttributeValue() );
- aMembers.AppendL( entity );
- CleanupStack::Pop(); // >> entity
- }
- }
- }
- }
- CleanupStack::PopAndDestroy( &nodes );
- DP_SDA("CPresencePluginXdmUtils::DoGetListMembersL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::GetXdmListsL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::GetXdmListsL(
- TBool aCreateRules,
- TBool aLocalMode )
- {
- DP_SDA("CPresencePluginXdmUtils::GetXdmListsL");
- //Normal Mode start
- if ( !iXdmEngine && !aLocalMode )
- {
- DP_SDA2("!iXdmEngine settingID = %d", iSettingsId);
-
-#ifdef _DEBUG
- //Get xdmSettings
- HBufC* accesPoint = TXdmSettingsApi::PropertyL(
- iSettingsId, EXdmPropToNapId );
- CleanupStack::PushL( accesPoint );
- DP_SDA2("CPresencePluginXdmUtils::GetXdmListsL accesPoint %S",
- accesPoint);
-#endif
-
- // get data from a network if not done so yet
- CXdmProtocolInfo* info = CXdmProtocolInfo::NewL( iSettingsId );
- CleanupStack::PushL( info );
-
- // Notice: we do not use cache for XDM
- info->SetCacheUsage( EFalse ); //False in normal case
-
- iXdmEngine = CXdmEngine::NewL( *info );
- CleanupStack::PopAndDestroy( info );
-#ifdef _DEBUG
- CleanupStack::PopAndDestroy( accesPoint );
-#endif
- }
- //LocalMode Start, !!! THERE IS LIMIT !!!
- //Only one settings can use localmode
- else if ( !iXdmEngine && aLocalMode )
- {
- DP_SDA("CPresencePluginXdmUtils::GetXdmListsL aLocalMode");
- CXdmProtocolInfo* info =
- CXdmProtocolInfo::NewL( 0, KLocalProtocol, KNullDesC );
- CleanupStack::PushL( info );
-
- iXdmEngine = CXdmEngine::NewL( *info );
- CleanupStack::PopAndDestroy( info );
- DP_SDA("CPresencePluginXdmUtils::GetXdmListsL aLocalMode end");
- }
- if ( !iXdmOk )
- {
- DP_SDA("CPresencePluginXdmUtils::GetXdmListsL !XdmOK ");
- using namespace NPresencePlugin::NPresence;
- // Get data from network
- DP_SDA("GetXdmListsL Create Document Model ");
-
- iXdmDoc = iXdmEngine->CreateDocumentModelL(
- KPresenceResourceList, EXdmResourceLists );
-
-
- DP_SDA("Create Document Model FetchData");
- iXdmDoc->FetchDataL();
- DP_SDA("CPresencePluginXdmUtils::GetXdmListsL !XdmOK SETACTIVE ");
- UpdateXdmsL();
- iXdmState = aCreateRules ? EGetXdmLists : EGetXdmListsOnly;
- DP_SDA("CPresencePluginXdmUtils::GetXdmListsL !XdmOK END");
- }
- else
- {
- DP_SDA("CPresencePluginXdmUtils::GetXdmListsL else");
- // Document already exists, no need to search from a server
- iStatus = KRequestPending;
- TRequestStatus* s= &iStatus;
- DP_SDA("CPresencePluginXdmUtils::GetXdmListsL SEND COMPLETE");
- User::RequestComplete( s, KErrNone );
- iXdmState = aCreateRules ? EGetXdmLists : EGetXdmListsOnly;
- SetActive();
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::CreateXdmListsL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::CreateXdmListsL( TBool aCreateRules )
- {
- DP_SDA("CPresencePluginXdmUtils::CreateXdmListsL");
-
- CXdmDocumentNode* root = iXdmDoc->CreateRootL();
- CleanupStack::PushL( root );
-
- using namespace NPresencePlugin::NPresence;
- root->SetNameL( KPresenceResourceLists );
-
- // add all the list nodes
- // buddylist
- using namespace NPresencePlugin::NPresence;
- if ( root->IsEmptyNode() )
- {
- root->SetEmptyNode( EFalse );
- }
- //buddy list
- CXdmDocumentNode* child1 = root->CreateChileNodeL( KPresenceList );
- CleanupStack::PushL( child1 );
- CXdmNodeAttribute* name = child1->CreateAttributeL( KPresenceName );
- CleanupStack::PushL( name );
- name->SetAttributeValueL( KPresenceBuddyList );
-
- // blockedcontacts
- CXdmDocumentNode* child2 = root->CreateChileNodeL( KPresenceList );
- CleanupStack::PushL( child2 );
- CXdmNodeAttribute* name2 = child2->CreateAttributeL( KPresenceName );
- CleanupStack::PushL( name2 );
- name2->SetAttributeValueL( KPresenceBlockedList );
-
- // send to the server and start wait a response
- iXdmDoc->AppendL();
- UpdateXdmsL();
- iXdmState = aCreateRules ? ECreateXdmLists : ECreateXdmListsOnly;
-
- CleanupStack::Pop( name2 );
- CleanupStack::Pop( child2 );
- CleanupStack::Pop( name );
- CleanupStack::Pop( child1 );
- CleanupStack::Pop( root );
- DP_SDA("CPresencePluginXdmUtils::CreateXdmListsL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::GetEntitiesInListL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::GetEntitiesInListL(
- const TDesC& aList,
- MXIMPObjectCollection& aColl )
- {
- DP_SDA("CPresencePluginXdmUtils::GetEntitiesInListL ");
- using namespace NPresencePlugin::NPresence;
-
- CXdmDocumentNode* buddylist = DoGetBuddyListL( aList );
-
- // make a collection of MXIMPPresentityGroupMemberInfo
- RPointerArray<CXdmDocumentNode> entries;
- CleanupClosePushL(entries); // <<< entries
-
- RPointerArray<CXdmDocumentNode> nodes;
- CleanupClosePushL(nodes); // <<< nodes
-
- buddylist->Find( KPresenceEntry, entries );
- DP_SDA("CPresencePluginXdmUtils::GetEntitiesInListL entries");
- TInt count = entries.Count();
- DP_SDA2("GetEntitiesInListL entries count %d",count);
- for ( TInt i=0; i < count; i++ )
- {
- DP_SDA("CPresencePluginXdmUtils::GetEntitiesInListL 1");
- // create here MXIMPPresentityGroupMemberInfo
- MPresentityGroupMemberInfo* info =
- iConnObs.PresenceObjectFactoryOwn().
- NewPresentityGroupMemberInfoLC();
-
- // ID
- CXdmDocumentNode* entry = entries[i];
- CXdmNodeAttribute* attr = entry->Attribute( KPresenceUri );
- if ( attr )
- {
- DP_SDA("CPresencePluginXdmUtils::GetEntitiesInListL 2");
- MXIMPIdentity* id =
- iConnObs.ObjectFactory().NewIdentityLC();//<< id
- id->SetIdentityL( attr->AttributeValue() );
- info->SetGroupMemberIdL( id );
- CleanupStack::Pop(); // >> id
- }
-
- // Display name
- TInt err = entry->Find( KPresenceDisplayName, nodes );
- // Notice: assume there is only one display-name
- if ( !err )
- {
- DP_SDA("CPresencePluginXdmUtils::GetEntitiesInListL display name");
- CXdmDocumentNode* disName = nodes[0];
- HBufC16* uri16 = NULL;
- uri16 =
- CnvUtfConverter::ConvertToUnicodeFromUtf8L(
- disName->LeafNodeContent() );
-
- CleanupStack::PushL( uri16 ); // << uri16
- info->SetGroupMemberDisplayNameL( uri16->Des() );
- CleanupStack::PopAndDestroy( uri16 ); // >> uri16
- }
-
- DP_SDA("CPresencePluginXdmUtils::GetEntitiesInListL 3");
- aColl.AddObjectL( info );
-
- //if contact is from buddylist add it to virtual subscribed list too
- if( !aList.CompareF( KPresenceBuddyList ) )
- {
- DP_SDA("GetEntitiesInListL add virtualgroup");
- //Add identity to virtual list
- iConnObs.SubscribedContacts()->AddEntityL(
- info->GroupMemberId().Identity() );
- }
-
- CleanupStack::Pop(); // >> info
- }
-
- CleanupStack::PopAndDestroy( &nodes ); // >>> nodes
- CleanupStack::PopAndDestroy( &entries ); // >>> entries*/
- DP_SDA("CPresencePluginXdmUtils::GetEntitiesInListL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::AddIdentityToVirtualListL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::AddIdentityToVirtualListL( const TDesC& aList )
- {
- DP_SDA("CPresencePluginXdmUtils::AddIdentityToVirtualListL ");
- using namespace NPresencePlugin::NPresence;
-
- if ( aList.Compare( KPresenceBlockedList ) == NULL )
- {
- iBlockedContacts.ResetAndDestroy();
- }
-
- CXdmDocumentNode* buddylist = DoGetBuddyListL( aList );
-
- // make a collection of MXIMPPresentityGroupMemberInfo
- RPointerArray<CXdmDocumentNode> entries;
- CleanupClosePushL(entries); // <<< entries
-
- buddylist->Find( KPresenceEntry, entries );
- DP_SDA("CPresencePluginXdmUtils::AddIdentityToVirtualListL entries");
- TInt count = entries.Count();
- DP_SDA2("AddIdentityToVirtualListL entries count %d",count);
- for ( TInt i=0; i < count; i++ )
- {
- DP_SDA("CPresencePluginXdmUtils::AddIdentityToVirtualListL 1");
- // ID
- CXdmDocumentNode* entry = entries[i];
- CXdmNodeAttribute* attr = entry->Attribute( KPresenceUri );
- if ( attr )
- {
- if( !aList.CompareF( KPresenceBuddyList ) )
- {
- DP_SDA("AddIdentityToVirtualListL add to buddies");
- //Add identity to virtual list
- iConnObs.SubscribedContacts()->AddEntityL(
- attr->AttributeValue() );
- }
- else if ( !aList.CompareF( KPresenceBlockedList ) )
- {
- DP_SDA("AddIdentityToVirtualListL add to blocked");
- HBufC* withoutPrefix =
- iConnObs.InternalPresenceAuthorization().
- PluginData().RemovePrefixLC( attr->AttributeValue() );
- CleanupStack::Pop( withoutPrefix );
- iBlockedContacts.AppendL( withoutPrefix );
- }
- }
- }
- CleanupStack::PopAndDestroy( &entries ); // >>> entries
- DP_SDA("CPresencePluginXdmUtils::AddIdentityToVirtualListL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::DoGetBuddyListL()
-// ---------------------------------------------------------------------------
-//
-CXdmDocumentNode* CPresencePluginXdmUtils::DoGetBuddyListL(
- const TDesC& aParent )
- {
- DP_SDA("CPresencePluginXdmUtils::DoGetBuddyListL");
- CXdmDocumentNode* root = iXdmDoc->DocumentRoot();
-
- CXdmDocumentNode* ret = SearchListUnderParentL( root, aParent );
- if ( !ret )
- {
- DP_SDA("CPresencePluginXdmUtils::DoGetBuddyListL !found");
- User::Leave( KErrNotFound );
- }
- return ret;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::DoGetUserListL()
-// ---------------------------------------------------------------------------
-//
-CXdmDocumentNode* CPresencePluginXdmUtils::DoGetUserListL(
- const TDesC& aList, CXdmDocumentNode* aBuddyList )
- {
- DP_SDA("CPresencePluginXdmUtils::DoGetUserListL");
- CXdmDocumentNode* listNode = NULL;
- CXdmNodeAttribute* attr = NULL;
- TBool found( EFalse );
-
- using namespace NPresencePlugin::NPresence;
-
- RPointerArray<CXdmDocumentNode> lists;
- CleanupClosePushL( lists );
-
- User::LeaveIfError( aBuddyList->Find( KPresenceEntry, lists ));
- TInt count = lists.Count();
- DP_SDA2("CPresencePluginXdmUtils::DoGetUserListL count %d",count);
- for ( TInt i=0; i < count; i++ )
- {
- listNode = lists[i];
- attr = listNode->Attribute( KPresenceUri );
- if ( attr && !attr->AttributeValue().CompareF( aList ))
- {
- // List is found
- found = ETrue;
- break;
- }
- }
- if ( !found )
- {
- DP_SDA("CPresencePluginXdmUtils::DoGetUserListL !found");
- User::Leave( KErrNotFound );
- }
-
- CleanupStack::PopAndDestroy( &lists );
- DP_SDA("CPresencePluginXdmUtils::DoGetUserListL end");
- return listNode;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::UpdateXdmsL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::UpdateXdmsL()
- {
- DP_SDA("CPresencePluginXdmUtils::UpdateXdmsL");
- iXdmEngine->UpdateL( iXdmDoc, iStatus );
- if ( !IsActive() )
- {
- DP_SDA("CPresencePluginXdmUtils::UpdateXdmsL SetActive");
- SetActive();
- }
- DP_SDA("CPresencePluginXdmUtils::UpdateXdmsL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::UpdateXdmRulesL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::UpdateXdmRulesL()
- {
- DP_SDA("CPresencePluginXdmUtils::UpdateXdmRulesL");
- iXdmState = EUpdateXdmRules;
-
- if( iRulesUpdateState == EStateInitializeRules )
- {
- User::LeaveIfError( iXdmPresRules->UpdateXdmRulesL( this ));
- }
- //Add entity to presrules too
- if ( iRulesUpdateState == EStateAddToWhiteList )
- {
- DP_SDA("EStateAddToWhiteList");
- iXdmPresRules->AddEntityToWhiteListL(
- iEntityUri->Des(), this );
- }
- if ( iRulesUpdateState == EStateAddToBlockList )
- {
- DP_SDA("EStateAddToBlockList");
- iXdmPresRules->AddEntityToBlockedRulesL(
- iEntityUri->Des(), this );
- }
- if ( iRulesUpdateState == EStateRemoveFromWhiteList)
- {
- DP_SDA("EStateRemoveFromWhiteList");
- iXdmPresRules->RemoveEntityFromWhiteListL(
- iEntityUri->Des(), this );
- }
- if ( iRulesUpdateState == EStateRemoveFromBlackList)
- {
- DP_SDA("EStateRemoveFromBlackList");
- iXdmPresRules->RemoveEntityBlockedRulesL(
- iEntityUri->Des(), this );
- }
- DP_SDA("CPresencePluginXdmUtils::UpdateXdmRulesL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::DoHandlePresUpdateDocumentL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::DoHandlePresUpdateDocumentL( TInt aErrorCode )
- {
- DP_SDA("CPresencePluginXdmUtils::DoHandlePresUpdateDocumentL");
-
- // check if error
- CheckIfErrorL( aErrorCode );
-
- if ( iXdmState == EGetXdmRules )
- {
- DP_SDA("DoHandlePresUpdateDocumentL EGetXdmRules");
- iXdmState = EStateIdle;
- if ( aErrorCode && aErrorCode == KXcapErrorHttpNotFound )
- {
- DP_SDA("DoHandlePresUpdateDocumentL EGetXdmRules ini rules ERROR");
- InitializePresRulesL();
- }
- else
- {
- DP_SDA("DoHandlePresUpdateDocumentL EGetXdmRules SEND COMPLETE ");
- // Complete with ok or error the last initial opreration
-
- // update presence cache if needed before complete client req.
- iPresXdmOk = ETrue;
-
- if ( iBlockedContacts.Count() > 0 )
- {
- iConnObs.InternalPresenceAuthorization().
- IsBlockedContactFriendRequestL(
- *iBlockedContacts[ iBlockedContacts.Count() - 1 ],
- *this, iStatus );
-
- iXdmState = EUpdateBlockedContactPresenceCache;
- SetActive();
- }
- else
- {
- CompleteClientReq( aErrorCode );
- }
- }
- }
- else if ( iXdmState == EUpdateXdmRules )
- {
- DP_SDA("DoHandlePresUpdateDocumentL EUpdateXdmRules SEND COMPLETE ");
- // Complete with ok or error the last initial opreration
- CompleteClientReq( aErrorCode );
- }
- else if ( iXdmState == ECreateXdmRules )
- {
- DP_SDA("DoHandlePresUpdateDocumentL ECreateXdmRules SEND COMPLETE ");
- iPresXdmOk = ETrue;
- CompleteClientReq( aErrorCode );
- }
-
- else if ( iXdmState == EUpdateXdmList)
- {
- DP_SDA("DoHandlePresUpdateDocumentL EUpdateXdmList SEND COMPLETE");
- CompleteClientReq( aErrorCode );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::CompleteClientReq()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::CompleteClientReq( TInt aStatus )
- {
- DP_SDA("CPresencePluginXdmUtils::CompleteClientReq");
- DP_SDA2("CPresencePluginXdmUtils::CompleteClientReq status %d ", aStatus);
- iXdmState = EStateIdle;
- iOperation = ENoOperation;
- TRequestStatus* s = iClientStatus;
- User::RequestComplete( s, aStatus );
- DP_SDA("CPresencePluginXdmUtils::CompleteClientReq end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::HandlePresUpdateDocumentL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::HandlePresUpdateDocumentL(
- TInt aErrorCode )
- {
-#ifdef _DEBUG
- DP_SDA2("HandlePresUpdateDocumentL errorCode %d ", aErrorCode );
- DP_SDA2("HandlePresUpdateDocumentL mystatus %d ", iStatus.Int());
- DP_SDA2("HandlePresUpdateDocumentL state %d ", iXdmState);
- DP_SDA2("HandlePresUpdateDocumentL ClientStatus %d",iClientStatus->Int() );
-#endif
-
- DP_SDA("CPresencePluginXdmUtils::HandlePresUpdateDocumentL");
- if ( aErrorCode == KErrTimedOut )
- {
- DP_SDA("CPresencePluginXdmUtils::HandlePresUpdateDocumentL TimeOut");
- aErrorCode = 0;
- }
-
- TRAPD( err, DoHandlePresUpdateDocumentL( aErrorCode ));
- if ( err )
- {
- DP_SDA("CPresencePluginXdmUtils::HandlePresUpdateDocumentL complete");
- // Complete with ok or error the last initial opreration
- CompleteClientReq( err );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::SearchListUnderParentL
-// ---------------------------------------------------------------------------
-//
-TBool CPresencePluginXdmUtils::CompareUriWithoutPrefixL(
- const TDesC& aUri, const TDesC& aAttribute )
- {
- DP_SDA("CPresencePluginXdmUtils::CompareUriWithoutPrefixL");
-
- TBool match( EFalse );
-
- RBuf uriWithoutPrefix;
- CleanupClosePushL( uriWithoutPrefix );
- uriWithoutPrefix.CreateL( aUri );
- TInt prefixLocation = uriWithoutPrefix.Locate( ':' );
-
- if ( KErrNotFound != prefixLocation )
- {
- uriWithoutPrefix.Delete( 0, ( prefixLocation + 1 ) );
- }
-
- RBuf attributeWithoutprefix;
- CleanupClosePushL( attributeWithoutprefix );
- attributeWithoutprefix.CreateL( aAttribute );
- prefixLocation = attributeWithoutprefix.Locate( ':' );
-
- if ( KErrNotFound != prefixLocation )
- {
- attributeWithoutprefix.Delete( 0, ( prefixLocation + 1 ) );
- }
-
- DP_SDA2(" --> uri without prefix=%S", &uriWithoutPrefix );
- DP_SDA2(" --> attribute without prefix=%S", &attributeWithoutprefix );
-
- if ( uriWithoutPrefix.Compare( attributeWithoutprefix ) == 0 )
- {
- match = ETrue;
- }
-
- CleanupStack::PopAndDestroy( &attributeWithoutprefix );
- CleanupStack::PopAndDestroy( &uriWithoutPrefix );
-
- return match;
- }
-
-
-// ---------------------------------------------------------------------------
-// CPresencePluginXdmUtils::DoUpdateBlockedContactPresenceCacheL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::DoUpdateBlockedContactPresenceCacheL(
- TInt aMyStatus )
- {
- DP_SDA( "CPresencePluginXdmUtils::DoUpdateBlockedContactPresenceCache" );
-
- const TInt KTextBufferSize = 10;
- TInt contactsCount = iBlockedContacts.Count();
-
- if ( contactsCount > 0 )
- {
- if ( iPresenceContactsAsyncReqResult )
- {
- DP_SDA(" RunL -write blocked status to cache" );
- TBuf<KTextBufferSize> buf;
- buf.Copy( KBlockedExtensionValue );
- iConnObs.InternalPresenceAuthorization().PluginData().
- WriteStatusToCacheL( *iBlockedContacts[ contactsCount - 1 ],
- MPresenceBuddyInfo2::EUnknownAvailability,
- buf,
- KNullDesC() );
- }
- delete iBlockedContacts[ contactsCount - 1 ];
- iBlockedContacts.Remove( contactsCount - 1 );
-
- if ( iBlockedContacts.Count() > 0 )
- {
- iConnObs.InternalPresenceAuthorization().
- IsBlockedContactFriendRequestL(
- *iBlockedContacts[ iBlockedContacts.Count() - 1 ],
- *this, iStatus );
-
- iXdmState = EUpdateBlockedContactPresenceCache;
- SetActive();
- }
- else
- {
- CompleteClientReq( aMyStatus );
- }
- }
- }
-
-
-// ---------------------------------------------------------------------------
-// From MPresencePluginContactsObs
-// CPresencePluginXdmUtils::RequestComplete
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginXdmUtils::RequestComplete( TAny* aResult,
- TPresenceContactsOperation /*aOperation*/, TInt aError )
- {
- iPresenceContactsAsyncReqResult = EFalse;
- if ( NULL != aResult && KErrNone == aError )
- {
- iPresenceContactsAsyncReqResult =
- *static_cast<TBool*>( aResult );
- }
- }
-
-// End of file