diff -r 000000000000 -r c8caa15ef882 presencefwsimpleadpt/src/simplepluginsession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presencefwsimpleadpt/src/simplepluginsession.cpp Tue Feb 02 01:05:17 2010 +0200 @@ -0,0 +1,223 @@ +/* +* 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 + +#include + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "simplepluginsession.h" +#include "simpleplugindebugutils.h" +#include "msimplepluginconnectionobs.h" + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CSimplePluginSession::CSimplePluginSession() +// --------------------------------------------------------------------------- +// +CSimplePluginSession::CSimplePluginSession( MSimplePluginConnectionObs& aObs) +: // CActive( CActive::EPriorityStandard ) , + iObs(aObs), iType( MSimplePluginConnectionObs::ENoReq ), iConnected( EFalse ) + { + } + +// --------------------------------------------------------------------------- +// CSimplePluginSession::ConstructL() +// --------------------------------------------------------------------------- +// +void CSimplePluginSession::ConstructL( + const MXIMPServiceInfo& aService ) + { + // iIap is needed only + iIap = aService.IapId(); + + iConnection = TSimpleFactory::NewConnectionL( *this ); + } + +// --------------------------------------------------------------------------- +// CSimplePluginSession::NewL() +// --------------------------------------------------------------------------- +// +CSimplePluginSession* CSimplePluginSession::NewL( + const MXIMPServiceInfo& aServiceInfo, + MSimplePluginConnectionObs& aObs ) + { + CSimplePluginSession* self = new( ELeave ) CSimplePluginSession( aObs ); + CleanupStack::PushL( self ); + self->ConstructL( aServiceInfo ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CSimplePluginSession::~CSimplePluginSession() +// --------------------------------------------------------------------------- +// +CSimplePluginSession::~CSimplePluginSession() + { + delete iUserId8; + delete iDomain; + if ( iConnection ) + { + iConnection->Close(); + } + } + +// --------------------------------------------------------------------------- +// CSimplePluginSession::SimpleConnection() +// --------------------------------------------------------------------------- +// +MSimpleConnection* CSimplePluginSession::SimpleConnection( ) + { + return iConnection; + } + +// --------------------------------------------------------------------------- +// CSimplePluginSession::XdmSettingsId() +// --------------------------------------------------------------------------- +// +TInt CSimplePluginSession::XdmSettingsId( ) + { + return iXdmSetting; + } + +// --------------------------------------------------------------------------- +// CSimplePluginSession::CurrentDomain() +// --------------------------------------------------------------------------- +// +TPtrC16 CSimplePluginSession::CurrentDomain( ) + { + return iDomain ? iDomain->Des() : TPtrC16(); + } + +// --------------------------------------------------------------------------- +// CSimplePluginSession::OpenSessionL() +// Notice: MXIMPServiceInfo::IapId supported only +// --------------------------------------------------------------------------- +// +void CSimplePluginSession::OpenSessionL() + { + TPresSettingsSet mySet; + +#ifdef _DEBUG + + PluginLogger::Log(_L("PluginSession: OpenSessionL") ); + + RArray setIds; + CDesCArray* carr = PresSettingsApi::GetAllSetsNamesLC( setIds ); + TInt myCount = setIds.Count(); + for (TInt i=0; i buffer2; buffer2.Copy(carr->MdcaPoint(i)); + PluginLogger::Log(_L("PluginSession: ID:%d = %S"), setIds[i], &buffer2); + } + setIds.Reset(); + CleanupStack::PopAndDestroy( carr ); +#endif + + iConnected = EFalse; + + User::LeaveIfError( PresSettingsApi::SettingsSetL( iIap, mySet )); + iXdmSetting = mySet.iXDMSetting; + + iDomain = mySet.iDomainSyntax.AllocL(); + + // SIP register + iOpId = iConnection->LoginL( iIap ); + iType = MSimplePluginConnectionObs::EOpenSess; + } + +// --------------------------------------------------------------------------- +// CSimplePluginSession::OpenSessionL() +// Notice: Multiple connections support to be done. +// --------------------------------------------------------------------------- +// +void CSimplePluginSession::OpenSessionL( TInt aSettingsId ) + { + iIap = aSettingsId; + OpenSessionL(); + } + +// --------------------------------------------------------------------------- +// CSimplePluginSession::ConnectionStatusL() +// --------------------------------------------------------------------------- +// +void CSimplePluginSession::ConnectionStatusL( MSimpleConnection::TSimpleState aState ) + { +#ifdef _DEBUG + PluginLogger::Log(_L("PluginSession: ConnectionStatusL %d"), aState ); +#endif + + if ( (aState == MSimpleConnection::EInactive || aState == MSimpleConnection::EUnavailable ) && + iConnected ) + { +#ifdef _DEBUG + PluginLogger::Log( + _L("PluginSession: ConnectionStatusL callback HandleConnectionTerminated") ); +#endif + iConnected = EFalse; + iObs.Host()->HandleConnectionTerminated( NULL ); + } + } + +// --------------------------------------------------------------------------- +// CSimplePluginSession::RequestCompleteL() +// --------------------------------------------------------------------------- +// +void CSimplePluginSession::RequestCompleteL( TInt /*aOpId*/, TInt aStatus ) + { + MSimplePluginConnectionObs::TReqType current = iType; + iType = MSimplePluginConnectionObs::ENoReq; + if ( !aStatus ) + { + iConnected = ETrue; + } + iObs.CompleteReq( current, aStatus ); + } + +// --------------------------------------------------------------------------- +// CSimplePluginSession::CurrentSipPresentity() +// --------------------------------------------------------------------------- +// +TPtrC8 CSimplePluginSession::CurrentSipPresentity() + { + // Get from Simple engine + delete iUserId8; + iUserId8 = NULL; + TRAP_IGNORE( iUserId8 = iConnection->CurrentSIPIdentityL().AllocL() ); + return iUserId8 ? iUserId8->Des() : TPtrC8(); + } + + + +// End of file +