diff -r 000000000000 -r 4e1aa6a622a0 sensorservices/sensorserver/src/server/sensrvmessage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sensorservices/sensorserver/src/server/sensrvmessage.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,323 @@ +/* +* Copyright (c) 2006-2008 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: Sensor server message wrapper +* +*/ + + +#include "sensrvdefines.h" +#include "sensrvtrace.h" +#include "sensrvmessage.h" +#include "sensrvsession.h" +#include "sensrvclientserver.h" + +// ----------------------------------------------------------------------------- +// Two-phased constructor for external message. +// ----------------------------------------------------------------------------- +// +CSensrvMessage* CSensrvMessage::NewL() + { + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::NewL()" ) ) ); + + CSensrvMessage* self = new( ELeave ) CSensrvMessage(); + + // No ConstructL as nothing to do there + + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::NewL - return 0x%x" ), self ) ); + + return self; + } + +// ----------------------------------------------------------------------------- +// CSensrvMessage::CSensrvMessage +// C++ constructor for external message +// ----------------------------------------------------------------------------- +// +CSensrvMessage::CSensrvMessage() + { + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::CSensrvMessage()" ) ) ); + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::CSensrvMessage - return" )) ); + } + + +// --------------------------------------------------------- +// Destructor, completes message with error if not yet done so +// --------------------------------------------------------- +// +CSensrvMessage::~CSensrvMessage() + { + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::~CSensrvMessage()" ) ) ); + + // if message is not yet completed, complete with error. + // This should never happen if everything works properly + if ( iMessage.Handle() ) + { + ERROR_TRACE( ( _L( "Sensor Server - CSensrvMessage::~CSensrvMessage() - ERROR: External message not completed before destruction." ) ) ); + iMessage.Complete(KErrGeneral); + } + + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::~CSensrvMessage - return" ) ) ); + } + +// ----------------------------------------------------------------------------- +// Initializes the message +// ----------------------------------------------------------------------------- +// +void CSensrvMessage::Initialize(const RMessage2& aMessage) + { + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::Initialize()" ) ) ); + + if (iMessage.Handle()) + { + ERROR_TRACE( ( _L( "Sensor Server - CSensrvMessage::Initialize - ERROR: Previous message not completed, canceling it" ) ) ); + iMessage.Complete(KErrCancel); + } + + iMessage = aMessage; + + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::Initialize - return") ) ); + } + + +// ----------------------------------------------------------------------------- +// Completes the message +// ----------------------------------------------------------------------------- +// +void CSensrvMessage::Complete(TInt aReason) + { + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::Complete(%d)" ), aReason ) ); + + iMessage.Complete(aReason); + + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::Complete - return" )) ); + } + +// ----------------------------------------------------------------------------- +// Returns the session handling this message +// ----------------------------------------------------------------------------- +// +CSensrvSession* CSensrvMessage::Session() + { + CSensrvSession* session = NULL; + + session = static_cast(iMessage.Session()); + + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::Session - return 0x%x" ), session ) ); + + return session; + } + +// ----------------------------------------------------------------------------- +// Writes data to message +// ----------------------------------------------------------------------------- +// +TInt CSensrvMessage::Write(TInt aParam, const TDesC8& aDes, TInt aOffset) + { + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::WriteL(aParam: %d, , aOffset: %d)" ), aParam, aOffset ) ); + +#ifdef COMPONENT_TRACE_DEBUG + TInt len = aDes.Length(); + const TUint8* currentByte(aDes.Ptr()); + HBufC* str = HBufC::New(len*6 + 20); + if (str) + { + str->Des().Append(_L("### : 0x")); + for (TInt j=0;jDes().AppendNumUC(*currentByte, EHex); + if ( j < (len-1) ) + { + if ( (j%8) == 7 ) + { + COMPONENT_TRACE((*str)); + str->Des().Delete(0, 1000); + str->Des().Append(_L("### : 0x")); + } + else + { + str->Des().Append(_L(", 0x")); + } + } + + currentByte++; + } + COMPONENT_TRACE((*str)); + delete str; + str = NULL; + } +#endif + + TInt err(KErrNone); + + err = iMessage.Write(aParam, aDes, aOffset); + + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::WriteL - return %d" ), err ) ); + + return err; + } + +// ----------------------------------------------------------------------------- +// Gets maximum lenght of descriptor in specified index +// ----------------------------------------------------------------------------- +// +TInt CSensrvMessage::GetDesMaxLength(TInt aParam) const + { + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::GetDesMaxLengthL(%d)" ), aParam ) ); + + TInt length(0); + + length = iMessage.GetDesMaxLength(aParam); + + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::GetDesMaxLengthL - return: %d" ), length) ); + + return length; + } + +// ----------------------------------------------------------------------------- +// Gets lenght of descriptor in specified index +// ----------------------------------------------------------------------------- +// +TInt CSensrvMessage::GetDesLength(TInt aParam) const + { + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::GetDesLength(%d)" ), aParam ) ); + + TInt lenght(0); + + lenght = iMessage.GetDesLength(aParam); + + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::GetDesLength - return: %d" ), lenght) ); + + return lenght; + } + +// ----------------------------------------------------------------------------- +// Gets maximum lenght of descriptor in specified index +// ----------------------------------------------------------------------------- +// +TSecureId CSensrvMessage::SecureId() const + { + TUint32 sid(0); + + sid = iMessage.SecureId(); + + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::SecureId - return 0x%x" ), sid ) ); + + return TSecureId(sid); + } + +// ----------------------------------------------------------------------------- +// Read data from wrapped message. +// ----------------------------------------------------------------------------- +// +TInt CSensrvMessage::Read( const TInt aParam, TDes8 &aDes ) const + { + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::ReadL(aParam: %d, )" ), aParam ) ); + + TInt err(KErrNone); + + err = iMessage.Read( aParam, aDes ); + + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::ReadL - return %d" ), err) ); + + return err; + } + +// ----------------------------------------------------------------------------- +// Read integer data from wrapped message. +// ----------------------------------------------------------------------------- +// +void CSensrvMessage::ReadInt( const TInt aParam, TInt &aInt ) const + { + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::ReadInt(aParam: %d, )" ), aParam ) ); + + switch(aParam) + { + case 0: + aInt = iMessage.Int0(); + break; + case 1: + aInt = iMessage.Int1(); + break; + case 2: + aInt = iMessage.Int2(); + break; + case 3: + aInt = iMessage.Int3(); + break; + default: + User::Panic(KSensrvPanicCategory, ESensrvPanicOutOfBounds); + break; + } + + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::ReadInt - return, aInt: %d" ), aInt) ); + } + +// --------------------------------------------------------------------------- +// Gets channel id from message. +// --------------------------------------------------------------------------- +// +TInt CSensrvMessage::GetChannelId(TSensrvChannelId& aChannelId) const + { + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::GetChannelId()" ) ) ); + + TInt err(KErrNone); + + // Make sure message type supports channel id. + TInt function = Function(); + + if ( function == ESensrvSrvReqOpenChannel + || function == ESensrvSrvReqCloseChannel + || function == ESensrvSrvReqStartListening + || function == ESensrvSrvReqStopListening + || function == ESensrvSrvReqAsyncChannelData + || function == ESensrvSrvReqGetProperty + || function == ESensrvSrvReqSetProperty + || function == ESensrvSrvReqAsyncPropertyData + || function == ESensrvSrvReqStopPropertyListening + || function == ESensrvSrvReqGetAllProperties + || function == ESensrvSrvReqAddConditionSet + || function == ESensrvSrvReqRemoveConditionSet + || function == ESensrvSrvReqStartConditionListening + || function == ESensrvSrvReqStopConditionListening + || function == ESensrvSrvReqAsyncConditionMet + ) + { + // Read required channel id from message + // Channel id is always on message parameter KSensrvChannelIdSlot, i.e. slot zero. + aChannelId = iMessage.Int0(); + } + else + { + err = KErrNotSupported; + } + + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::GetChannelId - return %d, channel id: %d" ), err, aChannelId) ); + + return err; + } + +// --------------------------------------------------------------------------- +// Gets client security info from message. +// --------------------------------------------------------------------------- +// +void CSensrvMessage::GetSecurityInfo(TSecurityInfo& aSecurityInfo) const + { + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::GetSecurityInfo()" ) ) ); + + // Read required channel id from message + aSecurityInfo.Set(iMessage); + + COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvMessage::GetSecurityInfo - return" ) ) ); + } +