diff -r 000000000000 -r 094583676ce7 PECengine/PresenceManager2/SrcNWSessionSlot/CPEngNWSessionSlot2Imp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PECengine/PresenceManager2/SrcNWSessionSlot/CPEngNWSessionSlot2Imp.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,397 @@ +/* +* Copyright (c) 2004 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: NWSessionSlot handle implementation. +* +*/ + +// INCLUDE FILES +#include "CPEngNWSessionSlot2Imp.h" +#include "CPEngNWSessionSlotID2Imp.h" +#include "CPEngNWSessionOperation.h" +#include "CPEngNWSessionOpenOp.h" +#include "CPEngNWSessionCloseOp.h" +#include "PEngLoginDataCodec.h" + + +#include "CPEngSessionSlotState.h" +#include "CPEngNWSessionSlotStorageProxy.h" +#include "PEngStorageManager.h" +#include "CPEngNWSessionProxy.h" + + +#include +#include +#include +#include + + + +//LOCAL constants +#ifdef _DEBUG +namespace + { + //Panic + _LIT( KPEngNWSessionSlotPanic, "PEngAtLstTrans" ); + + //Panic reasons + enum TPEngNWSessionSlotPanicReasons + { + ENWSessionSlotUnkownOp + }; + + void PEngNWSessionSlotPanic( TPEngNWSessionSlotPanicReasons aPanicReason ) + { + User::Panic( KPEngNWSessionSlotPanic, aPanicReason ); + } + } +#endif + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CPEngNWSessionSlot2Imp::NewL() +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CPEngNWSessionSlot2Imp* CPEngNWSessionSlot2Imp::NewL( CPEngNWSessionSlot2& aInterface, + TInt aPriority, + const CPEngNWSessionSlotID2& aNWSessionSlotID ) + { + CPEngNWSessionSlot2Imp* self = + new ( ELeave ) CPEngNWSessionSlot2Imp( aInterface, aPriority ); + CleanupStack::PushL( self ); + self->ConstructL( aNWSessionSlotID ); + CleanupStack::Pop( self ); + return self; + } + + + +// Destructor +CPEngNWSessionSlot2Imp::~CPEngNWSessionSlot2Imp() + { + //Cancel also deletes the operation objects + CancelOpenNWPresenceSession(); + CancelCloseNWPresenceSession(); + + delete iUsedSlot; + delete iNWSessionProxy; + +#if _BullseyeCoverage + cov_write(); +#endif + } + + + +// ----------------------------------------------------------------------------- +// CPEngNWSessionSlot2Imp::CPEngNWSessionSlot2Imp +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CPEngNWSessionSlot2Imp::CPEngNWSessionSlot2Imp( CPEngNWSessionSlot2& aInterface, + TInt aPriority ) + : iInterface( aInterface ), + iActivePriority( aPriority ) + { + } + + +// ----------------------------------------------------------------------------- +// CPEngNWSessionSlot2Imp::ConstructL() +// ----------------------------------------------------------------------------- +// +void CPEngNWSessionSlot2Imp::ConstructL( const CPEngNWSessionSlotID2& aNWSessionSlotID ) + { + iUsedSlot = CPEngNWSessionSlotStorageProxy::NewL( aNWSessionSlotID ); + iNWSessionProxy = CPEngNWSessionProxy::NewL( aNWSessionSlotID ); + } + + +// ----------------------------------------------------------------------------- +// CPEngNWSessionSlot2Imp::GetNWSessionSlotID() +// ----------------------------------------------------------------------------- +// +TInt CPEngNWSessionSlot2Imp::GetNWSessionSlotID( CPEngNWSessionSlotID2& aNWSessionSlotID ) const + { + TRAPD( err, aNWSessionSlotID.Implementation()->SetAllL( iUsedSlot->BaseId(), + iUsedSlot->AppId() ) ); + return err; + } + + +// ----------------------------------------------------------------------------- +// CPEngNWSessionSlot2Imp::GetOption() +// ----------------------------------------------------------------------------- +// +TInt CPEngNWSessionSlot2Imp::GetOption( TUint aOptionName, + TUint aOptionLevel, + TDes8& aOption ) + { + if ( ( aOptionName == KPEngWVCspServicesTree2 ) && + ( aOptionLevel == KPEngNWSessionSlotTransportQuery ) ) + { + if ( aOption.Length() != sizeof( TPEngWVCspServicesTree2 ) ) + { + return KErrArgument; + } + + TPEngWVCspServicesTree2 cspTree; + TInt err = iNWSessionProxy->GetServiceTree( cspTree ); + TPckg cspTreeBuf( cspTree ); + aOption = cspTreeBuf; + + return err; + } + + return KErrNotSupported; + } + + +// ----------------------------------------------------------------------------- +// CPEngNWSessionSlot2Imp::IsOpenNWPresenceSessionActive() +// ----------------------------------------------------------------------------- +// +TBool CPEngNWSessionSlot2Imp::IsOpenNWPresenceSessionActive() const + { + return( iSessionOpenOp != NULL ); // CSI: 64 # + } + + +// ----------------------------------------------------------------------------- +// CPEngNWSessionSlot2Imp::OpenNWPresenceSession() +// ----------------------------------------------------------------------------- +// +TInt CPEngNWSessionSlot2Imp::OpenNWPresenceSession( + const CIMPSSAPSettings& aSAP, + MPEngNWSessionOperationObserver2& aObserver ) + { + if ( iSessionOpenOp || iSessionCloseOp ) + { + return KErrInUse; + } + + CPEngNWSessionOpenOp* op = NULL; + TRAPD( err, + op = CPEngNWSessionOpenOp::NewL( iActivePriority, + *iNWSessionProxy, + iInterface, + aSAP, + aObserver ) ); + + if ( err == KErrNone ) + { + op->SetOwner( *this ); + op->IssueNWSessionOpen(); + iSessionOpenOp = op; + } + + return err; + } + + +// ----------------------------------------------------------------------------- +// CPEngNWSessionSlot2Imp::CancelOpenNWPresenceSession() +// ----------------------------------------------------------------------------- +// +void CPEngNWSessionSlot2Imp::CancelOpenNWPresenceSession() + { + //Deletes also the operation + if ( iSessionOpenOp ) + { + iSessionOpenOp->CancelOpD(); + iSessionOpenOp = NULL; + } + } + + +// ----------------------------------------------------------------------------- +// CPEngNWSessionSlot2Imp::IsCloseNWPresenceSessionActive() +// ----------------------------------------------------------------------------- +// +TBool CPEngNWSessionSlot2Imp::IsCloseNWPresenceSessionActive() const + { + return( iSessionCloseOp != NULL ); // CSI: 64 # + } + + +// ----------------------------------------------------------------------------- +// CPEngNWSessionSlot2Imp::CloseNWPresenceSession() +// ----------------------------------------------------------------------------- +// +TInt CPEngNWSessionSlot2Imp::CloseNWPresenceSession( + MPEngNWSessionOperationObserver2& aObserver, + TBool aForceClose ) + { + if ( iSessionOpenOp || iSessionCloseOp ) + { + return KErrInUse; + } + + CPEngNWSessionCloseOp* op = NULL; + TRAPD( err, + op = CPEngNWSessionCloseOp::NewL( iActivePriority, + *iNWSessionProxy, + iInterface, + aObserver, + aForceClose ) ); + + if ( err == KErrNone ) + { + op->SetOwner( *this ); + op->IssueNWSessionClose(); + iSessionCloseOp = op; + } + + return err; + } + + + +// ----------------------------------------------------------------------------- +// CPEngNWSessionSlot2Imp::CancelCloseNWPresenceSession() +// ----------------------------------------------------------------------------- +// +void CPEngNWSessionSlot2Imp::CancelCloseNWPresenceSession() + { + //Deletes also the operation + if ( iSessionCloseOp ) + { + iSessionCloseOp->CancelOpD(); + iSessionCloseOp = NULL; + } + } + + +// ----------------------------------------------------------------------------- +// CPEngNWSessionSlot2Imp::OpenNWPresenceSessionOwnership() +// ----------------------------------------------------------------------------- +// +TInt CPEngNWSessionSlot2Imp::OpenNWPresenceSessionOwnership() + { + return iNWSessionProxy->OpenOwnership(); + } + + +// ----------------------------------------------------------------------------- +// CPEngNWSessionSlot2Imp::CloseNWPresenceSessionOwnership() +// ----------------------------------------------------------------------------- +// +void CPEngNWSessionSlot2Imp::CloseNWPresenceSessionOwnership() + { + iNWSessionProxy->Close(); + } + + +// ----------------------------------------------------------------------------- +// CPEngNWSessionSlot2Imp::StoreNWPresenceSessionOwnership() +// ----------------------------------------------------------------------------- +// +TInt CPEngNWSessionSlot2Imp::StoreNWPresenceSessionOwnership( + const TDesC16& aOwnerID ) + { + return iNWSessionProxy->StoreOwnership( aOwnerID ); + } + + +// ----------------------------------------------------------------------------- +// CPEngNWSessionSlot2Imp::RestoreNWPresenceSessionOwnership() +// ----------------------------------------------------------------------------- +// +TInt CPEngNWSessionSlot2Imp::RestoreNWPresenceSessionOwnership( + const TDesC16& aOwnerID ) + { + return iNWSessionProxy->RestoreOwnership( aOwnerID ); + } + + +// ----------------------------------------------------------------------------- +// CPEngNWSessionSlot2Imp::GetNWPresenceSessionSap() +// ----------------------------------------------------------------------------- +// +TInt CPEngNWSessionSlot2Imp::GetNWPresenceSessionSap( CIMPSSAPSettings& aSAP ) const + { + TRAPD( err, DoGetNWPresenceSessionSapL( aSAP ) ); + return err; + } + + +// ----------------------------------------------------------------------------- +// CPEngNWSessionSlot2Imp::GetNWSessionSlotState() +// ----------------------------------------------------------------------------- +// +TInt CPEngNWSessionSlot2Imp::GetNWSessionSlotState( + TPEngNWSessionSlotState& aState ) const + { + TRAPD( err, + { + CPEngSessionSlotState* state = CPEngSessionSlotState::NewLC(); + PEngStorageManager::SessionSlotStateL( iUsedSlot->BaseId(), + *state ); + + aState = state->AppState( iUsedSlot->AppId() ); + CleanupStack::PopAndDestroy( state ); + } ); + + + return err; + } + + + +// ----------------------------------------------------------------------------- +// CPEngNWSessionSlot2Imp::HandleNWSessionOperationDestruction() +// ----------------------------------------------------------------------------- +// +void CPEngNWSessionSlot2Imp::HandleNWSessionOperationDestruction( + CPEngNWSessionOperation* aOperation ) + { + if ( aOperation == iSessionOpenOp ) + { + iSessionOpenOp = NULL; + return; + } + + if ( aOperation == iSessionCloseOp ) + { + iSessionCloseOp = NULL; + return; + } + + __ASSERT_DEBUG( EFalse, PEngNWSessionSlotPanic( ENWSessionSlotUnkownOp ) ); + } + + +// ----------------------------------------------------------------------------- +// CPEngNWSessionSlot2Imp::DoGetNWPresenceSessionSapL() +// ----------------------------------------------------------------------------- +// +void CPEngNWSessionSlot2Imp::DoGetNWPresenceSessionSapL( CIMPSSAPSettings& aSAP ) const + { + HBufC8* loginData = NULL; + User::LeaveIfError( iNWSessionProxy->GetLoginData( loginData ) ); + __ASSERT_ALWAYS( loginData, User::Leave( KErrGeneral ) ); + + + CleanupStack::PushL( loginData ); + PEngLoginDataCodec::UnPackLoginDataL( *loginData, aSAP ); + CleanupStack::PopAndDestroy( loginData ); + } + + + +// End of File + +