--- a/simpledatamodeladapter/src/presencepluginconnection.cpp Thu Aug 19 10:19:02 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,981 +0,0 @@
-/*
-* Copyright (c) 2006-2010 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 <badesca.h>
-#include <ximpbase.h>
-#include <ximpserviceinfo.h>
-#include <protocolpresencefeatures.h>
-#include <cprotocolimfeatures.h>
-#include <protocolpresencedatahost.h>
-#include <presenceobjectfactory.h>
-
-#include <ximpcontextclientinfo.h>
-#include <protocolpresenceauthorization.h>
-#include <ximpprotocolconnectionhost.h>
-#include <ximpfeatureinfo.h> //for etc. KPublish
-#include <msimpleconnection.h> //Part of Registration API from SIMPLE engine
-#include <msimpleconnectionobserver.h>//Connection callback methods
-#include <presenceinfo.h>
-
-#include "presencepluginconnection.h"
-#include "presencepluginsession.h"
-#include "mpresencepluginconnectionobs.h"
-#include "presencepluginwatcher.h"
-#include "presencepluginauthorization.h"
-#include "presencepluginwinfo.h"
-#include "presencepluginpublisher.h"
-#include "presenceplugingroup.h"
-#include "presencepluginxdmutils.h"
-#include "presencepluginvirtualgroup.h"
-#include "presenceconnectioninfo.h"
-#include "presenceplugindata.h"
-
-#include "simpleimpluginuids.hrh" //KImplUidSimpleImPlugin
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::CPresencePluginConnection()
-// ---------------------------------------------------------------------------
-//
-CPresencePluginConnection::CPresencePluginConnection( ):
- CActive( CActive::EPriorityHigh ), iSipPresentity(NULL),
- iStopPublishState( EFalse ), iGrantListSubs( EFalse ), iStopPublishCall( EFalse ),
- iTerminatedCall( EFalse )
- {
- DP_SDA("CPresencePluginConnection::CPresencePluginConnection");
- CActiveScheduler::Add(this);
- iOwnTupleId = 0;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::NewL()
-// ---------------------------------------------------------------------------
-//
-CPresencePluginConnection* CPresencePluginConnection::NewL(
- const MXIMPServiceInfo& aServiceInfo,
- const MXIMPContextClientInfo& aClientCtxInfo )
- {
- DP_SDA("CPresencePluginConnection::NewL");
- CPresencePluginConnection* self =
- new( ELeave ) CPresencePluginConnection( );
- CleanupStack::PushL( self );
- self->ConstructL( aServiceInfo, aClientCtxInfo );
- CleanupStack::Pop( self );
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::NewL() loaded
-// ---------------------------------------------------------------------------
-//
-CPresencePluginConnection* CPresencePluginConnection::NewL(
- const MXIMPServiceInfo& aServiceInfo,
- const MXIMPContextClientInfo& aClientCtxInfo,
- const TDesC8& aETag )
- {
- DP_SDA("CPresencePluginConnection::NewL loaded");
- CPresencePluginConnection* self =
- new( ELeave ) CPresencePluginConnection( );
- CleanupStack::PushL( self );
- self->ConstructL( aServiceInfo, aClientCtxInfo, aETag );
- CleanupStack::Pop( self );
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::ConstructL() loaded
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginConnection::ConstructL(
- const MXIMPServiceInfo& aServiceInfo,
- const MXIMPContextClientInfo& /*aClientCtxInfo*/,
- const TDesC8& aETag )
- {
- DP_SDA("CPresencePluginConnection::ConstructL loaded");
-
- iETag = aETag.AllocL();
-
- iSession = CPresencePluginSession::NewL( aServiceInfo, *this );
-
- // create instance from data class
- iPresenceData = CPresencePluginData::NewL( *this,
- aServiceInfo.IapId() );
-
- DP_SDA("ConstructL create subscribed buddy list loaded ");
- // create another virtual group for all subscribed buddyes
- iSubscribedBuddys =
- CPresencePluginVirtualGroup::NewL( *this,
- KPresenceBuddyList(),
- iPresenceData );
-
- iAuth = CPresencePluginAuthorization::NewL( *this, iPresenceData );
-
- iPublisher = CPresencePluginPublisher::NewL(
- *this,
- *iSession->SimpleConnection(),
- iPresenceData );
-
- iWatcher = CPresencePluginWatcher::NewL(
- *this,
- *iSession->SimpleConnection(),
- iPresenceData );
-
- iGroups = CPresencePluginGroups::NewL(
- *this, iSubscribedBuddys, iPresenceData );
-
- iPluginWinfo = CPresencePluginWinfo::NewL(
- *this, *(iSession->SimpleConnection() ));
-
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::ConstructL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginConnection::ConstructL(
- const MXIMPServiceInfo& aServiceInfo,
- const MXIMPContextClientInfo& /*aClientCtxInfo*/ )
- {
- DP_SDA("CPresencePluginConnection::ConstructL");
-
- iETag = KNullDesC8().AllocL();
-
- iSession = CPresencePluginSession::NewL( aServiceInfo, *this );
-
- // create instance from data class
- iPresenceData = CPresencePluginData::NewL( *this,
- aServiceInfo.IapId() );
-
- DP_SDA("ConstructL create subscribed buddy list");
- // create another virtual group for all subscribed buddyes
- iSubscribedBuddys =
- CPresencePluginVirtualGroup::NewL(
- *this, KPresenceBuddyList(), iPresenceData );
-
- iAuth = CPresencePluginAuthorization::NewL( *this, iPresenceData );
-
- iPublisher = CPresencePluginPublisher::NewL(
- *this,
- *iSession->SimpleConnection(),
- iPresenceData );
-
- iWatcher = CPresencePluginWatcher::NewL(
- *this,
- *iSession->SimpleConnection(),
- iPresenceData );
-
- iGroups = CPresencePluginGroups::NewL(
- *this, iSubscribedBuddys, iPresenceData );
-
- iPluginWinfo = CPresencePluginWinfo::NewL(
- *this, *(iSession->SimpleConnection() ));
-
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::~CPresencePluginConnection()
-// ---------------------------------------------------------------------------
-//
-CPresencePluginConnection::~CPresencePluginConnection()
- {
- DP_SDA("CPresencePluginConnection::~CPresencePluginConnection");
-
- Cancel();
-
- delete iSipPresentity;
- iSipPresentity = NULL;
-
- delete iPluginWinfo;
- iPluginWinfo = NULL;
-
- delete iWatcher;
- iWatcher = NULL;
-
- delete iPublisher;
- iPublisher = NULL;
-
- delete iAuth;
- iAuth = NULL;
-
- delete iGroups;
- iGroups = NULL;
-
- delete iSession;
- iSession = NULL;
-
- delete iImFeatures;
-
- REComSession::FinalClose();
-
- delete iSubscribedBuddys;
- delete iPresenceData;
-
- delete iETag;
- iETag = NULL;
- DP_SDA("CPresencePluginConnection::~CPresencePluginConnection end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::PrimeHost
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginConnection::PrimeHost(
- MXIMPProtocolConnectionHost& aHost )
- {
- DP_SDA("CPresencePluginConnection::PrimeHost");
- iConnectionHost = &aHost;
- iAuth->SetDataHost(
- iConnectionHost->ProtocolPresenceDataHost().AuthorizationDataHost() );
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::GetOnlineBuddyGroup()
-// ---------------------------------------------------------------------------
-//
-CPresencePluginVirtualGroup* CPresencePluginConnection::SubscribedContacts( )
- {
- return iSubscribedBuddys;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::GetSessionStatus()
-// ---------------------------------------------------------------------------
-//
-TBool CPresencePluginConnection::GetSessionStatus( )
- {
- return iSession->ConnectionStatus();
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::TupleIdGet()
-// ---------------------------------------------------------------------------
-//
-TInt CPresencePluginConnection::GetTupleId() const
- {
- DP_SDA("CPresencePluginConnection::TupleIdGet");
- return iOwnTupleId;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::GetEtag()
-// ---------------------------------------------------------------------------
-//
-const TDesC8& CPresencePluginConnection::GetETag() const
- {
- DP_SDA("CPresencePluginConnection::GetETag");
-
- if( !iETag )
- {
- DP_SDA2("CPresencePluginConnection::GetETag empty ??? %S", iConnectionArray->GetConnectionEtag() );
- return KNullDesC8();
- }
-
- return *iETag;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::SetETag()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginConnection::SetETag( const TDesC8& aETag )
- {
- DP_SDA("CPresencePluginConnection::SetETag");
- delete iETag;
- iETag = NULL;
-
- TRAP_IGNORE( ( iETag = aETag.AllocL() ) );
- //Add etag also in connectionArray
- iConnectionArray->SetConnectionETag( *iETag );
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::SetConnectionArray()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginConnection::SetConnectionArray(
- CPresenceConnectionInfo* aArray )
- {
- DP_SDA("CPresencePluginConnection::SetConnectionArray");
- iConnectionArray = aArray;
- iConnectionArray->SetConnectionStatus( EActive );
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::GetConnectionArray()
-// ---------------------------------------------------------------------------
-//
-CPresenceConnectionInfo* CPresencePluginConnection::GetConnectionArray( )
- {
- DP_SDA("CPresencePluginConnection::GetConnectionArray");
- return iConnectionArray;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::TupleIdGet()
-// ---------------------------------------------------------------------------
-//
-TInt32 CPresencePluginConnection::GetPresenceSetId() const
- {
- DP_SDA("CPresencePluginConnection::GetPresenceSetId");
- return iSession->GetPresenceSetId();
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::TupleIdGet()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginConnection::SetTupleId( const TInt aTupleId )
- {
- DP_SDA("CPresencePluginConnection::TupleIdSet");
- iOwnTupleId = aTupleId;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::GetStopPublishState()
-// ---------------------------------------------------------------------------
-//
-TBool CPresencePluginConnection::GetStopPublishState()
- {
- DP_SDA2("::GetStopPublishState = %d", (TInt)iStopPublishState );
- return iStopPublishState;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::SetStopPublishState()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginConnection::SetStopPublishState( TBool aState )
- {
- DP_SDA2("SetStopPublishState : aState = %d ", (TInt)aState );
- iStopPublishState = aState;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::PresenceWatching
-// ---------------------------------------------------------------------------
-//
-MProtocolPresenceDataHost& CPresencePluginConnection::ProtocolPresenceHost()
- {
- DP_SDA("CPresencePluginConnection::ProtocolPresenceHost");
- return iConnectionHost->ProtocolPresenceDataHost();
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::PresenceWatching
-// ---------------------------------------------------------------------------
-//
-MProtocolPresenceWatching& CPresencePluginConnection::PresenceWatching()
- {
- DP_SDA("CPresencePluginConnection::PresenceWatching");
- return *iWatcher;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::PresencePublishing
-// ---------------------------------------------------------------------------
-//
- MProtocolPresencePublishing& CPresencePluginConnection::PresencePublishing()
- {
- return *iPublisher;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::PresentityGroups
-// ---------------------------------------------------------------------------
-//
-MProtocolPresentityGroups& CPresencePluginConnection::PresentityGroups()
- {
- return *iGroups;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::PresenceAuthorization
-// ---------------------------------------------------------------------------
-//
-MProtocolPresenceAuthorization&
- CPresencePluginConnection::PresenceAuthorization()
- {
- DP_SDA2("CPresencePluginConnection::PresenceAuthorization %x", iAuth);
- return *iAuth;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::InternalPresenceAuthorization
-// ---------------------------------------------------------------------------
-//
-CPresencePluginAuthorization&
- CPresencePluginConnection::InternalPresenceAuthorization()
- {
- DP_SDA2("CPresencePluginConnection::InternalPresenceAuthorization %x", iAuth);
- return *iAuth;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::OpenSessionL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginConnection::OpenSessionL(
- const MXIMPContextClientInfo& /*aClientCtxInfo*/,
- TXIMPRequestId aReqId )
- {
- DP_SDA("CPresencePluginConnection::OpenSessionL");
- iGrantListSubs = ETrue;
- iTerminatedCall = EFalse;
- iXIMPId = aReqId;
- iSession->OpenSessionL();
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::OpenSessionL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginConnection::OpenSessionL( const TInt& /*aSettingsId*/,
- TXIMPRequestId aReqId )
- {
- DP_SDA("CPresencePluginConnection::OpenSessionL 2 ");
- iXIMPId = aReqId;
- iGrantListSubs = ETrue;
- iTerminatedCall = EFalse;
- iSession->OpenSessionL( );
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::CloseSession
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginConnection::CloseSession(
- const MXIMPContextClientInfo& /*aContextClient*/,
- TXIMPRequestId aReqId )
- {
- DP_SDA("CPresencePluginConnection::CloseSession begin");
-
- TBool completeXimpRequestNow( EFalse );
- iConnectionArray->DecreaseClientCount();
- iXIMPId = aReqId;
-
- // Client count canīt be negative. Increase if goes negative.
- // This happens for example in network lost case.
- // This method is called then because connection is terminated and
- // for all clients which have done unbind. But here we cannot tell
- // if this method is called by clients unbind or connection termination
- // therefore this workaround needed.
- if ( iConnectionArray->ClientCount() < 0 )
- {
- completeXimpRequestNow = ETrue;
- iConnectionArray->IncreaseClientCount();
- }
-
- // In case there is no more clients we cannot complete Ximp request
- // right away. We have to stop publish first, Ximp request completion is
- // handled in RunL after that is done.
- if( KErrNone == iConnectionArray->ClientCount() &&
- (EActive == iConnectionArray->GetConnectionStatus()) )
- {
- completeXimpRequestNow = EFalse; // request is completed later in RunL
- iGrantListSubs = EFalse;
-
- //Start stopPublish request
- DeRegister();
- }
-
- if ( !iStopPublishCall )
- {
- completeXimpRequestNow = ETrue;
- }
-
- if ( completeXimpRequestNow )
- {
- CompleteReq( iXIMPId, KErrNone );
- }
-
- DP_SDA("CPresencePluginConnection::CloseSession end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::GetSupportedFeaturesL
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginConnection::GetSupportedFeaturesL(
- CDesC8Array& aFeatures ) const
- {
- DP_SDA("CPresencePluginConnection::GetSupportedFeaturesL");
- // first empty the whole array
- aFeatures.Reset();
- using namespace NXIMPFeature::Presence;
- aFeatures.AppendL( KPublish );
- aFeatures.AppendL( KSubscribe );
- aFeatures.AppendL( KUnsubscribe );
- aFeatures.AppendL( KAddContact );
- aFeatures.AppendL( KDeleteContact );
- aFeatures.AppendL( KFetch );
- aFeatures.AppendL( KBlock );
- aFeatures.AppendL( KUnBlock );
-
- if( iImFeatures )
- {
- using namespace NXIMPFeature::InstantMessage;
- aFeatures.AppendL( KInstantMessage );
- }
- }
-
-//*****************************************************************************
-//* FROM MPresencePluginConnectionObs
-//*****************************************************************************
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::CompleteReq()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginConnection::CompleteReq( TReqType aType, TInt aStatus )
- {
- DP_SDA("CPresencePluginConnection::CompleteReq");
- // Return immediately if PrimeHost() is not called.
- if ( !iConnectionHost )
- {
- DP_SDA("CPresencePluginConnection::CompleteReq !iConnectionHost");
- iXIMPId = TXIMPRequestId();
- return;
- }
-
- switch ( aType )
- {
- case EOpenSess:
- {
- DP_SDA("CPresencePluginConnection::CompleteReq EOpenSess");
- iConnectionHost->HandleRequestCompleted( iXIMPId, aStatus );
- iXIMPId = TXIMPRequestId();
- //Set connection status to connection Array
- iConnectionArray->SetConnectionStatus( EActive );
- }
- break;
- case ECloseSess:
- {
- DP_SDA("CPresencePluginConnection::CompleteReq ECloseSess");
- iConnectionArray->DecreaseClientCount();
- CompleteReq( iXIMPId, aStatus );
- iConnectionArray->SetConnectionStatus( ENotActive );
- }
- break;
- default:
- DP_SDA("CPresencePluginConnection::CompleteReq DEFAULT");
- break;
- };
- DP_SDA("CPresencePluginConnection::CompleteReq end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::CompleteReq()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginConnection::CompleteReq(
- TXIMPRequestId aReqId,
- TInt aStatus )
- {
- DP_SDA2("CPresencePluginConnection::CompleteReq status %d", aStatus);
- // Return immediately if PrimeHost() is not called.
- if ( !iConnectionHost )
- {
- DP_SDA("CPresencePluginConnection::CompleteReq return");
- return;
- }
- DP_SDA("CPresencePluginConnection::CompleteReq complete");
- iConnectionHost->HandleRequestCompleted( aReqId, aStatus );
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::ObjectFactory()
-// ---------------------------------------------------------------------------
-//
-MXIMPObjectFactory& CPresencePluginConnection::ObjectFactory()
- {
- DP_SDA("CPresencePluginConnection::ObjectFactory");
- return iConnectionHost->ObjectFactory();
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::Host
-// ---------------------------------------------------------------------------
-//
-MXIMPProtocolConnectionHost* CPresencePluginConnection::Host()
- {
- DP_SDA("CPresencePluginConnection::Host");
- return iConnectionHost;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection:CurrentDomain
-// ---------------------------------------------------------------------------
-//
-TPtrC16 CPresencePluginConnection::CurrentDomain()
- {
- return iSession->CurrentDomain();
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::CurrentSipPresentit8()
-// ---------------------------------------------------------------------------
-//
-TPtrC8 CPresencePluginConnection::CurrentSipPresentity8()
- {
- return iSession->CurrentSipPresentity();
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection:XdmUtilsL
-// ---------------------------------------------------------------------------
-//
-CPresencePluginXdmUtils* CPresencePluginConnection::XdmUtilsL()
- {
- DP_SDA("CPresencePluginConnection::XdmUtilsL");
- return iSession->XdmUtilsL();
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::WinfoHandlerL()
-// ---------------------------------------------------------------------------
-//
-CPresencePluginWinfo* CPresencePluginConnection::WinfoHandlerL()
- {
- DP_SDA("CPresencePluginConnection::WinfoHandlerL");
- if ( !iPluginWinfo )
- {
- iPluginWinfo = CPresencePluginWinfo::NewL(
- *this, *(iSession->SimpleConnection() ));
- }
-
- iPluginWinfo->SetHost( iConnectionHost );
- return iPluginWinfo;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::WatcherHandlerL()
-// ---------------------------------------------------------------------------
-//
- CPresencePluginWatcher* CPresencePluginConnection::WatcherHandlerL()
- {
- DP_SDA("CPresencePluginConnection::WatcherHandlerL");
- if ( !iWatcher )
- {
- DP_SDA("CPresencePluginConnection::WatcherHandlerL: if ( !iWatcher )");
- iWatcher = CPresencePluginWatcher::NewL(
- *this,
- *iSession->SimpleConnection(),
- iPresenceData );
- }
- return iWatcher;
- }
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::WinfoTerminatedL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginConnection::WinfoTerminatedL( TInt aReason )
- {
- DP_SDA("CPresencePluginConnection::WinfoTerminatedL");
- // Pass the information to iAuth and iPublisher,
- // so that they can call XIMP Plugin Data Host callbacks.
- iAuth->WinfoTerminatedL( aReason );
- iPublisher->WinfoTerminatedL( aReason );
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::WinfoNotification()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginConnection::WinfoNotification( MSimpleWinfo& aWinfo )
- {
- DP_SDA("CPresencePluginConnection::WinfoNotification");
- TRAP_IGNORE( iPublisher->WinfoNotificationL( aWinfo ));
- TRAP_IGNORE( iAuth->WinfoNotificationL( aWinfo ));
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::GetInterface()
-// ---------------------------------------------------------------------------
-//
-TAny* CPresencePluginConnection::GetInterface(
- TInt32 aInterfaceId,
- TIfGetOps aOptions )
- {
- DP_SDA("CPresencePluginConnection::GetInterface()");
- if ( aInterfaceId == GetInterfaceId() )
- {
- DP_SDA("CPresencePluginConnection::GetInterface()if ");
- // caller wants this interface
- return this;
- }
- if ( aOptions == MXIMPBase::EPanicIfUnknown )
- {
- DP_SDA("CPresencePluginConnection::GetInterface() panic");
- User::Panic( KPluginName, KErrExtensionNotSupported );
- }
- return NULL;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::GetInterface()
-// ---------------------------------------------------------------------------
-//
-const TAny* CPresencePluginConnection::GetInterface(
- TInt32 aInterfaceId,
- TIfGetOps aOptions ) const
- {
- DP_SDA("CPresencePluginConnection::GetInterface() const ");
- if ( aInterfaceId == GetInterfaceId() )
- {
- DP_SDA("CPresencePluginConnection::GetInterface()2 ");
- // caller wants this interface
- return const_cast<CPresencePluginConnection*>(this);
- }
- if ( aOptions == MXIMPBase::EPanicIfUnknown )
- {
- DP_SDA("CPresencePluginConnection::GetInterface()panic 2");
- User::Panic( KPluginName, KErrExtensionNotSupported );
- }
- return NULL;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::GetInterfaceId()
-// ---------------------------------------------------------------------------
-//
-TInt32 CPresencePluginConnection::GetInterfaceId() const
- {
- DP_SDA("CPresencePluginConnection::GetInterfaceId() const ");
- return MXIMPProtocolConnection::KInterfaceId;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::ProtocolPresenceFeatures()
-// ---------------------------------------------------------------------------
-//
-MProtocolPresenceFeatures& CPresencePluginConnection::
- ProtocolPresenceFeatures()
- {
- DP_SDA("CPresencePluginConnection::ProtocolPresenceFeatures() ");
- return *this;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::PresenceObjectFactory()
-// ---------------------------------------------------------------------------
-//
-MPresenceObjectFactory& CPresencePluginConnection::PresenceObjectFactoryOwn()
- {
- DP_SDA("CPresencePluginConnection::PresenceObjectFactoryOwn() ");
- return iConnectionHost->
- ProtocolPresenceDataHost().PresenceObjectFactory();
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::GrandListState()
-// ---------------------------------------------------------------------------
-//
-TBool CPresencePluginConnection::GrandListState( )
- {
- DP_SDA2("GrandListState : iGrantListSubs = %d", (TInt)iGrantListSubs );
- return iGrantListSubs;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::IsStopPublishCalled()
-// ---------------------------------------------------------------------------
-//
-TBool CPresencePluginConnection::IsStopPublishCalled( )
- {
- DP_SDA("CPresencePluginConnection::IsStopPublishCalled");
- return iStopPublishCall;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::TerminateConnectionL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginConnection::TerminateConnectionL( )
- {
- DP_SDA("CPresencePluginConnection::TerminateConnectionL");
- iConnectionHost->HandleConnectionTerminated( NULL );
- iConnectionArray->SetConnectionStatus( ETerminated );
- DP_SDA("CPresencePluginConnection::TerminateConnectionL Done");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::DeRegister()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginConnection::DeRegister( )
- {
- DP_SDA("CPresencePluginConnection::Deregister");
-
- DP_SDA(" -> CloseSession, delete permanent pres data");
- TRAP_IGNORE( iPresenceData->DeletePresenceVariablesL( ServiceId() ) );
-
- // Try to stop publish only if we have successfully published
- if ( iPublisher->Published() )
- {
- DP_SDA("CloseSession call stopPublish");
- TRAP_IGNORE( iPublisher->StopPublishL( iStatus ) );
- iStopPublishCall = ETrue;
- SetActive();
- }
-
- DP_SDA("CPresencePluginConnection::Deregister Done");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::CreateImFeaturesPlugin()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginConnection::CreateImFeaturesPluginL( )
- {
- if ( !iImFeatures )
- {
- DP_SDA("Creating SimpleImPlugin");
-
- CSimpleImFeatures::TSimpleImPluginInitParams imPluginInitParams(
- *this,
- *iSession->SimpleConnection(),
- iSession->ServiceId() );
-
- iImFeatures = static_cast<CSimpleImFeatures*> (
- CProtocolImFeatures::NewL( TUid::Uid(KImplUidSimpleImPlugin),
- &imPluginInitParams ) );
-
- DP_SDA("Creating SimpleImPlugin done");
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::DeleteImFeaturesPlugin()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginConnection::DeleteImFeaturesPlugin( )
- {
- if ( iImFeatures )
- {
- DP_SDA("Deleting SimpleImPlugin");
-
- delete iImFeatures;
- iImFeatures = NULL;
- REComSession::FinalClose();
-
- DP_SDA("Deleting SimpleImPlugin done");
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::DoCancel()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginConnection::DoCancel( )
- {
- DP_SDA("CPresencePluginConnection::DoCancel CANCEL");
- iPublisher->Cancel();
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::RunL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginConnection::RunL( )
- {
- DP_SDA("CPresencePluginConnection::RunL");
- TInt status = iStatus.Int();
- DP_SDA2("CPresencePluginConnection::RunL status %d", status );
-
- if ( iStopPublishCall )
- {
- DP_SDA("CPresencePluginConnection::RunL complete");
-
- iStopPublishCall = EFalse;
- CompleteReq( iXIMPId, status );
-
- DP_SDA("CPresencePluginConnection::RunL --> REMOVE CACHE");
- iPresenceData->RemoveCacheL();
-
- DP_SDA("CPresencePluginConnection::RunL --> Delete im plugin");
- DeleteImFeaturesPlugin();
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::RunError
-// ---------------------------------------------------------------------------
-//
-TInt CPresencePluginConnection::RunError( TInt /*aError*/ )
- {
- DP_SDA("CPresencePluginConnection::RunError");
- return KErrNone;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::GroupsL()
-// ---------------------------------------------------------------------------
-//
-CPresencePluginGroups& CPresencePluginConnection::GroupsL()
- {
- User::LeaveIfNull( iGroups );
- return *iGroups;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::ServiceId()
-// ---------------------------------------------------------------------------
-//
-TInt& CPresencePluginConnection::ServiceId()
- {
- return iSession->ServiceId();
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginConnection::GetProtocolInterface()
-// ---------------------------------------------------------------------------
-//
-TAny* CPresencePluginConnection::GetProtocolInterface( TInt aInterfaceId )
- {
- DP_SDA("CPresencePluginConnection::GetProtocolInterface");
-
- if( aInterfaceId == CProtocolImFeatures::KInterfaceId )
- {
- TInt err( KErrNone );
-
- if ( !iImFeatures )
- {
- DP_SDA(" --> Create im features plugin");
- TRAP( err, CreateImFeaturesPluginL() );
- }
-
- if ( !err )
- {
- DP_SDA(" --> get interface");
-
- return iImFeatures->GetInterface(
- aInterfaceId, MXIMPBase::EPanicIfUnknown );
- }
- else
- {
- DP_SDA(" --> Creating im features plugin failed");
- return NULL;
- }
- }
- else
- {
- return NULL;
- }
- }
-
-// End of file