--- a/simpledatamodeladapter/src/presencepluginentitywatcher.cpp Thu May 27 13:17:17 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,683 +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 <e32svr.h>
-#include <utf.h>
-#include <ximpdatasubscriptionstate.h>
-#include <protocolpresencewatchingdatahost.h>
-#include <ximpobjectfactory.h>
-#include <presenceinfo.h>
-#include <ximpprotocolconnectionhost.h>
-#include <protocolpresencedatahost.h>
-#include <presenceobjectfactory.h>
-#include <ximpstatus.h>
-#include <ximpidentity.h>
-#include <simplefactory.h>
-#include <msimplewatcher.h>
-#include <msimpledocument.h>
-#include <msimpleconnection.h>
-#include <simpleerrors.h>
-#include <avabilitytext.h>
-
-#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 );
-
- // 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<MPresenceInfo> entities;
- RPointerArray<MXIMPIdentity> terminated;
- RPointerArray<MXIMPIdentity> 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