networksecurity/tls/ts_tls/t_oomClientTest.cpp
changeset 0 af10295192d8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networksecurity/tls/ts_tls/t_oomClientTest.cpp	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,136 @@
+// Copyright (c) 2003-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:
+//
+ 
+#include <e32base.h>
+#include <e32cons.h>
+#include <c32comm.h>
+#include <f32file.h>
+#include <es_sock.h>
+#include <securesocket.h>
+#include "t_oomClientTest.h"
+
+ClientOOMTest* ClientOOMTest::NewL(CActiveScheduler* anActiveScheduler)
+	{
+	ClientOOMTest* self = new(ELeave) ClientOOMTest(anActiveScheduler);
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop();		
+	return self;
+	}
+
+void ClientOOMTest::ConstructL()
+	{
+	// Add this object to the active scheduler
+	CActiveScheduler::Add( this );
+	}
+
+ClientOOMTest::ClientOOMTest(CActiveScheduler* anActiveScheduler) : CActive(CActive::EPriorityStandard)
+	{
+	iRunState = ClientOOMTest::ECreated;
+	iActiveScheduler = anActiveScheduler;
+	}
+
+//
+// Destructor
+//
+ClientOOMTest::~ClientOOMTest()
+	{
+	Cancel();
+	delete iTlsSocket;
+	iSocketServ.Close();
+	}
+
+void ClientOOMTest::Start()
+	{
+	TRequestStatus* p=&iStatus;	
+	// Complete immediately
+	User::RequestComplete(p, KErrNone);
+	SetActive();
+	}
+
+TInt ClientOOMTest::RunError(TInt aError)
+{
+	iError = aError;
+	iActiveScheduler->Stop();
+	return KErrNone;
+}
+
+void ClientOOMTest::RunL()
+{
+   if ( iRunState != ERecvPagePending || iStatus.Int() != KErrEof )
+   {//KErrEof on data reception is not an error
+	   User::LeaveIfError(iStatus.Int());
+   }
+	_LIT(KSSLProtocol,"tls1.0");
+	switch(iRunState)
+	{
+	case ClientOOMTest::ECreated:
+			// Connect the socket server
+			User::LeaveIfError(iSocketServ.Connect());
+			// Open the socket
+			User::LeaveIfError( iSocket.Open( iSocketServ, KAfInet, KSockStream, KProtocolInetTcp ) );	
+			//Connect the socket
+			connectInetAddr.Input( iAddress );
+			//connectInetAddr.SetAddress(KTestAddress);
+			connectInetAddr.SetPort(iPortNumber);  //TLS port
+
+			iSocket.Connect( connectInetAddr, iStatus );	
+			iRunState = EConnectPending;
+			SetActive();
+			return;
+
+	case ClientOOMTest::EConnectPending:
+			
+			// Set the heap to fail on the Nth (iOOMThreshold) request 
+			__UHEAP_FAILNEXT(iOOMThreshold);
+			// Construct the Tls socket
+			User::LeaveIfNull(iTlsSocket = CSecureSocket::NewL( iSocket,KSSLProtocol()));
+			//=========================================================
+			// start the handshake 
+ 			iTlsSocket->StartClientHandshake( iStatus );
+			iRunState = EHSPending;
+			SetActive();
+			return;
+	case ClientOOMTest::EHSPending:
+
+			iSndBuffer.Copy( _L("GET ") );
+			iSndBuffer.Append( _L("\n") );
+			//=========================================================
+			// send the request
+			iTlsSocket->Send( iSndBuffer, iStatus );			
+			iRunState = ESendGetRequestPending;
+			SetActive();
+			return;
+
+	case ClientOOMTest::ESendGetRequestPending:
+
+			iTlsSocket->RecvOneOrMore( iRcvBuffer, iStatus, aLen );
+			iRunState = ERecvPagePending;
+			SetActive();
+			return;
+
+	case ClientOOMTest::ERecvPagePending:
+
+			iTlsSocket->Close();
+			iRunState = KErrNone;
+			iActiveScheduler->Stop();
+			return;
+
+	default:
+			User::Leave(KErrNotSupported);
+		}
+
+}
+