diff -r 2580314736af -r 2669f8761a99 simpledatamodeladapter/src/presencepluginxdmutils.cpp --- 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include //for TPresSettingsSet -#include -#include -#include - -#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 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 resultArray; - RPointerArray 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 lists; - CleanupClosePushL( lists ); - - RPointerArray 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& aMembers ) - { - DP_SDA("CPresencePluginXdmUtils::SubscribeBuddyListL"); - - iOperation = EXdmGetBuddyList; - DoGetListMembersL( KPresenceBuddyList, aMembers ); - - DP_SDA("CPresencePluginXdmUtils::SubscribeBuddyListL end"); - } - -// --------------------------------------------------------------------------- -// CPresencePluginXdmUtils::SubscribeBlockListL() -// --------------------------------------------------------------------------- -// -void CPresencePluginXdmUtils::SubscribeBlockListL( - RPointerArray& 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& aMembers ) - { - DP_SDA("CPresencePluginXdmUtils::DoGetListMembersL"); - using namespace NPresencePlugin::NPresence; - - aMembers.Reset(); - - RPointerArray 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 entries; - CleanupClosePushL(entries); // <<< entries - - RPointerArray 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 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 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 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( aResult ); - } - } - -// End of file