diff -r 000000000000 -r e4d67989cc36 genericopenlibs/cstdlib/TSTLIB/testcons.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/genericopenlibs/cstdlib/TSTLIB/testcons.cpp Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,94 @@ +// Copyright (c) 1999-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: +// Redirection server for STDLIB test programs +// Implement a redirection server which uses ... a console. +// +// + +#include +#include +#include +#include +#include "CTEST.H" +#include "testconsole.h" + +_LIT(KReDirServerName,"RedirServer"); + +struct rendezvous + { + RThread iCaller; + TRequestStatus* iStatus; + }; + + +TInt threadFunction(TAny* aPtr) +// +// Create and run an active scheduler containing a RedirectionServer +// + { + CTrapCleanup* TheTrapCleanup=CTrapCleanup::New(); + + struct rendezvous* rvp = (struct rendezvous *)aPtr; + TInt ret=KErrNone; + // start scheduler and server + CActiveScheduler *pA=new CActiveScheduler; + if (pA!=NULL) + { + CActiveScheduler::Install(pA); + // ***** TRAP(ret, CRedirServer::NewL(CTestConsoleFactory::NewL()); + TRAP(ret, CRedirServer2::NewL(CTestConsoleFactory::NewL())); +// ret=KErrNotSupported; + } + // signal to the caller that we've started (or failed!) + rvp->iCaller.RequestComplete(rvp->iStatus,ret); + if (ret==KErrNone) + { + // start fielding requests from clients + CActiveScheduler::Start(); + } + // finished + delete TheTrapCleanup; + return(KErrNone); + } + + +EXPORT_C int start_redirection_server() +// +// Try to start a redirection server thread, assuming there isn't one already +// + { + RRedirSession2 probe; + TInt err=probe.Connect(); + probe.Close(); + if (err==KErrNone) + return KErrNone; // server already exists + TRequestStatus status(KRequestPending); + struct rendezvous rv; + rv.iCaller.Duplicate(RThread(),EOwnerProcess); + rv.iStatus=&status; + RThread server; + err=server.Create(KReDirServerName,threadFunction,0x2000,NULL,&rv); + if (err==KErrNone) + { + server.Resume(); + User::WaitForRequest(status); + err=status.Int(); + server.Close(); + } + rv.iCaller.Close(); + return err; + } + + +