commonuisupport/uikon/test/tmessageserv/messageservsession.cpp
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commonuisupport/uikon/test/tmessageserv/messageservsession.cpp	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,190 @@
+// Copyright (c) 2005-2009 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:
+//
+
+/**
+ @file
+ @internalComponent - Internal Symbian test code  
+*/
+
+
+#include "messageservsession.h"
+
+const TInt STOP_SERVER_CODE	= 0xff;
+
+
+/**
+   Constructor - passes client to CSession.
+ */
+CMessageServSession::CMessageServSession(CMessageServServer * aServer)
+	: CSession2()//aClient)
+	{
+	__DECLARE_NAME(_S("CMessageServSession"));
+	iMsgSvr=aServer;
+	}
+
+/**
+   Auxiliary function for TestCaseID TPACKAGESTARTER-doTestStepL
+  
+   This method creates a Server session for a client thread aClient.
+  
+ */
+CMessageServSession* CMessageServSession::NewL(CMessageServServer * aServer)
+	{
+	return new(ELeave) CMessageServSession(aServer);
+	}
+
+/**
+   Auxiliary function for TestCaseID TPACKAGESTARTER-doTestStepL
+  
+   This method handles the servicing of client requests to the message server.
+   The message is serviced by calling CMessageServSession::DispatchMessageL()
+   and signals completion of the client request by invoking RMessage::Complete().
+  
+ */
+void CMessageServSession::ServiceL(const RMessage2& aMessage)
+	{
+	TRAPD(err,DispatchMessageL(aMessage));
+	aMessage.Complete(err);
+	}
+
+/**
+   Auxiliary function for TestCaseID TPACKAGESTARTER-doTestStepL
+  
+   This method services the client requests to the message server.
+   The opcode is checked and does approprate servicing by invoking methods
+   SetFromStringL() and SetErrorFromStringL().
+  
+ */
+void CMessageServSession::DispatchMessageL(const RMessage2 &aMessage)
+	{
+	switch (aMessage.Function())
+        {
+	case EMessageServSetFromString:
+		SetFromStringL(aMessage);
+		return;
+	case EMessageServSetErrorFromString:
+		SetErrorFromStringL(aMessage);
+		return;
+	case EMessageServStop:
+		{	
+			CActiveScheduler::Stop();
+			
+			iMsgSvr->iMessageProvider->Message()->RequestForTheMessageOutput(STOP_SERVER_CODE);
+			return;
+		}
+	// requests we don't understand at all are a different thing,
+	// so panic the client here, this function also completes the message
+	default:
+		PanicClient(EBadRequest);
+		return;
+        }
+	}
+
+/**
+   Auxiliary function for TestCaseID TPACKAGESTARTER-doTestStepL
+  
+   This method services Error message received from the client to the message
+   server. It reads Error message, filename, line number and error code from
+   the message
+  
+ */
+void CMessageServSession::SetErrorFromStringL(const RMessage2 &aMessage)
+	{
+	TInt res;
+	//const TAny* pD=aMessage.Ptr0();
+	TInt desLen=aMessage.GetDesLength(0);
+	HBufC* writeBuf=HBufC::New(desLen);
+	TPtr initptr = writeBuf->Des();
+	TRAP(res,aMessage.ReadL(0,initptr));
+
+	//const TAny* pD1=aMessage.Ptr1();
+	TInt desLen1=aMessage.GetDesLength(1);//pD1);
+	HBufC8* writeBuf1=HBufC8::New(desLen1);
+	TPtr8 initptr1 = writeBuf1->Des();
+	TRAP(res,aMessage.ReadL(1,initptr1));
+
+
+	const TInt lineNumber = aMessage.Int2();
+	const TInt errorCode = aMessage.Int3();
+
+	// read the contents of the client pointer into a TPtr.
+
+	if (res!=KErrNone)
+		PanicClient(EBadDescriptor);
+	
+	iMsgSvr->iMessageProvider->Message()->iError = errorCode;
+	iMsgSvr->iMessageProvider->Message()->iLineNumber = lineNumber;
+	iMsgSvr->iMessageProvider->Message()->iMsg.Copy(initptr);
+	iMsgSvr->iMessageProvider->Message()->iFileName.Copy(initptr1);
+
+	delete writeBuf;
+	delete writeBuf1;
+	
+	iMsgSvr->iMessageProvider->Message()->RequestForTheMessageOutput(errorCode);
+	}
+
+/**
+   Auxiliary function for TestCaseID TPACKAGESTARTER-doTestStepL
+  
+   This method demonstrates reading message from the client address space to
+   the server. It reads filename, line number and descriptor content from
+   the message
+  
+ */
+void CMessageServSession::SetFromStringL(const RMessage2 &aMessage)
+	{
+	TInt res;
+	//const TAny* pD=aMessage().Ptr0();
+	TInt desLen=aMessage.GetDesLength(0);
+	HBufC* writeBuf=HBufC::New(desLen);
+	TPtr initptr = writeBuf->Des();
+	TRAP(res,aMessage.ReadL(0,initptr));
+
+	//const TAny* pD1=Message().Ptr1();
+	TInt desLen1=aMessage.GetDesLength(1);
+	HBufC8* writeBuf1=HBufC8::New(desLen1);
+	TPtr8 initptr1 = writeBuf1->Des();
+	TRAP(res,aMessage.ReadL(1,initptr1));
+
+
+	const TInt lineNumber = aMessage.Int2();
+
+	// read the contents of the client pointer into a TPtr.
+
+	if (res!=KErrNone)
+		PanicClient(EBadDescriptor);
+	
+	iMsgSvr->iMessageProvider->Message()->iLineNumber = lineNumber;
+	iMsgSvr->iMessageProvider->Message()->iMsg.Copy(initptr);
+	iMsgSvr->iMessageProvider->Message()->iFileName.Copy(initptr1);
+
+	delete writeBuf;
+	delete writeBuf1;
+	
+	iMsgSvr->iMessageProvider->Message()->RequestForTheMessageOutput();
+	}
+
+/**
+   Auxiliary function for TestCaseID TPACKAGESTARTER-doTestStepL
+  
+   This method is used to Panic the client thread
+  
+ */
+void CMessageServSession::PanicClient(TInt aPanic) const
+	{
+	_LIT(KTxtServer,"CountServ server");
+	User::Panic(KTxtServer,aPanic);
+	}
+