--- /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 <PEngPresenceEngineConsts2.h>
+#include <CPEngNWSessionSlot2.h>
+#include <CPEngNWSessionSlotID2.h>
+#include <PEngWVServices2.h>
+
+
+
+//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<TPEngWVCspServicesTree2> 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
+
+