presencefwsimpleadpt/src/simplepluginentitywatcher.cpp
branchGCC_SURGE
changeset 28 d9861ae9169c
parent 23 77cb48a03620
parent 26 04ca1926b01c
--- a/presencefwsimpleadpt/src/simplepluginentitywatcher.cpp	Thu Jul 01 14:09:06 2010 +0100
+++ /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