--- a/simpledatamodeladapter/src/presencepluginpublisher.cpp Thu Jul 01 14:09:06 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1391 +0,0 @@
-/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: IETF SIMPLE Protocol implementation for XIMP Framework
-*
-*/
-
-
-#include <e32std.h>
-#include <utf.h>
-#include <ximpdatasubscriptionstate.h>
-#include <protocolpresencepublishingdatahost.h>
-#include <protocolpresencedatahost.h>
-#include <ximpobjectfactory.h>
-#include <presenceobjectfactory.h>
-#include <presenceinfo.h>
-#include <personpresenceinfo.h>
-#include <ximpprotocolconnectionhost.h>
-#include <ximpstatus.h>
-#include <ximperrors.hrh>
-#include <ximpidentity.h>
-#include <ximpobjectcollection.h>
-#include <presencewatcherinfo.h>
-#include <simpleutils.h> // For KSimplePDM
-#include <simplefactory.h>
-#include <msimpledocument.h>
-#include <msimplepublisher.h>
-#include <msimplewatcher.h>
-#include <msimplewinfo.h>
-#include <msimpleelement.h>
-#include <msimpleconnection.h>
-#include <simpleerrors.h>
-#include <avabilitytext.h>
-
-#include "presenceplugincommon.h"
-#include "presencepluginpublisher.h"
-#include "presencepluginwinfo.h"
-#include "presenceplugindata.h"
-#include "presencepluginxdmutils.h"
-#include "presencepluginwatcherinfo.h"
-#include "presenceplugincommon.h"
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::CPresencePluginPublisher()
-// ---------------------------------------------------------------------------
-//
-CPresencePluginPublisher::CPresencePluginPublisher(
- MPresencePluginConnectionObs& aObs,
- MSimpleConnection& aConn )
- : CActive( CActive::EPriorityStandard ),
- iConnObs(aObs), iConnection(aConn),
- iPublisher( NULL ), iWatcher( NULL ),
- iSubscribed(EFalse), iSubscribedOwn(EFalse),
- iPublished(EFalse), iRePublish(EFalse),
- iWatcherList( CPresencePluginWatcherInfo::LinkOffset() )
- {
- DP_SDA("CPresencePluginPublisher::CPresencePluginPublisher ");
- CActiveScheduler::Add(this);
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::ConstructL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::ConstructL( CPresencePluginData* aPresenceData )
- {
- DP_SDA("CPresencePluginPublisher::ConstructL ");
- iWatcher = TSimpleFactory::NewWatcherL( iConnection, *this );
- iPublisher = TSimpleFactory::NewPublisherL( iConnection, *this );
- iPresenceData = aPresenceData;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::NewL()
-// ---------------------------------------------------------------------------
-//
-CPresencePluginPublisher* CPresencePluginPublisher::NewL(
- MPresencePluginConnectionObs& aObs,
- MSimpleConnection& aConn,
- CPresencePluginData* aPresenceData )
- {
- CPresencePluginPublisher* self =
- new( ELeave ) CPresencePluginPublisher( aObs, aConn );
- CleanupStack::PushL( self );
- self->ConstructL( aPresenceData );
- CleanupStack::Pop( self );
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::~CPresencePluginPublisher()
-// ---------------------------------------------------------------------------
-//
-CPresencePluginPublisher::~CPresencePluginPublisher()
- {
- DP_SDA("CPresencePluginPublisher::~CPresencePluginPublisher");
-
- if ( iDocument )
- {
- iDocument->Close();
- }
-
- if ( iPublisher )
- {
- iPublisher->Close();
- }
-
- if ( iWatcher )
- {
- iWatcher->Close();
- }
-
- DeleteWatchers();
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::DeleteWatchers
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::DeleteWatchers()
- {
- DP_SDA("CPresencePluginPublisher::DeleteWatchers");
- // Delete all buffered transaction requests
- TDblQueIter<CPresencePluginWatcherInfo> rIter( iWatcherList );
- rIter.SetToFirst();
-
- while ( rIter )
- {
- DP_SDA("CPresencePluginPublisher::DeleteWatchers while");
- CPresencePluginWatcherInfo* w = rIter;
- rIter++;
- // delete wathcer info
- w->Destroy();
- }
- DP_SDA("CPresencePluginPublisher::DeleteWatchers end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::AddWatcherIfNotExistsL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::AddWatcherIfNotExistsL(
- const TDesC8& aId,
- const TDesC& aSipId )
- {
- DP_SDA("CPresencePluginPublisher::AddWatcherIfNotExistsL");
- // Delete all buffered transaction requests
- TDblQueIter<CPresencePluginWatcherInfo> rIter( iWatcherList );
- rIter.SetToFirst();
-
- TBool found(EFalse);
-
- while ( rIter )
- {
- CPresencePluginWatcherInfo* w = rIter;
- rIter++;
- found = w->Match( aId, aSipId );
- if ( found )
- {
- DP_SDA("CPresencePluginPublisher::AddWatcherIfNotExistsL found");
- break;
- }
- }
- if ( !found )
- {
- DP_SDA("CPresencePluginPublisher::AddWatcherIfNotExistsL !found");
- CPresencePluginWatcherInfo* w =
- CPresencePluginWatcherInfo::NewL( aId, aSipId );
- iWatcherList.AddLast( *w );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::RemoveWatcherIfExistsL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::RemoveWatcherIfExists(
- const TDesC8& aId, const TDesC& aSipId )
- {
- DP_SDA("CPresencePluginPublisher::RemoveWatcherIfExistsL");
- // Delete all buffered transaction requests
- TDblQueIter<CPresencePluginWatcherInfo> rIter( iWatcherList );
- rIter.SetToFirst();
-
- TBool found(EFalse);
-
- while ( rIter )
- {
- CPresencePluginWatcherInfo* w = rIter;
- rIter++;
- // delete wathcer info
- found = w->Match( aId, aSipId );
- if ( found )
- {
- w->Destroy();
- break;
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::DoPublishOwnPresenceL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::DoPublishOwnPresenceL(
- const MPresenceInfo& aOwnPresence,
- TXIMPRequestId aReqId )
- {
- DP_SDA("CPresencePluginPublisher::DoPublishOwnPresenceL");
- const MPersonPresenceInfo* persInfo = aOwnPresence.PersonPresence();
- if ( !persInfo )
- {
- // Notice: error codes
- CompleteXIMPReq( KErrArgument );
- return;
- }
- InitializeSimpleDocumentL( );
- AddSimpleDocumentPersL( persInfo );
-
- StartXdmOperationL( aReqId );
- iOperation = EPublishOwn;
- DP_SDA("CPresencePluginPublisher::DoPublishOwnPresenceL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::DoSubscribeOwnPresenceL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::DoSubscribeOwnPresenceL(
- const MPresenceInfoFilter& /*aPif*/, // notice: later
- TXIMPRequestId aReqId )
- {
- DP_SDA("CPresencePluginPublisher::DoSubscribeOwnPresenceL");
- StartXdmOperationL( aReqId );
- iOperation = ESubscribeOwn;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::DoUpdateOwnPresenceSubscriptionPifL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::DoUpdateOwnPresenceSubscriptionPifL(
- const MPresenceInfoFilter& /*aPif*/,
- TXIMPRequestId /*aReqId*/ )
- {
- // Notice: later
- User::Leave( KErrNotSupported );
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::DoUnsubscribeOwnPresenceL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::DoUnsubscribeOwnPresenceL(
- TXIMPRequestId aReqId )
- {
- DP_SDA("CPresencePluginPublisher::DoUnsubscribeOwnPresenceL");
- iSubscribedOwn = EFalse;
- iSimpleId = iWatcher->UnsubscribeL();
- iXIMPId = aReqId;
- iOperation = EUnsubscribeOwn;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::DoSubscribePresenceWatcherListL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::DoSubscribePresenceWatcherListL(
- TXIMPRequestId aReqId )
- {
- DP_SDA("CPresencePluginPublisher::DoSubscribePresenceWatcherListL");
- if ( !iSubscribed )
- {
- DP_SDA("DoSubscribePresenceWatcherListL !Subscribed");
- iConnObs.WinfoHandlerL()->SubscribeWinfoListL( aReqId );
- iSubscribed = ETrue;
- iXIMPId = aReqId;
- iOperation = ESubscribeWinfo;
- }
- else
- {
- DP_SDA("DoSubscribePresenceWatcherListL else");
- iXIMPId = aReqId;
- iOperation = ESubscribeWinfo;
- CompleteXIMPReq( KErrNone );
- }
- DP_SDA("CPresencePluginPublisher::DoSubscribePresenceWatcherListL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::DoUnsubscribePresenceWatcherListL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::DoUnsubscribePresenceWatcherListL(
- TXIMPRequestId aReqId )
- {
- DP_SDA("CPresencePluginPublisher::DoUnsubscribePresenceWatcherListL");
- if ( iSubscribed )
- {
- DP_SDA("DoUnsubscribePresenceWatcherListL: if ( iSubscribed ) - begin");
- iConnObs.WinfoHandlerL()->UnsubscribeWinfoListL( aReqId );
- iSubscribed = EFalse;
- iXIMPId = aReqId;
- iOperation = EUnsubscribeWinfo;
- DP_SDA("DoUnsubscribePresenceWatcherListL: if ( iSubscribed ) - end");
-
- }
- else
- {
- DP_SDA("DoUnsubscribePresenceWatcherListL: iSubscribed ) is false");
- iXIMPId = aReqId;
- iOperation = EUnsubscribeWinfo; //hameed
- CompleteXIMPReq( KErrNone );
- }
- }
-
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::PublishReqCompleteL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::PublishReqCompleteL(
- TInt /*aOpid*/,
- TInt aStatus )
- {
- DP_SDA("CPresencePluginPublisher::PublishReqCompleteL");
- // Notice: make 415 error code conversion here and other
- //SIP code -> XIMP conversions
- DP_SDA2("PublishReqCompleteL STATUS %d",aStatus );
-
- if( iConnObs.GetSessionStatus() )
- {
- DP_SDA2("PublishReqComp stopState %d",iConnObs.GetStopPublishState());
- if ( !aStatus && !iConnObs.GetStopPublishState() )
- {
- DP_SDA("CPresencePluginPublisher::PublishReqCompleteL ETrue");
- iPublished = ETrue;
- iConnObs.SetStopPublishState( ETrue );
- }
- // Save E-Tag
- if( !aStatus )
- {
- DP_SDA("CPresencePluginPublisher::PublishReqCompleteL Save ETAG");
- TBuf8<KBufSize255> buf;
- buf.Copy( iPublisher->SIPETag() );
- iConnObs.SetETag( buf );
- iPresenceData->StoreDocumentIdL( iConnObs.ServiceId(), buf );
- }
- //Do not complete if error republish is true. XIMPFW is not knowing we
- //are sending republish.
- if( EFalse == iRePublish && !aStatus )
- {
- //Complete Publish request
- DP_SDA("CPresencePluginPublisher::PublishReqCompleteL complete");
- if( !(iConnObs.IsStopPublishCalled()) )
- {
- DP_SDA("CPresencePluginPublisher::PublishReqCompleteL complete normal");
- // successfull Online / others: store status to cache
- StoreOwnStatusToCacheL( );
- CompleteXIMPReq( aStatus );
- }
- //Complete stopPublish and close session if stopPublish is called
- if( iConnObs.IsStopPublishCalled() )
- {
- DP_SDA("PublishReqCompleteL complete closeSession");
- // successfull Online / others: store status to cache
- StoreOwnStatusToCacheL( );
- //Complete close session
- CompleteClientReq( aStatus );
- }
- }
- if( EFalse == iRePublish && ( KSimpleErrTemporary == aStatus ) )
- {
- DP_SDA("PublishReqCompleteL KSimpleErrTemporary");
- // Make new publish request without ETag
- CreatePublisherL();
- iSimpleId = iPublisher->StartPublishL( *iDocument, ETrue );
- }
-
- else
- {
- //Set rePublish flag back to false.
- iRePublish = EFalse;
- }
- }
- else
- {
- //Run this case if connection is not good any more
- DP_SDA("PublishReqCompleteL No connect CANCEL");
- Cancel();
- }
- DP_SDA("CPresencePluginPublisher::PublishReqCompleteL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::PublishTerminatedL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::PublishTerminatedL( TInt aOpid )
- {
- DP_SDA("CPresencePluginPublisher::PublishTerminatedL");
- DP_SDA2("CPresencePluginPublisher::PublishTerminatedL opID %d",aOpid );
- DP_SDA2("PublishTerminatedL iSimpleId %d",iSimpleId );
- DP_SDA2("PublishTerminatedL iStatus %d",iStatus.Int() );
-
- if ( iSimpleId == aOpid && iConnObs.GetSessionStatus() )
- {
- DP_SDA("CPresencePluginPublisher::PublishTerminatedL NewPublish");
- CreatePublisherL();
- TRAPD( error , iSimpleId = iPublisher->StartPublishL(
- *iDocument, ETrue ) );
- if ( KErrNone == error )
- {
- DP_SDA("PublishTerminatedL NewPublish KErrNone");
- iRePublish = ETrue;
- iConnObs.SetStopPublishState( EFalse );
- }
- }
- else
- {
- DP_SDA("CPresencePluginPublisher::PublishTerminatedL else");
- iPublished = EFalse;
- if( iPublisher )
- {
- iPublisher->Close();
- iPublisher = NULL;
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::WatcherReqCompleteL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::WatcherReqCompleteL( TInt /*aOpid*/,
- TInt aStatus )
- {
- DP_SDA("CPresencePluginPublisher::WatcherReqCompleteL");
- if ( !aStatus )
- {
- iSubscribedOwn = ETrue;
- }
-
- CompleteXIMPReq( aStatus );
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::WatcherNotificationL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::WatcherNotificationL(
- MSimpleDocument& aDocument )
- {
- // Notice: Do not need to check the expiration here since
- // WatcherTerminatedL is called then too.
- DP_SDA("CPresencePluginPublisher::WatcherNotificationL");
-
- MProtocolPresencePublishingDataHost& publishHost =
- iConnObs.ProtocolPresenceHost().PublishingDataHost();
-
- MPresenceInfo* prInfo =
- iConnObs.PresenceObjectFactoryOwn().NewPresenceInfoLC();// << prInfo
-
- iPresenceData->NotifyToPrInfoL(
- iConnObs.ObjectFactory(),
- iConnObs.PresenceObjectFactoryOwn(),
- aDocument,
- *prInfo );
-
- // XIMP Host API callbacks
-
- publishHost.HandleSubscribedOwnPresenceL( prInfo );
- CleanupStack::Pop(); // >> prInfo
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::WatcherListNotificationL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::WatcherListNotificationL(
- MSimplePresenceList& /*aList*/ )
- {
- //Do nothing now
- DP_SDA("CPresencePluginPublisher::WatcherListNotificationL EMPTY");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::WatcherTerminatedL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::WatcherTerminatedL(
- TInt /*aOpId*/, TInt aReason )
- {
- DP_SDA("CPresencePluginPublisher::WatcherTerminatedL");
-
- iSubscribedOwn = EFalse;
-
- MXIMPObjectFactory& myFactory = iConnObs.ObjectFactory();
- MProtocolPresencePublishingDataHost& publishHost =
- iConnObs.ProtocolPresenceHost().PublishingDataHost();
-
- MXIMPDataSubscriptionState *state =
- myFactory.NewDataSubscriptionStateLC();
- MXIMPStatus* status = myFactory.NewStatusLC();
- state->SetSubscriptionStateL(
- MXIMPDataSubscriptionState::ESubscriptionInactive );
-
- status->SetResultCode( aReason );
- publishHost.SetOwnPresenceDataSubscriptionStateL( state, status );
- CleanupStack::Pop( 2 ); // status, state
-
- DP_SDA("CPresencePluginPublisher::WatcherTerminatedL - end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::CompleteXIMPReq()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::CompleteXIMPReq( TInt aStatus )
- {
- DP_SDA("CPresencePluginPublisher::CompleteXIMPReq");
- DP_SDA2("CompleteXIMPReq: iOperation = %d",(TInt) iOperation );
- // Notice: should this yield active scheduler???
- if ( iOperation != ENoOperation )
- {
- DP_SDA("CPresencePluginPublisher::CompleteXIMPReq complete");
- iOperation = ENoOperation;
- iConnObs.CompleteReq( iXIMPId, aStatus );
- iXIMPId = TXIMPRequestId();
- }
- DP_SDA("CPresencePluginPublisher::CompleteXIMPReq end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::CompleteClientReq()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::CompleteClientReq( TInt aStatus )
- {
- DP_SDA2("CPresencePluginPublisher::CompleteClientReq status %d ", aStatus);
- iOperation = ENoOperation;
- TRequestStatus* s = iClientStatus;
- User::RequestComplete( s, aStatus );
- DP_SDA("CPresencePluginPublisher::CompleteClientReq end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::DoCancel()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::DoCancel( )
- {
- DP_SDA("CPresencePluginPublisher::DoCancel CANCEL");
- iXdmUtils->Cancel();
- iPublisher->Close();
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::RunL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::RunL( )
- {
- DP_SDA("CPresencePluginPublisher::RunL");
- TInt status = iStatus.Int();
- DP_SDA2("CPresencePluginPublisher::RunL status %d", status );
- if ( !status )
- {
-
- if ( iOperation == ESubscribeOwn )
- {
- DP_SDA("CPresencePluginPublisher::RunL Subscribe Own");
- iSimpleId = iWatcher->SubscribeL(
- iConnObs.CurrentSipPresentity8(),
- NULL, // aFilter <-> aPif
- ETrue, EFalse );
- }
- else if( iOperation == EPublishOwn )
- {
- DP_SDA("CPresencePluginPublisher::RunL MakePublishReqL");
- MakePublishReqL();
- }
- }
- else
- {
- DP_SDA("CPresencePluginPublisher::RunL complete");
- CompleteXIMPReq( status );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::RunError
-// ---------------------------------------------------------------------------
-//
-TInt CPresencePluginPublisher::RunError( TInt aError )
- {
- DP_SDA2("CPresencePluginPublisher::RunError %d",aError );
-
- CompleteXIMPReq( aError );
- return KErrNone;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::GetInterface()
-// ---------------------------------------------------------------------------
-//
-TAny* CPresencePluginPublisher::GetInterface(
- TInt32 aInterfaceId,
- TIfGetOps aOptions )
- {
- DP_SDA("CPresencePluginPublisher::GetInterface");
-
- if ( aInterfaceId == GetInterfaceId() )
- {
- // caller wants this interface
- MProtocolPresencePublishing* myIf = this;
- return myIf;
- }
- if ( aOptions == MXIMPBase::EPanicIfUnknown )
- {
- User::Panic( KPluginName, KErrExtensionNotSupported );
- }
- return NULL;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::GetInterface()
-// ---------------------------------------------------------------------------
-//
-const TAny* CPresencePluginPublisher::GetInterface(
- TInt32 aInterfaceId,
- TIfGetOps aOptions ) const
- {
- DP_SDA("CPresencePluginPublisher::GetInterface 2 ");
-
- if ( aInterfaceId == GetInterfaceId() )
- {
- // caller wants this interface
- const MProtocolPresencePublishing* myIf = this;
- return myIf;
- }
- if ( aOptions == MXIMPBase::EPanicIfUnknown )
- {
- User::Panic( KPluginName, KErrExtensionNotSupported );
- }
- return NULL;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::GetInterfaceId()
-// ---------------------------------------------------------------------------
-//
-TInt32 CPresencePluginPublisher::GetInterfaceId() const
- {
- DP_SDA("CPresencePluginPublisher::GetInterfaceId");
-
- return MProtocolPresencePublishing::KInterfaceId;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::InitializeSimpleDocumentL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::InitializeSimpleDocumentL( )
- {
- _LIT8 ( KCipidNS, "urn:ietf:params:xml:ns:pidf:cipid" );
- _LIT8 ( KCipidCP, "c" );
- if ( iDocument )
- {
- DP_SDA("CPresencePluginPublisher:: deletedocument");
- iDocument->Close();
- iDocument = NULL;
- iDocument = TSimpleFactory::NewDocumentL();
- }
- else
- {
- DP_SDA("CPresencePluginPublisher:: create document");
- iDocument = TSimpleFactory::NewDocumentL();
- }
- iDocument->AddNamespaceL( KSimplePDM, KSimpleNsPDM );
- iDocument->AddNamespaceL( KSimpleRPID, KSimpleNsRPID );
- iDocument->AddNamespaceL( KCipidCP, KCipidNS );
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::AddSimpleDocumentPersL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::AddSimpleDocumentPersL(
- const MPersonPresenceInfo* aInfo )
- {
- TInt tupleId = iConnObs.GetTupleId();
-
- DP_SDA2("AddSimpleDocumentPersL tuple id get: %d", tupleId);
- if ( tupleId == 0 )
- {
- DP_SDA("AddSimpleDocumentPersL tuple generate");
- tupleId = iPresenceData->GenerateTupleId();
- iConnObs.SetTupleId(tupleId);
- }
-
- iPresenceData->AddPrPersToSimpleDocumentL(
- aInfo, *iDocument, iConnObs.CurrentSipPresentity8(), tupleId );
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::StopPublishL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::StopPublishL( TRequestStatus& aStatus )
- {
- DP_SDA2("StopPublish - begin : iPublished= %d ",(TInt) iPublished);
-
- aStatus = KRequestPending;
- iClientStatus = &aStatus;
-
- if ( iConnObs.GetStopPublishState() && iPublished )
- {
- DP_SDA("CPresencePluginPublisher::StopPublish really Stop");
- TRAPD( error, iPublisher->StopPublishL( iConnObs.GetETag() ););
- DP_SDA2("StopPublish iPublisher->StopPublishL : error = %d ", error );
- if ( KErrNone != error )
- {
- if( iPublisher )
- {
- DP_SDA("StopPublish delete and recreate publisher");
- iPublisher->Close();
- iPublisher = NULL;
- DP_SDA("StopPublish really Stop try again 1 ");
- iPublisher =
- TSimpleFactory::NewPublisherL( iConnection, *this );
- DP_SDA("StopPublish really Stop try again 2 ");
- error = KErrGeneral;
- TRAP( error, iPublisher->StopPublishL( iConnObs.GetETag() ););
- DP_SDA2("StopPublishL 2nd try : error = %d ", error );
- if ( KErrNone != error )
- {
- DP_SDA("StopPublish TWO TIME Error, last try without tag ");
- TRAP( error, iPublisher->StopPublishL(); );
- DP_SDA2("StopPublishL 3rd try : error = %d ", error );
- }
- }
- }
- iConnObs.SetStopPublishState( ETrue );
- iPublished = EFalse;
- }
- DP_SDA("CPresencePluginPublisher::StopPublish- end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::MakePublishReqL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::MakePublishReqL( )
- {
- DP_SDA("CPresencePluginPublisher::MakePublishReqL");
-
- if ( !iPublished )
- {
- DP_SDA("CPresencePluginPublisher::MakePublishReqL 1");
- CreatePublisherL();
-
- DP_SDA(" -> MakePublishReqL, check for old doc id");
- HBufC8* oldDocumentId = HBufC8::NewLC( KBufSize255 );
- TPtr8 oldDocumentIdPtr( oldDocumentId->Des() );
- TRAPD( error, iPresenceData->ReadDocumentIdL(
- iConnObs.ServiceId(), oldDocumentIdPtr ) );
- DP_SDA2(" -> MakePublishReqL, doc id error: %d", error );
- if ( !error )
- {
- DP_SDA(" -> MakePublishReqL, publish with old id");
- iSimpleId = iPublisher->ContinuePublishL(
- *iDocument, ETrue, oldDocumentIdPtr );
- }
- else
- {
- DP_SDA(" -> MakePublishReqL, publish with new id");
- iSimpleId = iPublisher->StartPublishL( *iDocument, ETrue );
- }
- CleanupStack::PopAndDestroy( oldDocumentId );
- }
- else
- {
- DP_SDA("CPresencePluginPublisher::MakePublishReqL 2");
- CreatePublisherL();
- DP_SDA("CPresencePluginPublisher::MakePublishReqL Continue Publish");
- iSimpleId =
- iPublisher->ContinuePublishL(
- *iDocument ,ETrue, iConnObs.GetETag() );
- DP_SDA("CPresencePluginPublisher::MakePublishReqL modifyed");
- }
-
- DP_SDA("CPresencePluginPublisher::MakePublishReqL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::StartXdmOperationL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::StartXdmOperationL(
- TXIMPRequestId aReqId )
- {
- DP_SDA("CPresencePluginPublisher::StartXdmOperationL");
- __ASSERT_DEBUG( !IsActive(), User::Leave( KErrNotReady ) );
- iXIMPId = aReqId;
- if ( !iXdmUtils )
- {
- DP_SDA("StartXdmOperationL Initialize XDMUtils");
- iXdmUtils = iConnObs.XdmUtilsL();
- }
-
- // Allways check those XDM files are ok /
- //publish seems to be jam if xdm not initialized ?
- iXdmUtils->InitializeXdmL( iStatus );
- SetActive();
- DP_SDA("CPresencePluginPublisher::StartXdmOperationL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::WinfoNotificationL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::WinfoNotificationL(
- MSimpleWinfo& aWinfo )
- {
- DP_SDA("CPresencePluginPublisher::WinfoNotificationL");
-
- RPointerArray<MSimpleElement> elems;
- CleanupClosePushL( elems ); // << elems
- TInt err = aWinfo.SimpleElementsL( elems );
- User::LeaveIfError( err );
- TInt count = elems.Count();
-
- DP_SDA2("WinfoNotificationL elems count%d", count);
-
- __ASSERT_ALWAYS( count == 1, User::Leave( KErrCorrupt ) );
-
- using namespace NPresencePlugin::NPresence;
-
- const TDesC8* stateVal = aWinfo.AttrValue( KPresenceState8 );
-
- if ( stateVal && !stateVal->CompareF( KPresenceFull8 )) //state full
- {
- // full winfo-list is received (New empty list )
- DP_SDA("CPresencePluginPublisher::WinfoNotificationL full list found");
- DeleteWatchers();
- }
- else
- {
- DP_SDA("PluginPublisher: state != full");
- // Test if state is partitial
- if ( stateVal && !stateVal->CompareF( KPresencePartial8 ))
- {
- DP_SDA("PluginPublisher: state = partitial");
- }
- }
-
- MSimpleElement* elem = elems[0];
- TPtrC8 p8 = elem->LocalName();
- err = p8.CompareF( KPresenceWatcherList8 );
- DP_SDA2("WinfoNotificationL KPresenceWatcherList8 err %d", err);
- User::LeaveIfError( err );
- DP_SDA("WinfoNotificationL KPresenceWatcherList8 continue");
-
- //Get elemets from document
- err = elem->SimpleElementsL( elems );
- User::LeaveIfError( err );
- DP_SDA2("WinfoNotificationL get elems err %d", err);
- //Make collect from active watchers
- CollectWatchersL( elems );
-
- CDesCArrayFlat* watchers = MakeCurrentWatcherListLC();// << watchers
- MXIMPObjectCollection *actives =
- iConnObs.ObjectFactory().NewObjectCollectionLC();// << actives
-
- // Create MXIMPPresenceWatcherInfo entities for
- // all active watchers and add to actives.
- TInt wCount = watchers->MdcaCount();
- DP_SDA2("CPresencePluginPublisher::WinfoNotificationL wCount %d", wCount);
- for ( TInt j = 0; j < wCount; j++ )
- {
- // create MXIMPPresenceWatcherInfo object
- MPresenceWatcherInfo* wInfo =
- iConnObs.PresenceObjectFactoryOwn().
- NewPresenceWatcherInfoLC();// << wInfo
-
- MXIMPIdentity* identity =
- iConnObs.ObjectFactory().NewIdentityLC();// << identity
-
- identity->SetIdentityL( watchers->MdcaPoint( j ) );
- wInfo->SetWatcherIdL( identity );
- CleanupStack::Pop( );// >> identity
-
- wInfo->SetWatcherDisplayNameL( watchers->MdcaPoint( j ) );
- wInfo->SetWatcherTypeL( MPresenceWatcherInfo::EPresenceSubscriber );
-
- actives->AddObjectL( wInfo );
- CleanupStack::Pop( ); // >> wInfo
- }
-
- MProtocolPresencePublishingDataHost& publishHost =
- iConnObs.Host()->ProtocolPresenceDataHost().PublishingDataHost();
-
- publishHost.HandlePresenceWatcherListL( actives );
-
- CleanupStack::Pop(); // >> actives
- CleanupStack::PopAndDestroy( watchers ); // >> watchers
-
- CleanupStack::PopAndDestroy( &elems ); // >> elems
- DP_SDA("CPresencePluginPublisher::WinfoNotificationL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::WinfoTerminatedL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::WinfoTerminatedL( TInt aReason )
- {
- DP_SDA("CPresencePluginPublisher::WinfoTerminatedL - begin");
-
- // call SetPresenceWatcherListDataSubscriptionStateL
- iSubscribed = EFalse;
-
- MXIMPObjectFactory& myFactory = iConnObs.ObjectFactory();
- MProtocolPresencePublishingDataHost& publishHost =
- iConnObs.Host()->ProtocolPresenceDataHost().PublishingDataHost();
- MXIMPDataSubscriptionState *state =
- myFactory.NewDataSubscriptionStateLC();
-
- MXIMPStatus* status = myFactory.NewStatusLC();
- state->SetSubscriptionStateL(
- MXIMPDataSubscriptionState::ESubscriptionInactive );
-
- state->SetDataStateL( MXIMPDataSubscriptionState::EDataUnavailable );
- status->SetResultCode( aReason );
- publishHost.SetPresenceWatcherListDataSubscriptionStateL( state, status );
- CleanupStack::Pop( 2 ); // status, state
- DP_SDA("CPresencePluginPublisher::WinfoTerminatedL - end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::NewETagL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::NewETagL( const TDesC8& aVal )
- {
- DP_SDA("CPresencePluginPublisher::NewETagL");
- // Set ETag value
- DP_SDA("CPresencePluginPublisher::NewETagL Set ETag");
- TBuf8<KBufSize255> buf;
- buf.Copy( aVal );
- iConnObs.SetETag( buf );
- buf.Zero();
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::MakeCurrentWatcherListLC
-// ---------------------------------------------------------------------------
-//
-CDesCArrayFlat* CPresencePluginPublisher::MakeCurrentWatcherListLC()
- {
- DP_SDA("CPresencePluginPublisher::MakeCurrentWatcherListLC - begin");
- // No one should be added more than once
- const TInt KMyGran = 10;
- CDesCArrayFlat* watchers = new (ELeave) CDesCArrayFlat( KMyGran );
- CleanupStack::PushL( watchers ); // << watchers
-
- // add user only once here.
- TDblQueIter<CPresencePluginWatcherInfo> rIter( iWatcherList );
- rIter.SetToFirst();
-
- while ( rIter )
- {
- CPresencePluginWatcherInfo* w = rIter;
- rIter++;
-
- TInt dummy = 0;
- // Zero -> Found
- if ( watchers->Find( w->SipId(), dummy ))
- {
- watchers->AppendL( w->SipId() );
- }
- }
-
- DP_SDA("CPresencePluginPublisher::MakeCurrentWatcherListLC - end");
- return watchers;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::CollectWatchers
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::CollectWatchersL(
- RPointerArray<MSimpleElement>& aElems )
- {
- using namespace NPresencePlugin::NPresence;
- HBufC* nodeContent = NULL;
-
- TInt count = aElems.Count();
- DP_SDA2("CPresencePluginPublisher::CollectWatchers elem count %d",count);
-
- for ( TInt i = 0; i < count; i++ )
- {
- MSimpleElement* elem = aElems[i];
- TPtrC8 p8( elem->LocalName());
-
- if (!( p8.CompareF( KPresenceWatcher8 )))
- {
- DP_SDA("CPresencePluginPublisher::CollectWatchers watchers found");
- const TDesC8* pp8 = elem->AttrValue( KPresenceStatus8 );
- // Active wathers here
- if ( pp8 && !pp8->CompareF( KPresenceActive8 ))
- {
- DP_SDA("CollectWatchers: ACTIVE found");
- // save id since there may be multiple subscriptions
- // from a single watcher SIP identity.
- const TDesC8* pId8 = elem->AttrValue( KPresenceId8 );
-
- // Build collection of grant requests
- // Find the child node containing the SIP entity
- nodeContent = elem->ContentUnicodeL();
- CleanupStack::PushL( nodeContent );// << nodeContent
-
- AddWatcherIfNotExistsL(
- pId8 ? *pId8 : KNullDesC8, nodeContent->Des() );
-
- CleanupStack::PopAndDestroy( nodeContent ); //>> nodeContent
- }
- // Terminated wathers here
- else if ( pp8 && !pp8->CompareF( KPresenceTerminated8 ))
- {
- DP_SDA("CollectWatchers: Terminated");
- const TDesC8* pId8 = elem->AttrValue( KPresenceId8 );
-
- // Remove terminated from iWatcherList
- nodeContent = elem->ContentUnicodeL();
- CleanupStack::PushL( nodeContent );// << nodeContent
-
- RemoveWatcherIfExists(
- pId8 ? *pId8 : KNullDesC8, nodeContent->Des() );
-
- CleanupStack::PopAndDestroy( nodeContent );// >> nodeContent
- }
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::CreatePublisherL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::CreatePublisherL()
- {
- DP_SDA("CPresencePluginPublisher::CreatePublisherL");
- if( iPublisher )
- {
- DP_SDA("CPresencePluginPublisher::CreatePublisherL create");
- iPublisher->Close();
- iPublisher = NULL;
- iPublisher = TSimpleFactory::NewPublisherL( iConnection, *this );
- }
- DP_SDA("CPresencePluginPublisher::CreatePublisherL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::StoreOwnStatusToCacheL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginPublisher::StoreOwnStatusToCacheL()
- {
- DP_SDA("CPresencePluginPublisher::StoreOwnStatusToCacheL" );
-
- using namespace NPresencePlugin::NPresence;
- using namespace NPresencePlugin::NPresenceStates;
- using namespace NPresenceInfo::NFieldType;
-
- DP_SDA(" CPresencePluginPublisher -> convert uri" );
- HBufC* entityUri =
- CnvUtfConverter::ConvertToUnicodeFromUtf8L(
- *iDocument->EntityURI() );
- CleanupStack::PushL( entityUri );
-
- DP_SDA(" CPresencePluginPublisher -> strip prefix" );
- HBufC16* prefixStripped = iPresenceData->RemovePrefixLC(
- *entityUri );
-
- DP_SDA(" CPresencePluginPublisher -> fetch simple elements" );
- RPointerArray<MSimpleElement> simpleElements;
- CleanupClosePushL( simpleElements );
- DP_SDA(" CPresencePluginPublisher -> do fetch simple elements" );
- TInt error = iDocument->SimpleElementsL( simpleElements );
- DP_SDA2(" CPresencePluginPublisher -> fetch error: %d", error );
- User::LeaveIfError( error );
- TBool handled = EFalse;
- DP_SDA2(" CPresencePluginPublisher -> element count: %d",
- simpleElements.Count() );
-
- MSimpleElement* basicSimpleElem(NULL);
- MSimpleElement* noteSimpleElem(NULL);
-
- TBuf<KBufSize100> activitiesContentBuf;
- TBool activitiesHandled( EFalse );
-
- for( TInt index = 0 ; index < simpleElements.Count() ; index++ )
- {
- DP_SDA(" CPresencePluginPublisher -> check for person element" );
- // Check for person element
- if (!( simpleElements[index]->LocalName().CompareF( KPresencePerson8 )) ||
- !( simpleElements[index]->LocalName().CompareF( KPresenceTuple8 )) )
- {
- DP_SDA(" CPresencePluginPublisher -> person/tuple element found" );
- RPointerArray<MSimpleElement> personSubElems;
- CleanupClosePushL( personSubElems );
- simpleElements[index]->SimpleElementsL( personSubElems );
- DP_SDA2(" CPresencePluginPublisher -> person/tuple sub elemen count: %d",
- personSubElems.Count() );
-
- for ( TInt j = 0; j < personSubElems.Count(); j++ )
- {
- DP_SDA(" CPresencePluginPublisher -> check for status/activities element");
- if ( !personSubElems[j]->LocalName().CompareF( KPresenceStatus8 ) ||
- !personSubElems[j]->LocalName().CompareF( KPresenceActivities8 ))
- {
- DP_SDA(" CPresencePluginPublisher -> status/activities element found");
- //Get childs
- RPointerArray<MSimpleElement> basicElems;
- CleanupClosePushL( basicElems );
-
- personSubElems[j]->SimpleElementsL( basicElems );
- DP_SDA2(" CPresencePluginPublisher -> child elem count: %d",
- basicElems.Count() );
- for ( TInt k = 0; k < basicElems.Count(); k++ )
- {
- DP_SDA(" CPresencePluginPublisher -> check child elems");
- if ( !basicElems[k]->LocalName().CompareF(
- KPresenceBasic8 ))
- {
- DP_SDA(" -> basic element found");
- basicSimpleElem = basicElems[k];
- }
- else if ( basicSimpleElem &&
- !basicElems[k]->LocalName().CompareF( KPresenceActivities8 ) )
- {
- DP_SDA(" -> activities found from basic elem");
- RPointerArray<MSimpleElement> activitiesElems;
- CleanupClosePushL( activitiesElems );
-
- DP_SDA(" -> get activities");
- basicElems[k]->SimpleElementsL( activitiesElems );
- DP_SDA2(" -> activities count: %d",
- activitiesElems.Count() );
- if ( activitiesElems.Count() )
- {
- DP_SDA(" -> get activities, multiple, use last");
- TInt lastActiviesIndex =
- ( activitiesElems.Count() - 1 );
- activitiesContentBuf.Copy(
- activitiesElems[lastActiviesIndex]->LocalName() );
- activitiesHandled = ETrue;
- DP_SDA(" -> activity elem ok");
- }
- CleanupStack::PopAndDestroy( &activitiesElems );
- }
- else if ( basicSimpleElem &&
- !personSubElems[j]->LocalName().CompareF( KPresenceActivities8 ) )
- {
- DP_SDA(" -> activities found from person elem");
- RPointerArray<MSimpleElement> activitiesElems;
- CleanupClosePushL( activitiesElems );
-
- DP_SDA(" -> get activities");
- personSubElems[j]->SimpleElementsL( activitiesElems );
- DP_SDA2(" -> activities count: %d",
- activitiesElems.Count() );
- if ( activitiesElems.Count() )
- {
- DP_SDA(" -> get activities, multiple, use last");
- TInt lastActiviesIndex =
- ( activitiesElems.Count() - 1 );
- activitiesContentBuf.Copy(
- activitiesElems[lastActiviesIndex]->LocalName() );
- activitiesHandled = ETrue;
- DP_SDA2(" -> activities len: %d",
- activitiesContentBuf.Length() );
- DP_SDA(" -> activity elem ok");
- }
- CleanupStack::PopAndDestroy( &activitiesElems );
- }
- }
- CleanupStack::PopAndDestroy( &basicElems );
- }
- }
- CleanupStack::PopAndDestroy( &personSubElems );
- }
- else if ( !simpleElements[index]->LocalName().CompareF( KPresenceNote8 ))
- {
- DP_SDA(" CPresencePluginPublisher -> note element found" );
- noteSimpleElem = simpleElements[index];
- }
- }
- DP_SDA(" CPresencePluginPublisher -> elements handled");
- __ASSERT_ALWAYS( basicSimpleElem, User::Leave( KErrCorrupt ) );
-
- if ( !activitiesHandled )
- {
- DP_SDA(" -> activities not handled, set unknown");
- activitiesContentBuf.Copy( KPresenceUnknow );
- }
-
- HBufC* nodeContent = basicSimpleElem->ContentUnicodeL();
- CleanupStack::PushL( nodeContent );
-
- HBufC* noteContent = NULL;
- if ( noteSimpleElem )
- {
- noteContent = noteSimpleElem->ContentUnicodeL();
- CleanupStack::PushL( noteContent );
- }
- else
- {
- noteContent = KNullDesC().AllocLC();
- }
-
- MPresenceBuddyInfo2::TAvailabilityValues cacheAvailability =
- MPresenceBuddyInfo2::ENotAvailable;
- NPresenceInfo::TAvailabilityValues ximpAvailability =
- NPresenceInfo::ENotAvailable;
-
- HBufC* extendedCacheAvailability = HBufC::NewLC( KBufSize255 );
- TPtr extendedCacheAvailabilityPtr( extendedCacheAvailability->Des() );
- if ( nodeContent )
- {
- handled = ResolveOwnCacheValues( *nodeContent,
- activitiesContentBuf, cacheAvailability,
- extendedCacheAvailabilityPtr, ximpAvailability );
- }
-
- __ASSERT_ALWAYS( handled, User::Leave( KErrCorrupt ));
-
- DP_SDA(" CPresencePluginPublisher -> write to cache" );
-
- DP_SDA2(" CPresencePluginPublisher -> availability: %d",
- cacheAvailability );
- DP_SDA2(" CPresencePluginPublisher -> ext availability len: %d",
- extendedCacheAvailabilityPtr.Length() );
-
- iPresenceData->WriteStatusToCacheL(
- *prefixStripped, cacheAvailability,
- extendedCacheAvailabilityPtr, *noteContent );
-
- // Store publish variables for republish
- iPresenceData->StorePresenceOwnPresenceL(
- iConnObs.ServiceId(), ximpAvailability, *noteContent );
-
- CleanupStack::PopAndDestroy( extendedCacheAvailability );
- CleanupStack::PopAndDestroy( noteContent );
- CleanupStack::PopAndDestroy( nodeContent );
-
- DP_SDA(" CPresencePluginPublisher -> attributes handled" );
- CleanupStack::PopAndDestroy( &simpleElements );
-
- DP_SDA(" CPresencePluginPublisher -> write to cache ok, cleanup" );
-
- // prefixStripped, entityUri
- CleanupStack::PopAndDestroy( 2 );
- DP_SDA("CPresencePluginPublisher::StoreOwnStatusToCacheL out" );
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginPublisher::ResolveOwnCacheValues
-// ---------------------------------------------------------------------------
-//
-TBool CPresencePluginPublisher::ResolveOwnCacheValues(
- const TDesC& aUnicodeContent,
- const TDesC& aActivities,
- MPresenceBuddyInfo2::TAvailabilityValues& aCacheAvailability,
- TPtr& aExtendedCacheAvailability,
- NPresenceInfo::TAvailabilityValues& aXimpApiAvailability )
- {
- DP_SDA("CPresencePluginPublisher::ResolveOwnCacheValuesL" );
- using namespace NPresencePlugin::NPresence;
- using namespace NPresencePlugin::NPresenceStates;
- using namespace NPresenceInfo::NFieldType;
-
- TBool handled = EFalse;
- if ( !aUnicodeContent.CompareF( KPresenceOpen ) &&
- !aActivities.CompareF ( KPresenceBusy ) )
- {
- DP_SDA(" CPresencePluginPublisher -> busy");
- aCacheAvailability = MPresenceBuddyInfo2::EBusy;
- aExtendedCacheAvailability.Copy( KDndState() );
- aXimpApiAvailability = NPresenceInfo::EBusy;
- handled = ETrue;
- }
- // On-The-Phone case
- else if ( !aUnicodeContent.CompareF( KPresenceOpen ) &&
- !aActivities.CompareF ( KPresenceOnThePhone ) )
- {
- DP_SDA(" CPresencePluginPublisher -> on-the-phone");
- aCacheAvailability = MPresenceBuddyInfo2::EBusy;
- aExtendedCacheAvailability.Copy( KOnPhoneState() );
- aXimpApiAvailability = NPresenceInfo::EOnPhone;
- handled = ETrue;
- }
- //Away case
- else if ( !aUnicodeContent.CompareF( KPresenceOpen ) &&
- !aActivities.CompareF ( KPresenceAway ) )
- {
- DP_SDA(" CPresencePluginPublisher -> away");
- aCacheAvailability = MPresenceBuddyInfo2::EBusy;
- aExtendedCacheAvailability.Copy( KAwayState() );
- aXimpApiAvailability = NPresenceInfo::EAway;
- handled = ETrue;
- }
- //Dnd case
- else if ( !aUnicodeContent.CompareF( KPresenceOpen ) &&
- !aActivities.CompareF ( KPresenceDoNotDisturb ) )
- {
- DP_SDA(" CPresencePluginPublisher -> dnd");
- aCacheAvailability = MPresenceBuddyInfo2::EBusy;
- aExtendedCacheAvailability.Copy( KDndState() );
- aXimpApiAvailability = NPresenceInfo::EDoNotDisturb;
- handled = ETrue;
- }
- // Unknown open
- else if ( !aUnicodeContent.CompareF( KPresenceOpen ) &&
- !aActivities.CompareF ( KPresenceUnknow ) )
- {
- DP_SDA(" CPresencePluginPublisher -> open");
- aCacheAvailability = MPresenceBuddyInfo2::EAvailable;
- aExtendedCacheAvailability.Copy( KDefaultAvailableStatus() );
- aXimpApiAvailability = NPresenceInfo::EAvailable;
- handled = ETrue;
- }
- // available open
- else if ( !aUnicodeContent.CompareF( KPresenceOpen ) &&
- !aActivities.CompareF ( KPresenceAvailable ) )
- {
- DP_SDA(" CPresencePluginPublisher -> open");
- aCacheAvailability = MPresenceBuddyInfo2::EAvailable;
- aExtendedCacheAvailability.Copy( KDefaultAvailableStatus() );
- aXimpApiAvailability = NPresenceInfo::EAvailable;
- handled = ETrue;
- }
- // available open
- else if ( !aUnicodeContent.CompareF( KPresenceOpen ) &&
- !aActivities.CompareF ( KPresenceOpen ) )
- {
- DP_SDA(" CPresencePluginPublisher -> open/open");
- aCacheAvailability = MPresenceBuddyInfo2::EAvailable;
- aExtendedCacheAvailability.Copy( KDefaultAvailableStatus() );
- aXimpApiAvailability = NPresenceInfo::EAvailable;
- handled = ETrue;
- }
- //Unknown closed
- else if ( !aUnicodeContent.CompareF( KPresenceClosed ) &&
- !aActivities.CompareF ( KPresenceUnknow ) )
- {
- DP_SDA(" CPresencePluginPublisher -> closed");
- aCacheAvailability = MPresenceBuddyInfo2::ENotAvailable;
- aExtendedCacheAvailability.Copy( KInvisibleState() );
- aXimpApiAvailability = NPresenceInfo::ENotAvailable;
- handled = ETrue;
- }
- //All other states are closed
- else
- {
- DP_SDA(" CPresencePluginPublisher -> else closed");
- aCacheAvailability = MPresenceBuddyInfo2::ENotAvailable;
- aExtendedCacheAvailability.Copy( KInvisibleState() );
- aXimpApiAvailability = NPresenceInfo::ENotAvailable;
- handled = ETrue;
- }
- DP_SDA2("CPresencePluginPublisher::ResolveOwnCacheValuesL out, ret: %d",
- handled );
- return handled;
- }
-
-// End of file