diff -r 2580314736af -r 2669f8761a99 simpledatamodeladapter/src/presencepluginentitywatcher.cpp --- a/simpledatamodeladapter/src/presencepluginentitywatcher.cpp Thu Aug 19 10:19:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,689 +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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "presencepluginentitywatcher.h" -#include "presenceplugindata.h" -#include "presencepluginwatcher.h" - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// CPresencePluginEntityWatcher::CPresencePluginEntityWatcher() -// --------------------------------------------------------------------------- -// -CPresencePluginEntityWatcher::CPresencePluginEntityWatcher( - MPresencePluginConnectionObs& aObs, - MSimpleConnection& aConn, - CPresencePluginWatcher& aWatcher ) - :iConnObs(aObs), iConnection(aConn), - iPluginWatcher(aWatcher), iOperation( EPluginIdle ) - { - } - -// --------------------------------------------------------------------------- -// CPresencePluginEntityWatcher::ConstructL() -// --------------------------------------------------------------------------- -// -void CPresencePluginEntityWatcher::ConstructL( - CPresencePluginData* aPresenceData ) - { - DP_SDA("CPresencePluginEntityWatcher::ConstructL - begin"); - iWatcher = TSimpleFactory::NewWatcherL( iConnection, *this ); - iPresenceData = aPresenceData; - DP_SDA("CPresencePluginEntityWatcher::ConstructL - end"); - } - -// --------------------------------------------------------------------------- -// CPresencePluginEntityWatcher::NewL() -// --------------------------------------------------------------------------- -// -CPresencePluginEntityWatcher* CPresencePluginEntityWatcher::NewL( - MPresencePluginConnectionObs& aObs, - MSimpleConnection& aConn, - CPresencePluginWatcher& aWatcher, - CPresencePluginData* aPresenceData ) - { - DP_SDA("CPresencePluginEntityWatcher::NewL"); - CPresencePluginEntityWatcher* self = - new( ELeave ) CPresencePluginEntityWatcher( aObs, aConn, aWatcher ); - CleanupStack::PushL( self ); - self->ConstructL( aPresenceData ); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// CPresencePluginEntityWatcher::~CPresencePluginEntityWatcher() -// --------------------------------------------------------------------------- -// -CPresencePluginEntityWatcher::~CPresencePluginEntityWatcher() - { - DP_SDA("CPresencePluginEntityWatcher::~CPresencePluginEntityWatcher"); - if ( iWatcher ) - { - iWatcher->Close(); - } - delete iEntityId; - } - -// --------------------------------------------------------------------------- -// CPresencePluginEntityWatcher::StartSubscribeL() -// --------------------------------------------------------------------------- -// -void CPresencePluginEntityWatcher::StartSubscribeL( - const TDesC8& aPresentityId ) - { - DP_SDA("CPresencePluginEntityWatcher::StartSubscribeL"); - delete iEntityId; - iEntityId = NULL; - DP_SDA(" StartSubscribeL - entity id deleted"); - - TRAPD( error, iSimpleId = iWatcher->SubscribeL( - aPresentityId, NULL, ETrue, EFalse );); - DP_SDA2("StartSubscribeL subscribe error %d",error); - - if( KErrNone != error ) - { - DP_SDA("CPresencePluginEntityWatcher::StartSubscribeL ERROR"); - if( KErrInUse == error ) - { - DP_SDA(" iWatcher is in use try to close and restart"); - iWatcher->Close(); - iWatcher = TSimpleFactory::NewWatcherL( iConnection, *this ); - DP_SDA("StartSubscribeL Second try after creating iWatcher again"); - error = KErrNone; - TRAP( error, iSimpleId = iWatcher->GetPresenceL( - aPresentityId, NULL, EFalse );); - DP_SDA2("iWatcher->GetPresenceL error2 = %d",error ); - } - } - - // Save entity id after successful call - DP_SDA("StartSubscribeL - allocate entity id"); - iEntityId = aPresentityId.AllocL(); - DP_SDA("StartSubscribeL - new entity id stored"); - - iOperation = EPluginStart; - - DP_SDA("CPresencePluginEntityWatcher::StartSubscribeL End"); - } - -// --------------------------------------------------------------------------- -// CPresencePluginEntityWatcher::StartSubscribeL() -// --------------------------------------------------------------------------- -// -void CPresencePluginEntityWatcher::StartSubscribeL( - const TDesC8& aPresentityId, TRequestStatus& aClientRequst ) - { - DP_SDA("CPresencePluginEntityWatcher::StartSubscribeL 2"); - delete iEntityId; - iEntityId = NULL; - DP_SDA("CPresencePluginEntityWatcher::StartSubscribeL - entity id deleted"); - - iClientStatus = &aClientRequst; - *iClientStatus = KRequestPending; // wait for watcher complete - iOperation = EPluginStartNotifyClient; - - TRAPD( error, iSimpleId = iWatcher->SubscribeL( - aPresentityId, NULL, ETrue, EFalse );); - DP_SDA2("StartSubscribeL subscribe error %d",error); - - if( KErrInUse == error ) - { - DP_SDA("CPresencePluginEntityWatcher::StartSubscribeL ERROR"); - DP_SDA("StartSubscribeL iWatcher is in use try to close and restart"); - iWatcher->Close(); - iWatcher = TSimpleFactory::NewWatcherL( iConnection, *this ); - DP_SDA("StartSubscribeL Second try after creating iWatcher again"); - error = KErrNone; - TRAP( error, iSimpleId = iWatcher->GetPresenceL( - aPresentityId, NULL, EFalse );); - DP_SDA2("iWatcher->GetPresenceL error2 = %d",error ); - } - User::LeaveIfError( error ); - - // Save entity id after successful call - DP_SDA("StartSubscribeL - allocate entity id"); - iEntityId = aPresentityId.AllocL(); - DP_SDA("StartSubscribeL - new entity id stored"); - - DP_SDA("CPresencePluginEntityWatcher::StartSubscribeL End"); - } - -// --------------------------------------------------------------------------- -// CPresencePluginEntityWatcher::StopSubscribeL() -// --------------------------------------------------------------------------- -// -void CPresencePluginEntityWatcher::StopSubscribeL( - TRequestStatus& aClientRequst ) - { - DP_SDA("CPresencePluginEntityWatcher::StopSubscribeL 2 (list)"); - iClientStatus = &aClientRequst; - *iClientStatus = KRequestPending; // wait for watcher complete - - iSimpleId = iWatcher->UnsubscribeL(); - iOperation = EPluginStop; - DP_SDA("CPresencePluginEntityWatcher::StopSubscribeL 2 end"); - } - -// --------------------------------------------------------------------------- -// CPresencePluginEntityWatcher::StopSubscribeL() -// --------------------------------------------------------------------------- -// -void CPresencePluginEntityWatcher::StopSubscribeL( ) - { - DP_SDA("CPresencePluginEntityWatcher::StopSubscribeL"); - iSimpleId = iWatcher->UnsubscribeL(); - iOperation = EPluginStop; - DP_SDA("CPresencePluginEntityWatcher::StopSubscribeL end"); - } - -// --------------------------------------------------------------------------- -// CPresencePluginEntityWatcher::WatcherReqCompleteL -// --------------------------------------------------------------------------- -// -void CPresencePluginEntityWatcher::WatcherReqCompleteL( - TInt /*aOpId*/, TInt aStatus ) - { - DP_SDA("CPresencePluginEntityWatcher::WatcherReqCompleteL"); - DP_SDA2("WatcherReqCompleteL status %d",aStatus ); - TPluginEntityWatcherOperation orig = iOperation; - DP_SDA2("WatcherReqCompleteL orig %d",orig ); - iOperation = EPluginIdle; - - if( !aStatus ) - { - iPluginWatcher.AcceptL( this ); - } - - if ( EPluginStartNotifyClient == orig ) - { - orig = EPluginStart; - DP_SDA(" WatcherReqCompleteL complete client"); - CompleteClientReq( aStatus ); - } - else if ( iClientStatus ) - { - DP_SDA(" WatcherReqCompleteL complete client 2"); - CompleteClientReq( aStatus ); - } - - MSimpleWatcher::TSimpleSipSubscriptionState subscribeStatus = - iWatcher->SipSubscriptionState(); - DP_SDA2("WatcherReqCompleteL subscribe status %d",subscribeStatus ); - - if ( aStatus && ( orig == EPluginStop || orig == EPluginStart && - MSimpleWatcher::ESimpleStateTerminated != subscribeStatus ) ) - { - DP_SDA("CPresencePluginEntityWatcher::WatcherReqCompleteL if"); - // Delete this entity as useless - DP_SDA("WatcherReqCompleteL DELETE WATCHER"); - iPluginWatcher.DeleteWatcher( iEntityId->Des() ); - //Do not call anything, - //since the method call above deletes this instance. - } - else if( !aStatus && ( MSimpleWatcher::ESimpleStateActive == - subscribeStatus && - orig == EPluginStop ) ) - { - DP_SDA(" WatcherReqCompleteL state STOP"); - // Delete this entity as useless - DP_SDA("WatcherReqCompleteL DELETE WATCHER 2"); - iPluginWatcher.DeleteWatcher( iEntityId->Des() ); - } - else if ( MSimpleWatcher::ESimpleStatePending == subscribeStatus ) - { - SetPendingToXIMPL(); - } - DP_SDA("CPresencePluginEntityWatcher::WatcherReqCompleteL end"); - } - -// --------------------------------------------------------------------------- -// CPresencePluginEntityWatcher::SetPendingToXIMPL -// --------------------------------------------------------------------------- -// -void CPresencePluginEntityWatcher::SetPendingToXIMPL() - { - DP_SDA("CPresencePluginEntityWatcher::SetPendingToXIMPL"); - //check what is grand request list subscribe state - if( iConnObs.GrandListState() ) - { - DP_SDA("CPresencePluginEntityWatcher::SetPendingToXIMPL True"); - MProtocolPresenceWatchingDataHost& watcherHost = - iConnObs.ProtocolPresenceHost().WatchingDataHost(); - MPresenceInfo* prInfo = - iConnObs.PresenceObjectFactoryOwn().NewPresenceInfoLC(); - - //Call set to pending - iPresenceData->NotifyToPendingToXIMPL( - iConnObs.PresenceObjectFactoryOwn(), - *prInfo ); - - MXIMPIdentity* identity2 = iConnObs.ObjectFactory().NewIdentityLC(); - HBufC* uniBuffer = - CnvUtfConverter::ConvertToUnicodeFromUtf8L( iEntityId->Des() ); - CleanupStack::PushL( uniBuffer ); - - HBufC* withoutPrefix = iPresenceData->RemovePrefixLC( *uniBuffer ); - identity2->SetIdentityL( *withoutPrefix ); - - //Call presence cache writer too - TBuf<20> buf; - buf.Copy( KPendingRequestExtensionValue ); - - iPresenceData->WriteStatusToCacheL( *withoutPrefix, - MPresenceBuddyInfo2::ENotAvailable, - buf, - KNullDesC() ); - - // XIMP Host API callback - watcherHost.HandleSubscribedPresentityPresenceL( identity2, prInfo ); - - CleanupStack::PopAndDestroy( withoutPrefix ); - CleanupStack::PopAndDestroy( uniBuffer ); - CleanupStack::Pop(); // >> identity2 - CleanupStack::Pop(); // >> prInfo - } - DP_SDA("CPresencePluginEntityWatcher::SipSubscriptionState end"); - } - -// --------------------------------------------------------------------------- -// CPresencePluginEntityWatcher::SetActiveToXIMPL -// --------------------------------------------------------------------------- -// -void CPresencePluginEntityWatcher::SetActiveToXIMPL( const TDesC& aIdentity ) - { - DP_SDA("CPresencePluginEntityWatcher::SetActiveToXIMPL, identity"); - //check what is grand request list subscribe state - if( iConnObs.GrandListState() ) - { - DP_SDA("CPresencePluginEntityWatcher::SetPendingToXIMPL True"); - MProtocolPresenceWatchingDataHost& watcherHost = - iConnObs.ProtocolPresenceHost().WatchingDataHost(); - MPresenceInfo* prInfo = - iConnObs.PresenceObjectFactoryOwn().NewPresenceInfoLC(); - - //Call set to pending - DP_SDA(" SetPendingToXIMPL, notify active"); - iPresenceData->NotifyToActiveToXIMPL( - iConnObs.PresenceObjectFactoryOwn(), - *prInfo ); - - DP_SDA(" SetActiveToXIMPL, create new identity"); - MXIMPIdentity* identity2 = iConnObs.ObjectFactory().NewIdentityLC(); - - DP_SDA(" SetActiveToXIMPL, strip prefix"); - HBufC* withoutPrefix = iPresenceData->RemovePrefixLC( aIdentity ); - identity2->SetIdentityL( *withoutPrefix ); - - DP_SDA(" SetActiveToXIMPL, write to cache"); - //Call presence cache writer too - iPresenceData->WriteStatusToCacheL( *withoutPrefix, - MPresenceBuddyInfo2::ENotAvailable, - KDefaultAvailableStatus(), - KNullDesC() ); - - DP_SDA(" SetActiveToXIMPL, ximp api callback"); - // XIMP Host API callback - watcherHost.HandleSubscribedPresentityPresenceL( identity2, prInfo ); - - DP_SDA("CPresencePluginEntityWatcher::SetActiveToXIMPL, cleanup"); - CleanupStack::PopAndDestroy( withoutPrefix ); - CleanupStack::Pop(); // >> identity2 - CleanupStack::Pop(); // >> prInfo - } - DP_SDA("CPresencePluginEntityWatcher::SetActiveToXIMPL end"); - } - -// --------------------------------------------------------------------------- -// CPresencePluginEntityWatcher::SetTerminatedToXIMPL -// --------------------------------------------------------------------------- -// -void CPresencePluginEntityWatcher::SetTerminatedToXIMPL( - const TDesC& aIdentity ) - { - DP_SDA("CPresencePluginEntityWatcher::SetTerminatedToXIMPL"); - DP_SDA2("CPresencePluginEntityWatcher::SetTerminatedToXIMPL, uri: %S", - &aIdentity ); - //check what is grand request list subscribe state - if( iConnObs.GrandListState() ) - { - DP_SDA("CPresencePluginEntityWatcher::SetTerminatedToXIMPL True"); - MProtocolPresenceWatchingDataHost& watcherHost = - iConnObs.ProtocolPresenceHost().WatchingDataHost(); - MPresenceInfo* prInfo = - iConnObs.PresenceObjectFactoryOwn().NewPresenceInfoLC(); - - //Call set to pending - iPresenceData->NotifyTerminatedToXIMPL( - iConnObs.PresenceObjectFactoryOwn(), - *prInfo ); - - MXIMPIdentity* identity2 = iConnObs.ObjectFactory().NewIdentityLC(); - - HBufC* withoutPrefix = iPresenceData->RemovePrefixLC( aIdentity ); - identity2->SetIdentityL( *withoutPrefix ); - - DP_SDA("SetTerminatedToXIMPL, write offline status to cache"); - iPresenceData->WriteStatusToCacheL( *withoutPrefix, - MPresenceBuddyInfo2::ENotAvailable, - KNullDesC(), - KNullDesC() ); - - // XIMP Host API callback - watcherHost.HandleSubscribedPresentityPresenceL( identity2, prInfo ); - - CleanupStack::PopAndDestroy( withoutPrefix ); - CleanupStack::Pop(); // >> identity2 - CleanupStack::Pop( ); // >> prInfo - } - DP_SDA("CPresencePluginEntityWatcher::SetTerminatedToXIMPL end"); - } - -// --------------------------------------------------------------------------- -// CPresencePluginEntityWatcher::SetActiveToXIMPL -// --------------------------------------------------------------------------- -// -void CPresencePluginEntityWatcher::SetActiveToXIMPL( - MSimpleDocument& aDocument ) - { - DP_SDA("CPresencePluginEntityWatcher::SetActiveToXIMPL, aDocument"); - // No need to check the expiration here since WatcherTerminatedL - // is called then too. - MProtocolPresenceWatchingDataHost& watcherHost = - iConnObs.ProtocolPresenceHost().WatchingDataHost(); - MPresenceInfo* prInfo = - iConnObs.PresenceObjectFactoryOwn().NewPresenceInfoLC(); - - DP_SDA(" SetActiveToXIMPL, call NotifyToPrInfoL"); - - iPresenceData->NotifyToPrInfoL( - iConnObs.ObjectFactory(), - iConnObs.PresenceObjectFactoryOwn(), - aDocument, *prInfo ); - DP_SDA(" SetActiveToXIMPL, NotifyToPrInfoL ok"); - - // Get variables from presence info object for cache entry - MPresenceBuddyInfo2::TAvailabilityValues availability = - MPresenceBuddyInfo2::ENotAvailable; - - HBufC* extendedAvailability = HBufC::NewLC( KBufSize255 ); - TPtr extendedAvailabilityPtr( extendedAvailability->Des() ); - - HBufC* statusMessage = HBufC::NewLC( KBufSize255 ); - TPtr statusMessagePtr( statusMessage->Des() ); - - DP_SDA(" SetActiveToXIMPL, NotifyToPrInfoL ok, get cache entries"); - iPresenceData->CacheEntriesFromPrInfo( *prInfo, - availability, extendedAvailabilityPtr, statusMessagePtr ); - - DP_SDA(" SetActiveToXIMPL, create identity"); - MXIMPIdentity* identity2 = iConnObs.ObjectFactory().NewIdentityLC(); - HBufC* uniBuffer = - CnvUtfConverter::ConvertToUnicodeFromUtf8L( - *aDocument.EntityURI() ); - CleanupStack::PushL( uniBuffer ); - DP_SDA("CPresencePluginEntityWatcher::SetActiveToXIMPL, identity ok"); - - DP_SDA("CPresencePluginEntityWatcher::SetActiveToXIMPL, strip prefix"); - HBufC* withoutPrefix = iPresenceData->RemovePrefixLC( *uniBuffer ); - identity2->SetIdentityL( *withoutPrefix ); - - //Call presence cache writer too - iPresenceData->WriteStatusToCacheL( *withoutPrefix, availability, - extendedAvailabilityPtr, statusMessagePtr ); - - // XIMP Host API callback - watcherHost.HandleSubscribedPresentityPresenceL( identity2, prInfo ); - - CleanupStack::PopAndDestroy( withoutPrefix ); - CleanupStack::PopAndDestroy( uniBuffer ); - CleanupStack::Pop(); // >> identity2 - - CleanupStack::PopAndDestroy( statusMessage ); - CleanupStack::PopAndDestroy( extendedAvailability ); - - CleanupStack::Pop(); // >> prInfo - DP_SDA("CPresencePluginEntityWatcher::SetActiveToXIMPL end"); - } - -// --------------------------------------------------------------------------- -// CPresencePluginEntityWatcher::SetTerminatedToXIMPL -// --------------------------------------------------------------------------- -// -void CPresencePluginEntityWatcher::SetTerminatedToXIMPL( ) - { - DP_SDA("CPresencePluginEntityWatcher::SetTerminatedToXIMPL"); - DP_SDA("CPresencePluginEntityWatcher::SetTerminatedToXIMPL True"); - - MProtocolPresenceWatchingDataHost& watcherHost = - iConnObs.ProtocolPresenceHost().WatchingDataHost(); - MPresenceInfo* prInfo = - iConnObs.PresenceObjectFactoryOwn().NewPresenceInfoLC(); - - //Call set to pending - iPresenceData->NotifyTerminatedToXIMPL( - iConnObs.PresenceObjectFactoryOwn(), - *prInfo ); - - MXIMPIdentity* identity2 = iConnObs.ObjectFactory().NewIdentityLC(); - HBufC* uniBuffer = - CnvUtfConverter::ConvertToUnicodeFromUtf8L( iEntityId->Des() ); - - CleanupStack::PushL( uniBuffer ); - HBufC* withoutPrefix = iPresenceData->RemovePrefixLC( *uniBuffer ); - identity2->SetIdentityL( *withoutPrefix ); - - //Call presence cache writer too - iPresenceData->WriteStatusToCacheL( *withoutPrefix, - MPresenceBuddyInfo2::ENotAvailable, - KInvisibleState(), - KNullDesC() ); - - // XIMP Host API callback - watcherHost.HandleSubscribedPresentityPresenceL( identity2, prInfo ); - - DP_SDA2("SetTerminatedToXIMPL2: ident %S", &identity2->Identity() ); - CleanupStack::PopAndDestroy( withoutPrefix ); - CleanupStack::PopAndDestroy( uniBuffer ); - CleanupStack::Pop(); // >> identity21 - CleanupStack::Pop(); // >> prInfo - - DP_SDA("CPresencePluginEntityWatcher::SetTerminatedToXIMPL end"); - } - -// --------------------------------------------------------------------------- -// CPresencePluginEntityWatcher::WatcherNotificationL() -// --------------------------------------------------------------------------- -// -void CPresencePluginEntityWatcher::WatcherNotificationL( - MSimpleDocument& aDocument ) - { - DP_SDA("CPresencePluginEntityWatcher::WatcherNotificationL"); - - MSimpleWatcher::TSimpleSipSubscriptionState subscribeStatus = - iWatcher->SipSubscriptionState(); - DP_SDA2("WatcherNotificationL subscribe status %d",subscribeStatus ); - - //If subscribeStatus = pending - if( MSimpleWatcher::ESimpleStatePending == subscribeStatus ) - { - // Pending - DP_SDA("CPresencePluginEntityWatcher::WatcherNotificationL PENDING"); - SetPendingToXIMPL(); - } - else if( MSimpleWatcher::ESimpleStateTerminated == subscribeStatus ) - { - DP_SDA("CPresencePluginEntityWatcher::WatcherNotificationL TERMINATED"); - SetTerminatedToXIMPL( ); - } - else - { - //Active - DP_SDA("WatcherNotificationL normal Case"); - SetActiveToXIMPL( aDocument ); - } - DP_SDA("CPresencePluginEntityWatcher::WatcherNotificationL end"); - } - -// --------------------------------------------------------------------------- -// CPresencePluginEntityWatcher::WatcherListNotificationL() -// --------------------------------------------------------------------------- -// -void CPresencePluginEntityWatcher::WatcherListNotificationL( - MSimplePresenceList& aList ) - { - DP_SDA("CPresencePluginEntityWatcher::WatcherListNotificationL"); - // call all the necessary callbacks, for new data + teminated ones. - - MProtocolPresenceWatchingDataHost& watcherHost = - iConnObs.Host()->ProtocolPresenceDataHost().WatchingDataHost(); - - RPointerArray entities; - RPointerArray terminated; - RPointerArray actives; - - TRAPD( err, iPresenceData->NotifyListToPrInfoL( - iConnObs.ObjectFactory(),iConnObs.PresenceObjectFactoryOwn(), - aList, entities, actives, terminated )); - if ( err ) - { - entities.ResetAndDestroy(); - terminated.ResetAndDestroy(); - actives.ResetAndDestroy(); - entities.Close(); - terminated.Close(); - actives.Close(); - return; - } - - // Start to collect data for HandleSubscribedPresentityPresenceL - TInt counter = entities.Count(); - for ( TInt i = counter-1 ; i>=0; i-- ) - { - HBufC* withoutPrefix = iPresenceData->RemovePrefixLC( - actives[i]->Identity() ); - actives[i]->SetIdentityL( *withoutPrefix ); - - watcherHost.HandleSubscribedPresentityPresenceL( - actives[i], entities[i] ); - // Owenership is transferred - actives.Remove(i); - entities.Remove(i); - CleanupStack::PopAndDestroy( withoutPrefix ); - } - - entities.ResetAndDestroy(); - terminated.ResetAndDestroy(); - actives.ResetAndDestroy(); - - entities.Close(); - terminated.Close(); - actives.Close(); - } - -// --------------------------------------------------------------------------- -// CPresencePluginEntityWatcher::WatcherTerminatedL() -// --------------------------------------------------------------------------- -// -void CPresencePluginEntityWatcher::WatcherTerminatedL( - TInt /*aOpId*/, TInt aReason ) - { - DP_SDA2("CPresencePluginEntityWatcher::WatcherTerminatedL -reason: %d", aReason ); - - MProtocolPresenceWatchingDataHost& watcherHost = - iConnObs.Host()->ProtocolPresenceDataHost().WatchingDataHost(); - - MXIMPDataSubscriptionState *state = - iConnObs.ObjectFactory().NewDataSubscriptionStateLC(); - MXIMPStatus* status = iConnObs.ObjectFactory().NewStatusLC(); - state->SetSubscriptionStateL( - MXIMPDataSubscriptionState::ESubscriptionInactive ); - status->SetResultCode( aReason ); - MXIMPIdentity* identity = iConnObs.ObjectFactory().NewIdentityLC(); - - HBufC16* buf16 = HBufC16::NewLC( PresentityId().Length()); - buf16->Des().Copy( PresentityId() ); - identity->SetIdentityL( buf16->Des() ); - - //Visualize closed state OpenSer - SetTerminatedToXIMPL( buf16->Des() ); - - CleanupStack::PopAndDestroy( buf16 ); - watcherHost.SetPresentityPresenceDataSubscriptionStateL( - identity, state, status ); - DP_SDA("CPresencePluginEntityWatcher::WatcherTerminatedL pop"); - CleanupStack::Pop( 3 ); - - iPluginWatcher.DeleteWatcher( iEntityId->Des() ); - - DP_SDA("CPresencePluginEntityWatcher::WatcherTerminatedL end"); - } - -// --------------------------------------------------------------------------- -// CPresencePluginWatcher::CompleteClientReq() -// --------------------------------------------------------------------------- -// -void CPresencePluginEntityWatcher::CompleteClientReq( TInt aStatus ) - { - DP_SDA("CPresencePluginEntityWatcher::CompleteClientReq"); - iOperation = EPluginIdle; - TRequestStatus* s = iClientStatus; - User::RequestComplete( s, aStatus ); - iClientStatus = NULL; - DP_SDA("CPresencePluginEntityWatcher::CompleteClientReq out"); - } - -// --------------------------------------------------------------------------- -// CPresencePluginEntityWatcher::PresentityId -// --------------------------------------------------------------------------- -// -TPtrC8 CPresencePluginEntityWatcher::PresentityId( ) - { - DP_SDA("CPresencePluginEntityWatcher::PresentityId"); - return iEntityId ? iEntityId->Des() : TPtrC8(); - } - -// --------------------------------------------------------------------------- -// CPresencePluginEntityWatcher::XIMPRequestId -// --------------------------------------------------------------------------- -// -TXIMPRequestId CPresencePluginEntityWatcher::XIMPRequestId( ) - { - return iXIMPId; - } - -// End of file