--- a/simpledatamodeladapter/src/presencepluginsession.cpp Thu Aug 19 10:19:02 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,498 +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 <ximpserviceinfo.h> //For MXIMPServiceInfo
-#include <ximpprotocolconnectionhost.h> //Handle command
-#include <msimpleconnectionobserver.h>//Connection callback methods
-#include <simplefactory.h> //create instances to abstract class
-#include <msimpleconnection.h> //Part of Registration API from SIMPLE engine
-#include <msimpleconnectionobserver.h>
-#include <pressettingsapi.h> //for TPresSettingsSet
-#include <XdmSettingsApi.h>
-#include <spsettings.h>
-#include <spentry.h>
-#include <spproperty.h>
-#include <spdefinitions.h>
-
-#include "presencepluginxdmutils.h"
-#include "presencepluginsession.h"
-#include "mpresencepluginconnectionobs.h"
-#include "presencepluginauthorization.h"
-#include "presenceplugindata.h"
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// CPresencePluginSession::CPresencePluginSession()
-// ---------------------------------------------------------------------------
-//
-CPresencePluginSession::CPresencePluginSession(
- MPresencePluginConnectionObs& aObs )
- : CActive( CActive::EPriorityStandard ),iObs(aObs),
- iType( MPresencePluginConnectionObs::ENoReq ),iSipConnected( EFalse ),
- iXdmConnected( EFalse ), iXdmLocalMode( EFalse ), iOperation( ENoOperation ),
- iServiceId( KErrNotFound )
- {
- CActiveScheduler::Add(this);
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginSession::ConstructL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginSession::ConstructL( const MXIMPServiceInfo& aService )
- {
- DP_SDA2("CPresencePluginSession::ConstructL: service id: %d",
- aService.IapId() );
-
- CSPSettings* spSettings = CSPSettings::NewL();
- CleanupStack::PushL( spSettings );
-
- CSPProperty* property = CSPProperty::NewLC();
- spSettings->FindPropertyL( aService.IapId(),
- ESubPropertyPresenceSettingsId,
- *property );
- if ( property )
- {
- property->GetValue( iPresSettingId );
- }
-
- CleanupStack::PopAndDestroy( property );
- CleanupStack::PopAndDestroy( spSettings );
-
- DP_SDA2("PluginSession::ConstructL iPresSettingId %d",iPresSettingId );
- __ASSERT_ALWAYS( iPresSettingId > 0, User::Leave( KErrArgument ) );
- iServiceId = aService.IapId();
-
- //Create connection
- iConnection = TSimpleFactory::NewConnectionL( *this, aService.IapId() );
-
- //Check here is xdm settings ok
- CheckXDMSettingsL( aService.IapId() );
-
- DP_SDA("CPresencePluginSession::ConstructL end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginSession::NewL()
-// ---------------------------------------------------------------------------
-//
-CPresencePluginSession* CPresencePluginSession::NewL(
- const MXIMPServiceInfo& aService,
- MPresencePluginConnectionObs& aObs )
- {
- DP_SDA("CPresencePluginSession::NewL");
- CPresencePluginSession* self =
- new( ELeave ) CPresencePluginSession( aObs );
- CleanupStack::PushL( self );
- self->ConstructL( aService );
- CleanupStack::Pop( self );
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginSession::~CPresencePluginSession()
-// ---------------------------------------------------------------------------
-//
-CPresencePluginSession::~CPresencePluginSession()
- {
- DP_SDA("CPresencePluginSession::~CPresencePluginSession");
-
- delete iUserId8;
- delete iDomain;
- if ( iConnection )
- {
- iConnection->Close();
- }
-
- DP_SDA("~CPresencePluginSession iXdmUtils");
- delete iXdmUtils;
- iXdmUtils = NULL;
- DP_SDA("CPresencePluginSession::~CPresencePluginSession end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginSession::SimpleConnection()
-// ---------------------------------------------------------------------------
-//
-TInt32 CPresencePluginSession::GetPresenceSetId( ) const
- {
- return iPresSettingId;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginSession::SimpleConnection()
-// ---------------------------------------------------------------------------
-//
-MSimpleConnection* CPresencePluginSession::SimpleConnection( )
- {
- return iConnection;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginSession::XdmSettingsId()
-// ---------------------------------------------------------------------------
-//
-TInt CPresencePluginSession::XdmSettingsId( )
- {
- DP_SDA("CPresencePluginSession::XdmSettingsId");
- return iXdmSetting;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginSession::CurrentDomain()
-// ---------------------------------------------------------------------------
-//
-TPtrC16 CPresencePluginSession::CurrentDomain( )
- {
- return iDomain ? iDomain->Des() : TPtrC16();
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginSession::IsXdmLocalmode()
-// ---------------------------------------------------------------------------
-//
-TBool CPresencePluginSession::IsXdmLocalmode()
- {
- DP_SDA("CPresencePluginSession::IsXdmLocalmode");
- return iXdmLocalMode;
- }
-// ---------------------------------------------------------------------------
-// CPresencePluginSession::OpenSessionL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginSession::OpenSessionL()
- {
- DP_SDA("CPresencePluginSession::OpenSessionL");
- //Check connection status
- MSimpleConnection::TSimpleState connectionStatus =
- iConnection->ConnectionStatus();
- DP_SDA2("OpenSessionL Connection Status %d", connectionStatus);
-
- if( connectionStatus == MSimpleConnection::EInactive )
- {
- DP_SDA("CPresencePluginSession::OpenSessionL Not connected yet");
- iSipConnected = EFalse;
- // SIP register using by give presence setting id
- iOpId = iConnection->LoginL( iPresSettingId );
- iType = MPresencePluginConnectionObs::EOpenSess;
- }
- else if ( connectionStatus == MSimpleConnection::EActive )
- {
- DP_SDA(":OpenSessionL already connected complete");
- iSipConnected = ETrue;
- iType = MPresencePluginConnectionObs::EOpenSess;
- RequestCompleteL( iOpId, KErrNone );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginSession::ConnectionStatusL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginSession::ConnectionStatusL(
- MSimpleConnection::TSimpleState aState )
- {
- DP_SDA2("CPresencePluginSession::ConnectionStatusL aState %d", aState );
-
- if ( (aState == MSimpleConnection::EInactive )
- && iSipConnected )
- {
- DP_SDA("CPresencePluginSession::ConnectionStatusL EInactive");
-
- DP_SDA("CPresencePluginSession::ConnectionStatusL clear pres cache");
- iObs.InternalPresenceAuthorization().PluginData().RemoveCacheL();
- DP_SDA("CPresencePluginSession::ConnectionStatusL clear cache ok");
-
- // cancel all XDM request
- iObs.XdmUtilsL()->Cancel();
- //Set connection Terminated, terminate will be remove all client binds
- iObs.TerminateConnectionL();
- iSipConnected = EFalse;
- iXdmConnected = EFalse;
- }
- else if( ( aState == MSimpleConnection::EUnavailable && iSipConnected ) )
- {
- //Its seems that SIP connection is unavaible
- DP_SDA("CPresencePluginSession::ConnectionStatusL EUnavailable");
- }
-
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginSession::CloseConnection()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginSession::CloseConnection()
- {
- DP_SDA("CPresencePluginSession::CloseConnection");
- if( iConnection )
- {
- DP_SDA("CPresencePluginSession::CloseConnection close called");
- iConnection->Close();
- iConnection = NULL;
- }
- DP_SDA("CPresencePluginSession::CloseConnection end");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginSession::ConnectionStatus()
-// ---------------------------------------------------------------------------
-//
-TBool CPresencePluginSession::ConnectionStatus()
- {
- DP_SDA("CPresencePluginSession::ConnectionStatus");
- TBool connection = EFalse;
- if( iXdmConnected && iSipConnected )
- {
- connection = ETrue;
- }
- return connection;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginSession::RequestCompleteL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginSession::RequestCompleteL( TInt /*aOpId*/, TInt aStatus )
- {
- DP_SDA("CPresencePluginSession::RequestCompleteL");
- MPresencePluginConnectionObs::TReqType current = iType;
-
- if ( !aStatus )
- {
- DP_SDA("CPresencePluginSession::RequestCompleteL SIP session is open");
- iSipConnected = ETrue;
- if( iXdmConnected )
- {
- DP_SDA("CPresencePluginSession::RequestCompleteL xdm IS OK");
- iType = MPresencePluginConnectionObs::ENoReq;
- iObs.CompleteReq( current, aStatus );
- }
- else
- {
- DP_SDA("CPresencePluginSession::RequestCompleteL Initialize XDM");
- __ASSERT_DEBUG( !IsActive(), User::Leave( KErrNotReady ) );
- //Lets test XDM connection before complete
- iXdmUtils = CPresencePluginXdmUtils::NewL(
- iObs, iXdmSetting, iXdmLocalMode );
-
- iOperation = EInitializeXdm;
- iXdmUtils->InitializeXdmL( iStatus );
- SetActive();
- }
-
- }
- DP_SDA("CPresencePluginSession::RequestCompleteL END");
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginSession::CurrentSipPresentity()
-// ---------------------------------------------------------------------------
-//
-TPtrC8 CPresencePluginSession::CurrentSipPresentity()
- {
- DP_SDA("CPresencePluginSession::CurrentSipPresentity");
- // Get from Simple engine
- delete iUserId8;
- iUserId8 = NULL;
- TRAPD(err, iUserId8 = iConnection->CurrentSIPIdentityL().AllocL() )
- if ( err == KErrNone )
- {
- return iUserId8 ? iUserId8->Des() : TPtrC8();
- }
- else
- {
- return iUserId8 ? KNullDesC8() : TPtrC8();
- }
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginSession::CheckXDMSettings()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginSession::CheckXDMSettingsL( TUint aServiceId )
- {
- //Check if xdm settings not valid or there is text http://localhost
- //in settings. If not valid or text found client will be save resourcelist
- //to in phonememory
-
- TPresSettingsSet mySet;
- User::LeaveIfError(
- PresSettingsApi::SettingsSetL( iPresSettingId, mySet ));
- iXdmSetting = mySet.iXDMSetting;
- if( iDomain )
- {
- delete iDomain;
- iDomain = NULL;
- }
- iDomain = mySet.iDomainSyntax.AllocL();
-
- DP_SDA(" -> CheckXDMSettings - store domain to service table");
- // Service table
- CSPSettings* spsettings = CSPSettings::NewLC();
- CSPProperty* property = CSPProperty::NewLC();
-
- DP_SDA(" -> CheckXDMSettings - spsettings and property created");
- User::LeaveIfError( property->SetName( ESubPropertyPresenceAddrScheme ) );
- DP_SDA(" -> CheckXDMSettings - property name set");
-
- TInt atPosInDomain = iDomain->Locate( '@' );
- DP_SDA2(" -> CheckXDMSettings - @ position in domain: %d", atPosInDomain );
- if ( KErrNotFound == atPosInDomain )
- {
- DP_SDA(" -> CheckXDMSettings - no @ in domain, set");
- property->SetValue( iDomain->Des() );
- }
- else
- {
- DP_SDA(" -> CheckXDMSettings - @ found in domain, remove");
- HBufC* formattedDomain = HBufC::NewLC( iDomain->Length() );
- TPtr formattedDomainPtr( formattedDomain->Des() );
- formattedDomainPtr.Copy( iDomain->Mid( ( atPosInDomain + 1 ) ) );
- property->SetValue( formattedDomainPtr );
- CleanupStack::PopAndDestroy( formattedDomain );
- }
- DP_SDA(" -> CheckXDMSettings - property value set");
- User::LeaveIfError(
- spsettings->AddOrUpdatePropertyL( aServiceId, *property ) );
- DP_SDA(" -> CheckXDMSettings - property added or updated");
-
- CleanupStack::PopAndDestroy( property );
- CleanupStack::PopAndDestroy( spsettings );
-
-#ifdef _DEBUG
- DP_SDA2("XdmSettingsId xdmSetting id %d",iXdmSetting );
- DP_SDA2("CheckXDMSettings::XdmSettingsId domain %S",iDomain );
-#endif
-
- //Continue check, add localhost to buf2
- HBufC* buf2 = KLocalhost().AllocLC();
-
- //Get Uri from XDM settings
- HBufC* xcaproot = NULL;
-
- TRAPD( error, xcaproot =
- TXdmSettingsApi::PropertyL( iXdmSetting, EXdmPropUri ) );
- DP_SDA2("CheckXDMSettings Set localmode, err %d", error);
-
- if( KErrNotFound != error && xcaproot )
- {
- //Compare buf2 to xcaproot
- if ( !xcaproot->Compare( buf2->Des() ) )
- {
- DP_SDA("CheckXDMSettings Set localmode");
- iXdmLocalMode = ETrue;
- }
- else
- {
- DP_SDA("CheckXDMSettings Set Normal Mode");
- iXdmLocalMode = EFalse;
- }
-
- DP_SDA("CheckXDMSettings PopAndDestroy buf2");
- }
- else
- {
- //It seems there is no valid XCAP settings, so we try localmode
- //Shuld we create automaticaly XCAP localhost settings?
- iXdmLocalMode = ETrue;
- }
-
- DP_SDA("CheckXDMSettings PopAndDestroy xcaproot");
- CleanupStack::PopAndDestroy( buf2 );
- delete xcaproot;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginSession::XdmUtilsL()
-// ---------------------------------------------------------------------------
-//
-CPresencePluginXdmUtils* CPresencePluginSession::XdmUtilsL()
- {
- if ( !iXdmUtils )
- {
- DP_SDA("CPresencePluginSession::XdmUtilsL !iXdmUtils");
- iXdmUtils = CPresencePluginXdmUtils::NewL(
- iObs, iXdmSetting, iXdmLocalMode );
- }
-
- return iXdmUtils;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginSession::ServiceId()
-// ---------------------------------------------------------------------------
-//
-TInt& CPresencePluginSession::ServiceId()
- {
- return iServiceId;
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginSession::DoCancel()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginSession::DoCancel( )
- {
- DP_SDA("CPresencePluginSession::DoCancel CANCEL");
- iXdmUtils->Cancel();
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginSession::RunL()
-// ---------------------------------------------------------------------------
-//
-void CPresencePluginSession::RunL( )
- {
- DP_SDA("CPresencePluginSession::RunL");
- TInt status = iStatus.Int();
- DP_SDA2("CPresencePluginSession::RunL status %d", status );
-
- if( ( iOperation == EInitializeXdm ) && !status )
- {
- DP_SDA("CPresencePluginSession::RequestCompleteL connection ready");
- iXdmConnected = ETrue;
- MPresencePluginConnectionObs::TReqType current = iType;
- iType = MPresencePluginConnectionObs::ENoReq;
- iObs.CompleteReq( current, status );
- }
- else
- {
- DP_SDA("Connection FAIL terminated");
- iXdmConnected = EFalse;
- iSipConnected = EFalse;
- iType = MPresencePluginConnectionObs::ECloseSess;
- iObs.CompleteReq( iType, status );
- }
-
- }
-
-// ---------------------------------------------------------------------------
-// CPresencePluginSession::RunError
-// ---------------------------------------------------------------------------
-//
-TInt CPresencePluginSession::RunError( TInt /*aError*/ )
- {
- DP_SDA("CPresencePluginSession::RunError");
- return KErrNone;
- }
-
- // End of file
-