PECengine/CoreUtilsLib2/Src/CPEngSessionSlotEvent.cpp
branchRCL_3
changeset 13 a941bc465d9f
parent 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PECengine/CoreUtilsLib2/Src/CPEngSessionSlotEvent.cpp	Wed Sep 01 12:31:13 2010 +0100
@@ -0,0 +1,453 @@
+/*
+* Copyright (c) 2005 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:  Session Slot Event container.
+*
+*/
+
+// INCLUDE FILES
+#include    "CPEngSessionSlotEvent.h"
+#include    "PEngCoreUtilsTools.h"
+#include    "CPEngSessionSlotId.h"
+
+
+
+// CONSTANTS
+
+//LOCAL PANIC
+namespace
+    {
+    //SessionSlotEvent panic
+    _LIT( KPEngSessionSlotEventPanic, "SessSlotEvent" );
+
+    //SessionSlotEvent panic reasons
+    enum TPEngSessionSlotEventPanicReasons
+        {
+        EPEngNoSessionSlotId = 1
+        };
+
+    void PanicSessionSlotEvent( TPEngSessionSlotEventPanicReasons aPanicReason )
+        {
+        User::Panic( KPEngSessionSlotEventPanic, aPanicReason );
+        }
+    }
+
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::CPEngSessionSlotEvent
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPEngSessionSlotEvent::CPEngSessionSlotEvent()
+        : iIdentificationOwned( EFalse )
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CPEngSessionSlotEvent* CPEngSessionSlotEvent::NewL()
+    {
+    CPEngSessionSlotEvent* self = new ( ELeave ) CPEngSessionSlotEvent();
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::NewLC()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CPEngSessionSlotEvent* CPEngSessionSlotEvent::NewLC()
+    {
+    CPEngSessionSlotEvent* self = new ( ELeave ) CPEngSessionSlotEvent();
+    CleanupStack::PushL( self );
+    return self;
+    }
+
+
+// Destructor
+CPEngSessionSlotEvent::~CPEngSessionSlotEvent()
+    {
+    if ( iIdentificationOwned )
+        {
+        delete iSessionId;
+        }
+    delete iEventDesc;
+    delete iApplicationId;
+
+
+#if _BullseyeCoverage
+    cov_write();
+#endif
+    }
+
+
+
+// =============================================================================
+// ======================= Session Slot Event ==================================
+// =============================================================================
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::SessionSlotIndentification()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const CPEngSessionSlotId& CPEngSessionSlotEvent::SessionSlotIndentification( ) const
+    {
+    __ASSERT_ALWAYS( iSessionId, PanicSessionSlotEvent( EPEngNoSessionSlotId ) );
+    return *iSessionId;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::ApplicationId()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CPEngSessionSlotEvent::ApplicationId( void ) const
+    {
+    return DoGetDescriptor( iApplicationId );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::Event()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPEngNWSessionSlotEvent CPEngSessionSlotEvent::Event( void ) const
+    {
+    return iEvent;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::AppSessSlotState()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPEngNWSessionSlotState CPEngSessionSlotEvent::AppSessSltState( void ) const
+    {
+    return iAppSessState;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::GlobSessSltState()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TPEngNWSessionSlotState CPEngSessionSlotEvent::GlobSessSltState( void ) const
+    {
+    return iGlobSessState;
+    }
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::EventInt()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CPEngSessionSlotEvent::EventInt( void ) const
+    {
+    return iEventInt;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::EventDesc()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CPEngSessionSlotEvent::EventDesc( void ) const
+    {
+    return DoGetDescriptor( iEventDesc );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::SetSessionStlotId()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPEngSessionSlotEvent::SetSessionSlotId(
+    CPEngSessionSlotId* aSlotId,
+    TBool aOwnershipTransfered /* EFalse */ )
+    {
+    if ( iSessionId && iIdentificationOwned )
+        {
+        delete iSessionId;
+        }
+
+    iSessionId = aSlotId;
+    iIdentificationOwned = aOwnershipTransfered;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::SetAppIdL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPEngSessionSlotEvent::SetAppIdL( const TDesC& aAppId )
+    {
+    DoSetDescriptorL( iApplicationId, aAppId );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::SetSessSltEvent()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPEngSessionSlotEvent::SetSessSltEvent(
+    TPEngNWSessionSlotEvent aEvent )
+    {
+    iEvent = aEvent;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::SetAppSessSltState()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPEngSessionSlotEvent::SetAppSessSltState(
+    TPEngNWSessionSlotState aState )
+    {
+    iAppSessState = aState;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::SetGlobSessSltState()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPEngSessionSlotEvent::SetGlobSessSltState(
+    TPEngNWSessionSlotState aState )
+    {
+    iGlobSessState = aState;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::SetEventInt()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPEngSessionSlotEvent::SetEventInt(
+    TInt aEventInt )
+    {
+    iEventInt = aEventInt;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::SetEventDesL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPEngSessionSlotEvent::SetEventDesL(
+    const TDesC& aEventDes )
+    {
+    DoSetDescriptorL( iEventDesc, aEventDes );
+    }
+
+
+
+
+// =============================================================================
+// =========== Externalize Internalize functions ===============================
+// =============================================================================
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::InternalizeL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPEngSessionSlotEvent::InternalizeL( RReadStream& aStream,
+                                                   TBool aAllData )
+    {
+    if ( aAllData )
+        {
+        CPEngSessionSlotId* newId = CPEngSessionSlotId::NewLC();
+        newId->InternalizeL( aStream );
+        SetSessionSlotId( newId, ETrue );
+        CleanupStack::Pop( newId );
+        }
+
+    delete iApplicationId;
+    iApplicationId = NULL;
+    iApplicationId = InternalizeBufferL( aStream );
+
+
+    iEvent = static_cast<TPEngNWSessionSlotEvent>( aStream.ReadInt32L() );
+    iAppSessState = static_cast<TPEngNWSessionSlotState>( aStream.ReadInt32L() );
+    iGlobSessState = static_cast<TPEngNWSessionSlotState>( aStream.ReadInt32L() );
+
+
+    iEventInt = aStream.ReadInt32L();
+
+    delete iEventDesc;
+    iEventDesc = NULL;
+    iEventDesc = InternalizeBufferL( aStream );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::UnpackEventL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPEngSessionSlotEvent::UnpackEventL( const TDesC8& aDes )
+    {
+    RDesReadStream rs;
+    rs.Open( aDes );               // CSI: 65 #
+    CleanupClosePushL( rs );
+    InternalizeL( rs, ETrue );
+    CleanupStack::PopAndDestroy(); // rs
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::UnpackEventPartL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPEngSessionSlotEvent::UnpackEventPartL( const TDesC8& aDes )
+    {
+    RDesReadStream rs;
+    rs.Open( aDes );               // CSI: 65 #
+    CleanupClosePushL( rs );
+
+    InternalizeL( rs, EFalse );
+
+    CleanupStack::PopAndDestroy(); // rs
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::ExternalizeL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPEngSessionSlotEvent::ExternalizeL( RWriteStream& aStream,
+                                                   TBool aAllData ) const
+    {
+    if ( aAllData )
+        {
+        __ASSERT_ALWAYS( iSessionId, PanicSessionSlotEvent( EPEngNoSessionSlotId ) );
+        iSessionId->ExternalizeL( aStream );
+        }
+
+    ExternalizeBufferL( iApplicationId, aStream );
+
+    aStream.WriteInt32L( iEvent );
+    aStream.WriteInt32L( iAppSessState );
+    aStream.WriteInt32L( iGlobSessState );
+
+    aStream.WriteInt32L( iEventInt );
+    ExternalizeBufferL( iEventDesc, aStream );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::Size()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CPEngSessionSlotEvent::Size( TBool aAllData ) const
+    {
+    TInt size = 16; // iEvent: 4 bytes
+    // iAppSessState: 4 bytes
+    // iGlobSessState: 4 bytes
+    // iEventInt: 4 bytes
+
+    if ( aAllData )
+        {
+        __ASSERT_ALWAYS( iSessionId, PanicSessionSlotEvent( EPEngNoSessionSlotId ) );
+        size += iSessionId->Size();
+        }
+
+    size += BufferExternalizeSizeInBytes( iApplicationId );
+    size += BufferExternalizeSizeInBytes( iEventDesc );
+
+    return size;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::PackEventLC()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C HBufC8* CPEngSessionSlotEvent::PackEventLC()
+    {
+    HBufC8* packBuffer = HBufC8::NewLC( Size( ETrue ) );
+    TPtr8 pack( packBuffer->Des() );
+
+    RDesWriteStream ws;
+    ws.Open( pack );               // CSI: 65 #
+    CleanupClosePushL( ws );
+
+    ExternalizeL( ws, ETrue );
+
+    ws.CommitL();
+    CleanupStack::PopAndDestroy(); //ws
+
+    packBuffer = packBuffer->ReAllocL( packBuffer->Length() );
+    CleanupStack::Pop();
+    CleanupStack::PushL( packBuffer ); //Due realloc
+    return packBuffer;
+    }
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::PackEventL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPEngSessionSlotEvent::PackEventL( RBuf8& aBuf )
+    {
+    TInt size( Size( ETrue ) );
+    if ( aBuf.MaxSize() < size )
+        {
+        aBuf.ReAllocL( size );
+        }
+    aBuf.Zero();
+
+    RDesWriteStream ws;
+    ws.Open( aBuf );              // CSI: 65 #
+    CleanupClosePushL( ws );
+
+    ExternalizeL( ws, ETrue );
+
+    ws.CommitL();
+    CleanupStack::PopAndDestroy(); //ws
+    }
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotEvent::PackEventPartL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C HBufC8* CPEngSessionSlotEvent::PackEventPartLC()
+    {
+    HBufC8* packBuffer = HBufC8::NewLC( Size( EFalse ) );
+    TPtr8 pack( packBuffer->Des() );
+
+    RDesWriteStream ws;
+    ws.Open( pack );              // CSI: 65 #
+    CleanupClosePushL( ws );
+
+    ExternalizeL( ws, EFalse );
+
+    ws.CommitL();
+    CleanupStack::PopAndDestroy(); //ws
+
+    packBuffer = packBuffer->ReAllocL( packBuffer->Length() );
+    CleanupStack::Pop();
+    CleanupStack::PushL( packBuffer ); //Due realloc
+    return packBuffer;
+    }
+
+
+// End of File
+
+