diff -r 000000000000 -r 2f259fa3e83a commonuisupport/uikon/test/tmessageserv/messageservsession.cpp --- /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); + } +