diff -r 000000000000 -r f5a58ecadc66 servicediscoveryandcontrol/pnp/test/upnp/unittests/tcpserver/src/ctcpservertestcase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/servicediscoveryandcontrol/pnp/test/upnp/unittests/tcpserver/src/ctcpservertestcase.cpp Tue Feb 02 01:12:20 2010 +0200 @@ -0,0 +1,218 @@ +/* +* Copyright (c) 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: +* +*/ + +#include +#include +#include +#include +#include "ptcpservertests.h" +#include "upnp_cf_msgs.h" +#include "upnpflowbase.h" +#include "upnpflowfactory.h" + +#include "CTcpServerTestCase.h" + +using namespace Messages; + +const TUint KHttpDefaultPort = 80; + +//------------------------------------------------------------// +/////////////////// CTcpServerTestCase ///////////////////////// +////// Testcase: Send the test data from the test client///////// +//------------------------------------------------------------// + +/* +CTcpServerTestCase* CTcpServerTestCase::NewL ( CProxyProvd* aProvd ) + { + CTcpServerTestCase* ret = new ( ELeave ) CTcpServerTestCase ( aProvd ); + CleanupStack::PushL ( ret ); + ret->ConstructL (); + CleanupStack::Pop ( ret ); + return ret; + } +*/ + +CTcpServerTestCase::CTcpServerTestCase ( CProxyProvd* aProvd ) : + CTcpServerTestBase ( aProvd ), iSocketHandler ( *this ), iHostAddr ( KInetAddrLoop, KHttpDefaultPort ), iState ( ECreateServer ) + { + } + +CTcpServerTestCase::~CTcpServerTestCase () + { + iServiceUri.Close (); + + iSocketHandler.CancelAll (); + iClientSocket.Close (); + delete iSocketOpener; + + iTimer.Close (); + + TUpnpMessage::DeRegister (); + } + +void CTcpServerTestCase::ConstructL (const TDesC8& aDes) + { + TUpnpMessage::RegisterL ( SockManGlobals::Get ()->SelfWorker ()); + + iServiceUri.CreateL ( aDes ); + + iTimer.CreateLocal (); + TRAPD ( err, iSocketOpener = CSocketOpener::NewL ( *this ) ); + + User::LeaveIfError ( err ); + } + +TVerdict CTcpServerTestCase::RunTestL () + { + switch ( iState ) + { + case ECreateServer: + { + const TUint8* uriPtr = NULL; + uriPtr = iServiceUri.Ptr (); + + const TUid reqUid = { CUPnPFlowFactory::iUid }; + THttpServerFlowQuery flowQuery ( uriPtr, + iServiceUri.Size (), + Id (), + EHttpServerFlow, iChunkManager ); + TCFPlayerRole playerRole ( TCFPlayerRole::EDataPlane ); + + TCFFactory::TFindOrCreatePeer msg ( TCFPlayerRole::EDataPlane, reqUid, &flowQuery ); + TNodeId factoryContainer = SockManGlobals::Get()->GetPlaneFC( playerRole ); + + RClientInterface::OpenPostMessageClose ( Id (), TNodeCtxId ( KActivityNull, factoryContainer ), TCFFactory::TFindOrCreatePeer ( TCFPlayerRole::EDataPlane, reqUid, &flowQuery ).CRef () ); + + iState = EStartServer; + iStatus = KRequestPending; + Reschedule (); + return EPass; + } + + case EStartServer: + { + + iLogger.WriteFormat(_L("Start Server..... ")); + RClientInterface::OpenPostMessageClose ( TNodeCtxId ( KActivityNull, Id () ), TNodeCtxId ( KActivityNull, iTcpServer ), TCFDataClient::TStart ().CRef () ); + + iState = EOpenClientSocketAndConnect; + iStatus = KRequestPending; + Reschedule (); + return EPass; + } + + case EOpenClientSocketAndConnect: + { + iLogger.WriteFormat(_L("MakeSocket..... ")); + iSocketOpener->MakeSocket ( KAfInet, KSockStream, KProtocolInetTcp ); + + iState = ESendData; + iStatus = KRequestPending; + Reschedule (); + return EPass; + } +/* + case ESendData: + { + iSendChain.CreateL ( KData ); + iSocketHandler.Send ( iSendChain ); + + iState = ESendStopServer; + iStatus = KRequestPending; + Reschedule (); + return EPass; + } +*/ + + // just to make sure production objects are cleaned-up properly. + case ESendStopServer: + { + iLogger.WriteFormat(_L("ESendStopServer..... ")); + // cleanup tcp server flow + RClientInterface::OpenPostMessageClose ( TNodeCtxId ( KActivityNull, Id () ), TNodeCtxId ( KActivityNull, iTcpServer ), TCFDataClient::TStop ( KErrNone ).CRef () ); + + iState = EServerStopped; + iStatus = KRequestPending; + Reschedule (); + return EPass; + } + + case EServerStopped: + { + iLogger.WriteFormat(_L("EServerStopped..... ")); + // cleanup udp server flow + RClientInterface::OpenPostMessageClose ( TNodeCtxId ( KActivityNull, Id () ), TNodeCtxId ( KActivityNull, iTcpServer ), TEChild::TDestroy ().CRef () ); + + iTimer.After ( iStatus, 1000000 ); //1secs + iState = ECleanup; + iStatus = KRequestPending; + Reschedule (); + return EPass; + } + + case ECleanup: + { + iLogger.WriteFormat(_L("ECleanup..... ")); + return iResponse; // Here the final test case is passed back to the RSocket::Ioctl + } + + default: + { + iLogger.WriteFormat(_L(" Failed: TestCase:..... ")); + ASSERT(0); + return EFail; + } + } + } + +void CTcpServerTestCase::OpenComplete ( RInternalSocket& aSocket ) + { + iClientSocket = aSocket; + iSocketHandler.Attach ( aSocket ); + + iSocketHandler.Connect ( iHostAddr ); + } + +void CTcpServerTestCase::ConnectComplete () + { + CompleteSelf ( KErrNone ); + } + +void CTcpServerTestCase::SendComplete ( TInt /*aLength*/ ) + { + iLogger.WriteFormat(_L(" SendComplete..... ")); + iSendChain.Init (); + iSocketHandler.Recv (); + } + + +void CTcpServerTestCase::ReceivedL ( const TRuntimeCtxId& /*aSender*/, const TNodeId& /*aRecipient*/, TSignatureBase& aMessage ) + { + iLogger.WriteFormat(_L("ReceivedL..... ")); + if ( aMessage.IsMessage () ) + { + const TCFFactory::TPeerFoundOrCreated& msg = message_cast < const TCFFactory::TPeerFoundOrCreated > ( aMessage ); + iTcpServer = msg.iNodeId; + CompleteSelf ( KErrNone ); + } + else if ( aMessage.IsMessage () + || aMessage.IsMessage () ) + { + CompleteSelf ( KErrNone ); + } + } +