PECengine/PresenceManager2/SrcNWSessionSlot/CPEngNWSessionSlot2Imp.cpp
changeset 0 094583676ce7
--- /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
+
+