--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/mmcesrv/mmceserver/inc/mcemessagedispatcher.inl Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,138 @@
+/*
+* 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:
+*
+*/
+
+
+
+
+// -----------------------------------------------------------------------------
+// TMceMessageDispatcher::TMceMessageDispatcher
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline TMceMessageDispatcher<T>::TMceMessageDispatcher( T& aService, CMceCsServerITC& aItc )
+ : iService( aService ),
+ iItc( aItc )
+ {
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// TMceMessageDispatcher::DoServiceL
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline void TMceMessageDispatcher<T>::DispatchL( TMceIds& aIds,
+ TMceItcFunctions aFunction,
+ const RMessage2& aMessage )
+
+ {
+
+ MCESRV_DEBUG("TMceMessageDispatcher::DispatchL, Entry");
+ MCESRV_DEBUG_IDS("IDS", aIds );
+
+ HBufC8* encodedMessage = NULL;
+ HBufC8* content = NULL;
+ CMceMsgBase* message = NULL;
+ HBufC8* returnMessage = NULL;
+
+ aIds.iItcContext = &aMessage;
+
+ if ( aIds.iMsgType == EMceItcMsgTypeWriteString ||
+ aIds.iMsgType == EMceItcMsgTypeReadString )
+ {
+ MCESRV_DEBUG("reading message from client");
+ encodedMessage = ITC().ReadLC( aMessage, EMceItcArgContext );
+ encodedMessage = !encodedMessage ?
+ KNullDesC8().AllocLC() : encodedMessage;
+
+ if ( aIds.iMsgType == EMceItcMsgTypeReadString )
+ {
+ TPtr8 buffer = encodedMessage->Des();
+ iService.DoServiceL( aIds, aFunction, buffer );
+ ITC().WriteL( aMessage,
+ buffer,
+ EMceItcArgContext );
+ }
+ else
+ {
+ iService.DoServiceL( aIds, aFunction, *encodedMessage );
+ }
+ CleanupStack::PopAndDestroy( encodedMessage );
+ }
+ else if ( aIds.iMsgType != KMceNotAssigned )
+ {
+ MCESRV_DEBUG("reading message from client");
+ encodedMessage = ITC().ReadLC( aMessage, EMceItcArgContext );
+ encodedMessage = !encodedMessage ?
+ KNullDesC8().AllocLC() : encodedMessage;
+ content = ITC().ReadLC( aMessage, EMceItcArgMessageContent );
+ MCESRV_DEBUG_DVALUE("content size", content ? content->Length() : 0 );
+ CleanupStack::Pop( content );
+ iService.StoreClientContent( content );
+ message = DecodeL( static_cast<TMceItcDataType>( aIds.iMsgType ),
+ *encodedMessage );
+ MCESRV_DEBUG("calling ServiceL with message");
+ CleanupStack::PushL( message );
+ message->PushL();
+ iService.DoServiceL( aIds, aFunction, *message );
+ message->Pop();
+ CleanupStack::PopAndDestroy( message );
+ CleanupStack::PopAndDestroy( encodedMessage );
+ }
+ else
+ {
+ MCESRV_DEBUG("calling ServiceL without message");
+ returnMessage = iService.DoServiceL( aIds, aFunction );
+ if ( returnMessage )
+ {
+ CleanupStack::PushL( returnMessage );
+ ITC().WriteL( aMessage,
+ *returnMessage,
+ EMceItcArgContext );
+ CleanupStack::PopAndDestroy( returnMessage );
+ }
+ }
+
+ MCESRV_DEBUG("TMceMessageDispatcher::DispatchL, Exit");
+
+ }
+
+// -----------------------------------------------------------------------------
+// TMceMessageDispatcher::DecodeL
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline CMceMsgBase* TMceMessageDispatcher<T>::DecodeL( TMceItcDataType aType,
+ const TDesC8& aMessage )
+ {
+ MCESRV_DEBUG("TMceMessageDispatcher::DecodeL, Entry");
+
+ RDesReadStream readStream( aMessage );
+ CleanupClosePushL( readStream );
+
+ CMceMsgBase* message = TMceComFactory().CreateL( aType, readStream );
+ CleanupStack::PopAndDestroy(); // readStream
+
+ MCESRV_DEBUG_DVALUE("message type", aType );
+
+ MCESRV_DEBUG("TMceMessageDispatcher::DecodeL, Exit");
+
+ return message;
+
+ }
+