diff -r 6ca72c0fe49a -r a941bc465d9f PECengine/CoreUtilsLib2/Src/CPEngSessionSlotEvent.cpp --- /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( aStream.ReadInt32L() ); + iAppSessState = static_cast( aStream.ReadInt32L() ); + iGlobSessState = static_cast( 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 + +