diff -r 000000000000 -r e6b17d312c8b ximpfw/core/srcutils/ximpsrvmessageimp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ximpfw/core/srcutils/ximpsrvmessageimp.cpp Thu Dec 17 08:54:49 2009 +0200 @@ -0,0 +1,214 @@ +/* +* Copyright (c) 2006 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: Concrete server message wrapper implementation. + * +*/ + + +// INCLUDE FILES +#include "ximpsrvmessageimp.h" +#include + +// ----------------------------------------------------------------------------- +// CXIMPSrvMessageImp::NewOrNull() +// ----------------------------------------------------------------------------- +// +CXIMPSrvMessageImp* CXIMPSrvMessageImp::NewOrNull( + const RMessage2& aMessage, + MXIMPSrvMessage*& aSelfPtr, + CXIMPSrvMessageImp*& aSourcePtr ) + { + __ASSERT_ALWAYS( !aSelfPtr, + User::Panic( NXIMPPrivPanic::KCategory, + NXIMPPrivPanic::EMessageSelfPtrAlreadyOccupied ) ); + if( !aSourcePtr ) + { + aSourcePtr = new CXIMPSrvMessageImp( aMessage, aSelfPtr ); // CSI: 62 # + // Special non-leaving function + } + else + { + aSourcePtr->Init( aMessage, aSelfPtr ); + } + return aSourcePtr; + } + + +// ----------------------------------------------------------------------------- +// CXIMPSrvMessageImp::~CXIMPSrvMessageImp() +// ----------------------------------------------------------------------------- +// +CXIMPSrvMessageImp::~CXIMPSrvMessageImp() + { + //If assert below is triggered, it means + //that owned message is not completed before + //deleting the wrapper + __ASSERT_ALWAYS( iMessage.IsNull(), + User::Panic( NXIMPPrivPanic::KCategory, + NXIMPPrivPanic::EMessageStillPendingOnDestruction ) ); + + if( iSelfPtr ) + { + iSelfPtr = NULL; + } + } + + +// ----------------------------------------------------------------------------- +// CXIMPSrvMessageImp::CXIMPSrvMessageImp() +// ----------------------------------------------------------------------------- +// +CXIMPSrvMessageImp::CXIMPSrvMessageImp( const RMessage2& aMessage, + MXIMPSrvMessage*& aSelfPtr ) + : iMessage( aMessage ), + iSelfPtr( &aSelfPtr ) + { + } + +// ----------------------------------------------------------------------------- +// CXIMPSrvMessageImp::Init() +// ----------------------------------------------------------------------------- +// +void CXIMPSrvMessageImp::Init( const RMessage2& aMessage, + MXIMPSrvMessage*& aSelfPtr ) + { + iMessage = aMessage; + iSelfPtr = &aSelfPtr; + } + +// ----------------------------------------------------------------------------- +// CXIMPSrvMessageImp::Complete() +// ----------------------------------------------------------------------------- +void CXIMPSrvMessageImp::Complete( TInt aReason ) + { + if( !iMessage.IsNull() ) + { + iMessage.Complete( aReason ); + } + } + + +// ----------------------------------------------------------------------------- +// CXIMPSrvMessageImp::IsCompleted() +// ----------------------------------------------------------------------------- +TBool CXIMPSrvMessageImp::IsCompleted() const + { + return iMessage.IsNull(); + } + + +// ----------------------------------------------------------------------------- +// CXIMPSrvMessageImp::Function() +// ----------------------------------------------------------------------------- +TInt CXIMPSrvMessageImp::Function() const + { + return iMessage.Function(); + } + + +// ----------------------------------------------------------------------------- +// CXIMPSrvMessageImp::Int() +// ----------------------------------------------------------------------------- +TInt CXIMPSrvMessageImp::Int( TParamIndex aIndex ) const + { + TInt value = 0; + switch( aIndex ) + { + case Ep0: + { + value = iMessage.Int0(); + break; + } + + case Ep1: + { + value = iMessage.Int1(); + break; + } + + case Ep2: + { + value = iMessage.Int2(); + break; + } + + case Ep3: + { + value = iMessage.Int3(); + break; + } + } + + return value; + } + + +// ----------------------------------------------------------------------------- +// CXIMPSrvMessageImp::GetDesLengthL() +// ----------------------------------------------------------------------------- +TInt CXIMPSrvMessageImp::GetDesLengthL( TParamIndex aIndex ) const + { + return iMessage.GetDesLengthL( aIndex ); + } + + +// ----------------------------------------------------------------------------- +// CXIMPSrvMessageImp::ReadL() +// ----------------------------------------------------------------------------- +void CXIMPSrvMessageImp::ReadL( TParamIndex aIndex, TDes8& aDes ) const + { + return iMessage.ReadL( aIndex, aDes ); + } + + +// ----------------------------------------------------------------------------- +// CXIMPSrvMessageImp::WriteL() +// ----------------------------------------------------------------------------- +void CXIMPSrvMessageImp::WriteL( TParamIndex aIndex, const TDesC8& aDes ) const + { + return iMessage.WriteL( aIndex, aDes ); + } + + +// ----------------------------------------------------------------------------- +// CXIMPSrvMessageImp::PanicClientAndLeaveL() +// ----------------------------------------------------------------------------- +void CXIMPSrvMessageImp::PanicClientAndLeaveL( NXIMPPanic::TReason aReason ) const + { + iMessage.Panic( NXIMPPanic::KCategory, aReason ); + User::Leave( KErrCompletion ); + } + + +// ----------------------------------------------------------------------------- +// CXIMPSrvMessageImp::PlaceOwnershipHere() +// ----------------------------------------------------------------------------- +void CXIMPSrvMessageImp::PlaceOwnershipHere( MXIMPSrvMessage*& aNewSelfPtr ) + { + __ASSERT_ALWAYS( !aNewSelfPtr, + User::Panic( NXIMPPrivPanic::KCategory, + NXIMPPrivPanic::EMessageSelfPtrAlreadyOccupied ) ); + + //remove ownership from old pointer + (*iSelfPtr) = NULL; + + //Cache new owning pointer + iSelfPtr = &aNewSelfPtr; + + //And setup new owning pointer to point self + aNewSelfPtr = this; + } + + +// End of file