--- a/presencefwsimpleadpt/src/simplepluginentitywatcher.cpp Thu Aug 19 10:19:02 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,459 +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: SIMPLE Protocol implementation for Presence Framework
-*
-*/
-
-
-
-
-#include <e32std.h>
-#include <utf.h>
-
-#include <ximpdatasubscriptionstate.h>
-#include <personpresenceinfo.h>
-#include <protocolpresencewatchingdatahost.h>
-#include <presenceinfo.h>
-#include <presenceinfofieldcollection.h>
-#include <presenceinfofield.h>
-#include <presenceinfofieldvaluetext.h>
-#include <presenceinfofieldvalueenum.h>
-#include <presenceobjectfactory.h>
-#include <presentitygroupmemberinfo.h>
-#include <protocolpresencedatahost.h>
-#include <protocolpresentitygroupsdatahost.h>
-#include <ximpobjectcollection.h>
-#include <ximpobjectfactory.h>
-#include <ximpprotocolconnectionhost.h>
-#include <ximpstatus.h>
-#include <ximpidentity.h>
-
-#include <simplefactory.h>
-
-#include <msimplewinfo.h>
-#include <msimplewatcher.h>
-#include <msimpledocument.h>
-#include <msimpleelement.h>
-
-#include "simpleplugincommon.h"
-#include "simplepluginentitywatcher.h"
-#include "simpleplugindebugutils.h"
-#include "simpleplugindata.h"
-#include "simpleutils.h"
-#include "simplepluginwatcher.h"
-
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// CSimplePluginEntityWatcher::CSimplePluginEntityWatcher
-// ---------------------------------------------------------------------------
-//
-CSimplePluginEntityWatcher::CSimplePluginEntityWatcher(
- MSimplePluginConnectionObs& aObs,
- MSimpleConnection& aConn,
- CSimplePluginWatcher& aWatcher
- )
- : iPluginWatcher(aWatcher), iConnObs(aObs), iConnection(aConn),
- iOperation(EPluginIdle)
- {
- }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginEntityWatcher::ConstructL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginEntityWatcher::ConstructL( )
- {
- iWatcher = TSimpleFactory::NewWatcherL( iConnection, *this );
- }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginEntityWatcher::NewL
-// ---------------------------------------------------------------------------
-//
-CSimplePluginEntityWatcher* CSimplePluginEntityWatcher::NewL(
- MSimplePluginConnectionObs& aObs,
- MSimpleConnection& aConn,
- CSimplePluginWatcher& aWatcher )
- {
-#ifdef _DEBUG
- PluginLogger::Log(_L("PluginEntityWatcher: NewL"));
-#endif
- CSimplePluginEntityWatcher* self =
- new( ELeave ) CSimplePluginEntityWatcher( aObs, aConn, aWatcher );
- CleanupStack::PushL( self );
- self->ConstructL( );
- CleanupStack::Pop( self );
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginEntityWatcher::~CSimplePluginEntityWatcher
-// ---------------------------------------------------------------------------
-//
-CSimplePluginEntityWatcher::~CSimplePluginEntityWatcher()
- {
-#ifdef _DEBUG
- PluginLogger::Log(_L("PluginEntityWatcher: DESTRUCTOR"));
-#endif
- if ( iWatcher )
- {
- iWatcher->Close();
- }
- delete iEntityId;
- delete iSimpleEntityId;
- }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginEntityWatcher::StartSubscribeL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginEntityWatcher::StartSubscribeL(
- const TDesC8& aPresentityId )
- {
- delete iEntityId;
- iEntityId = NULL;
-
- iListSubsActive = EFalse;
-
-#ifdef _DEBUG
- PluginLogger::Log(_L("PluginEntityWatcher: -> SubscribeL"));
-#endif
- iSimpleId = iWatcher->SubscribeL( aPresentityId, NULL, ETrue, EFalse );
-
- // Save entity id after successful call
- iEntityId = aPresentityId.AllocL();
-
- iOperation = EPluginStart;
- }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginEntityWatcher::StartSubscribeListL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginEntityWatcher::StartSubscribeListL(
- const TDesC8& aPresentityId )
- {
- delete iEntityId;
- iEntityId = NULL;
-
- iListSubsActive = ETrue;
-
-#ifdef _DEBUG
- PluginLogger::Log(_L("PluginEntityWatcher: -> SubscribeListL"));
-#endif
- iSimpleId = iWatcher->SubscribeListL( aPresentityId, NULL, ETrue, EFalse );
-
- // Save entity id after successful call
- iEntityId = aPresentityId.AllocL();
-
- iOperation = EPluginStart;
- }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginEntityWatcher::SetSimpleNameL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginEntityWatcher::SetSimpleNameL(
- const TDesC8& aPresentityId )
- {
- delete iSimpleEntityId;
- iSimpleEntityId = NULL;
-
-
- // Save entity id after successful call
- iSimpleEntityId = aPresentityId.AllocL();
-
- }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginEntityWatcher::StopSubscribeL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginEntityWatcher::StopSubscribeL(
- )
- {
-#ifdef _DEBUG
- PluginLogger::Log(_L("PluginEntityWatcher: -> UnsubscribeL"));
-#endif
- iSimpleId = iWatcher->UnsubscribeL( );
- iOperation = EPluginStop;
- }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginEntityWatcher::WatcherReqCompleteL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginEntityWatcher::WatcherReqCompleteL(
- TInt /*aOpId*/, TInt aStatus )
- {
-#ifdef _DEBUG
- PluginLogger::Log(_L("PluginEntityWatcher: WatcherReqCompleteL"));
-#endif
- TPluginEntityWatcherOperation orig = iOperation;
- iOperation = EPluginIdle;
-
- CompleteClientReq( aStatus );
-
- if ( aStatus && ( orig == EPluginStop || orig == EPluginStart) )
- {
-#ifdef _DEBUG
- PluginLogger::Log(_L("PluginEntityWatcher: calls DeleteWatcher **"));
-#endif
- // Delete this entity as useless
- iPluginWatcher.DeleteWatcher( iEntityId->Des() );
- // Do not call anything, since the method call above deletes this instance.
- }
- }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginEntityWatcher::WatcherNotificationL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginEntityWatcher::WatcherNotificationL(
- MSimpleDocument& aDocument )
- {
-#ifdef _DEBUG
- PluginLogger::Log(_L("PluginEntityWatcher: WatcherNotificationL" ));
-#endif
-
- // No need to check the expiration here since WatcherTerminatedL
- // is called then too.
- MProtocolPresenceWatchingDataHost& watcherHost =
- iConnObs.Host()->ProtocolPresenceDataHost().WatchingDataHost();
- MPresenceInfo* prInfo = iConnObs.PresenceObjectFactory().NewPresenceInfoLC();
-
- CSimplePluginData::NotifyToPrInfoL( iConnObs.PresenceObjectFactory(), aDocument, *prInfo );
-
-#ifdef _DEBUG
- // ---------------------------------------------------------
- const MPersonPresenceInfo* pers_debug = prInfo->PersonPresence();
- const MPresenceInfoFieldCollection& coll_debug = pers_debug->Fields();
- TInt count_debug = coll_debug.FieldCount();
- PluginLogger::Log(_L("PluginEntityWatcher: nbr of fields received =%d"), count_debug );
- // ---------------------------------------------------------
-#endif
-
- MXIMPIdentity* identity2 = iConnObs.ObjectFactory().NewIdentityLC();
- HBufC* uniBuffer =
- CnvUtfConverter::ConvertToUnicodeFromUtf8L( *aDocument.EntityURI() );
- CleanupStack::PushL( uniBuffer ); // << uniBuffer
- identity2->SetIdentityL( uniBuffer->Des() );
- CleanupStack::PopAndDestroy( uniBuffer ); // >> uniBuffer
-
- if ( iListSubsActive )
- {
- // Set Group Id
- HBufC* uniBuffer2 =
- CnvUtfConverter::ConvertToUnicodeFromUtf8L( iEntityId->Des() );
- CleanupStack::PushL( uniBuffer2 );
- MXIMPIdentity* gId = iConnObs.ObjectFactory().NewIdentityLC(); // << gId
- gId->SetIdentityL( uniBuffer2->Des() );
-
- MXIMPObjectCollection* coll =
- iConnObs.ObjectFactory().NewObjectCollectionLC(); // << coll
-
- iPluginWatcher.GetEntitiesInListL( uniBuffer2->Des(), *coll );
-
- MProtocolPresentityGroupsDataHost& groupHost =
- iConnObs.Host()->ProtocolPresenceDataHost().GroupsDataHost();
-#ifdef _DEBUG
- PluginLogger::Log(
- _L("PluginEntityWatcher: callback HandlePresentityGroupContentL"));
-#endif
- groupHost.HandlePresentityGroupContentL( gId, coll );
-
- CleanupStack::Pop( 2 ); // >> gId, coll
- CleanupStack::PopAndDestroy( uniBuffer2 );
-
- // This is done only for first notification for group subscription
- iListSubsActive = EFalse;
- }
-
- // PrFw Host API callback
-#ifdef _DEBUG
- PluginLogger::Log(
- _L("PluginEntityWatcher: callback HandleSubscribedPresentityPresenceL"));
-#endif
- watcherHost.HandleSubscribedPresentityPresenceL( identity2, prInfo );
- CleanupStack::Pop(); // >> identity2
- CleanupStack::Pop(); // >> prInfo
- }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginEntityWatcher::WatcherListNotificationL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginEntityWatcher::WatcherListNotificationL(
- MSimplePresenceList& aList )
- {
-#ifdef _DEBUG
- PluginLogger::Log(_L("PluginEntityWatcher: WatcherListNotificationL" ));
-#endif
-
- // call all the necessary callbacks, for new data + teminated ones.
-
- // check out whether fullstate list or not
- TBool fullState( EFalse );
-
- MProtocolPresenceWatchingDataHost& watcherHost =
- iConnObs.Host()->ProtocolPresenceDataHost().WatchingDataHost();
-
- RPointerArray<MPresenceInfo> entities;
- RPointerArray<MXIMPIdentity> terminated;
- RPointerArray<MXIMPIdentity> allEntities;
-
- TRAPD( err, CSimplePluginData::NotifyListToPrInfoL(
- iConnObs.ObjectFactory(), iConnObs.PresenceObjectFactory(),
- aList, entities, allEntities, terminated, fullState ));
- if ( err )
- {
-#ifdef _DEBUG
- PluginLogger::Log(_L("PluginEntityWatcher: WatcherListNotificationL error *" ));
-#endif
- entities.ResetAndDestroy();
- terminated.ResetAndDestroy();
- allEntities.ResetAndDestroy();
- entities.Close();
- terminated.Close();
- allEntities.Close();
- return;
- }
-
- CompleteClientReq( KErrNone );
-
- // Call HandleSubscribedPresentityPresenceL for all users
- TInt counter = entities.Count();
- for ( TInt i = counter-1 ; i>=0; i-- )
- {
- // ---------------------------------------------------------
-#ifdef _DEBUG
- const MPersonPresenceInfo* info = entities[i]->PersonPresence();
- const MPresenceInfoFieldCollection& coll_debug = info->Fields();
- TInt count_debug = coll_debug.FieldCount();
-
- PluginLogger::Log(
- _L("PluginWatcher: callback HandleSubscribedPresentityPresenceL nbrFields=%d"), count_debug );
-#endif
- // ---------------------------------------------------------
-
- watcherHost.HandleSubscribedPresentityPresenceL(
- allEntities[i], entities[i] );
- // Owenership is transferred
- allEntities.Remove(i);
- entities.Remove(i);
- }
-
- // call SetPresentityPresenceDataSubscriptionStateL for terminated users
- counter = terminated.Count();
- for ( TInt i = counter-1 ; i>=0; i-- )
- {
- MXIMPDataSubscriptionState *state = iConnObs.ObjectFactory().NewDataSubscriptionStateLC();
- state->SetSubscriptionStateL(
- MXIMPDataSubscriptionState::ESubscriptionInactive );
-#ifdef _DEBUG
- PluginLogger::Log(
- _L("PluginWatcher: TEST COVERS 1"));
- PluginLogger::Log(
- _L("PluginWatcher: callback SetPresentityPresenceDataSubscriptionStateL"));
-#endif
- watcherHost.SetPresentityPresenceDataSubscriptionStateL(
- terminated[i], state, NULL );
- CleanupStack::Pop( 1 ); // state
- // Owenership is transferred
- terminated.Remove(i);
- }
-
- entities.ResetAndDestroy();
- terminated.ResetAndDestroy();
- allEntities.ResetAndDestroy();
-
- entities.Close();
- terminated.Close();
- allEntities.Close();
- }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginEntityWatcher::WatcherTerminatedL
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginEntityWatcher::WatcherTerminatedL(
- TInt /*aOpId*/, TInt /*aReason*/ )
- {
- // Call PrFw Host and tell to CSimplePluginWatcher that
- // this entity can be deleted.
-
-#ifdef _DEBUG
- PluginLogger::Log(_L("PluginEntityWatcher: WatcherTerminatedL" ));
-#endif
-
- MProtocolPresenceWatchingDataHost& watcherHost =
- iConnObs.Host()->ProtocolPresenceDataHost().WatchingDataHost();
- MXIMPDataSubscriptionState *state = iConnObs.ObjectFactory().NewDataSubscriptionStateLC();
- MXIMPStatus* status = iConnObs.ObjectFactory().NewStatusLC();
- state->SetSubscriptionStateL(
- MXIMPDataSubscriptionState::ESubscriptionInactive );
- status->SetResultCode( KErrCompletion );
- MXIMPIdentity* identity = iConnObs.ObjectFactory().NewIdentityLC();
-
- HBufC16* buf16 = HBufC16::NewLC( PresentityId().Length());
- buf16->Des().Copy( PresentityId() );
- identity->SetIdentityL( buf16->Des() );
- CleanupStack::PopAndDestroy( buf16 );
-
-#ifdef _DEBUG
- PluginLogger::Log(
- _L("PluginWatcher: callback SetPresentityPresenceDataSubscriptionStateL"));
-#endif
- watcherHost.SetPresentityPresenceDataSubscriptionStateL(
- identity, state, status );
- CleanupStack::Pop( 3 ); // identity, status, state
-
- // Delete this entity as useless
- iPluginWatcher.DeleteWatcher( iEntityId->Des() );
- // Do not call anything, since the method call above deletes this instance.
-
- }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginEntityWatcher::CompleteClientReq
-// ---------------------------------------------------------------------------
-//
-void CSimplePluginEntityWatcher::CompleteClientReq( TInt aStatus )
- {
- // complete the open PrFw request immediately here!
- iPluginWatcher.CompleteWatcher( aStatus );
- }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginEntityWatcher::PresentityId
-// ---------------------------------------------------------------------------
-//
-TPtrC8 CSimplePluginEntityWatcher::PresentityId( )
- {
- return iEntityId ? iEntityId->Des() : TPtrC8();
- }
-
-// ---------------------------------------------------------------------------
-// CSimplePluginEntityWatcher::PrFwRequestId
-// ---------------------------------------------------------------------------
-//
-TXIMPRequestId CSimplePluginEntityWatcher::PrFwRequestId( )
- {
- return iPrFwId;
- }
-
-
-// End of file