networksecurity/tls/ts_tls/T_TLS_cntrl.cpp
changeset 0 af10295192d8
child 53 7e41d162e158
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networksecurity/tls/ts_tls/T_TLS_cntrl.cpp	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,301 @@
+// 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 "T_TLS_cntrl.h"
+
+//
+// Constructors
+//
+CController* CController::NewL()
+	{
+	CController* self = new(ELeave) CController;
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop();		
+	return self;
+	}
+
+void CController::ConstructL()
+	{
+
+	TInt i;
+
+	// Create the kernel side timer object
+	User::LeaveIfError( iTimer.CreateLocal() );
+	
+	// Create the array of CSSLTest objects
+	for ( i=0; i<KMaxSSLConnections; i++ )
+		{
+		User::LeaveIfNull( iTLSTest[i] = CTLSTest::NewL() );
+		}
+
+	// Add this object to the active scheduler
+	CActiveScheduler::Add( this );
+
+#ifdef NODIALOGS
+	// create a global semaphore that the dialog server searches for to
+	// decide if "trust" dialogs should be displayed or not
+	if ( iSemaphore.CreateGlobal( KSemaphoreName, 0 ) != KErrNone )
+		{
+		iTestStep->Log( _L("Semaphore creation failed.") );
+		}
+#endif
+	}
+
+
+//
+// Give the controller a slightly higher priority than normal
+//
+CController::CController() : CActive(1) 
+	{
+	}
+
+CController::~CController()
+/** 
+ * Destructor
+ */
+{
+	Cancel();
+
+#ifdef NODIALOGS
+	iSemaphore.Close();
+#endif
+
+	for ( TInt i=0; i<KMaxSSLConnections; i++ )
+		{
+		delete iTLSTest[i];	
+		}
+}
+
+
+void CController::Start( CTestStepTls * aTestStep )
+/**
+ * Start
+ */
+{
+	iTestStep = aTestStep;
+
+	for ( TInt i=0; i<KMaxSSLConnections; i++ )
+		{
+		iTLSTest[i]->SetConsole( iTestStep );
+		}
+
+	iRunState = EReadNextSite;
+
+	iTimer.After( iStatus, KControllerDelayTime );
+	SetActive();
+}
+
+
+void CController::RunL()
+/**
+ * RunL() method
+ */
+{
+	TInt i; // used as a loop counter
+	CActiveScheduler *currentScheduler;
+	TBool start = ETrue;
+	
+	TPtrC aPtrResult;
+	TPtrC* res=&aPtrResult;
+
+	switch( iRunState )
+	{
+	case EReadNextSite:
+		{	// try and read a site description from the file iAddress
+			if ( iTestStep->GetStringFromConfig(KSectionName, KCfgIPAddress, aPtrResult))
+				{
+				iAddress.Copy( aPtrResult );
+				}
+			else
+				{
+				iAddress.Copy( KDefCfgIPAddress );
+				}
+		
+			iTestStep->Log( _L("IPaddress: %S"), res);
+
+			// iDNSName
+			if ( iTestStep->GetStringFromConfig(KSectionName, KCfgDNSName, aPtrResult))
+				{
+				iDNSName.Copy( aPtrResult );
+				}
+			else
+				{
+				iDNSName.Copy( KDefCfgDNSName );
+				}
+		
+			iTestStep->Log( _L("DNSName: %S"), res);
+
+			// iPortNum
+			if (!iTestStep->GetIntFromConfig(KSectionName, KCfgIPPort, iPortNum ))
+				{
+				iPortNum = KDefCfgIPPort;
+				}
+		
+			iTestStep->Log( _L("PortNumber: %D"), iPortNum);
+
+			// iPage
+			if (iTestStep->GetStringFromConfig(KSectionName, KCfgPage, aPtrResult))
+				{
+				iPage.Copy( aPtrResult );
+				}
+			else
+				{
+				iPage.Copy( KDefCfgPage );
+				}
+		
+			iTestStep->Log( _L("Page: %S"), res);
+
+			// iCipher
+			if (!iTestStep->GetIntFromConfig(KSectionName, KCfgCipher, iCipher ))
+				{
+				iCipher = KDefCfgCipher;
+				}
+			iTestStep->Log( _L("Cipher: %D"), iCipher);
+
+			// iCipherSuites
+			if ( iTestStep->GetStringFromConfig(KSectionName, KCfgCipherSuites, aPtrResult))
+				{
+				iCipherSuites.Copy( aPtrResult );
+				}
+			else
+				{
+				iCipherSuites.Copy( KDefCfgCipherSuites );
+				}
+		
+			iTestStep->Log( _L("CipherSuites: %S"), res);
+
+			// iSimpleGet
+			if (!iTestStep->GetIntFromConfig(KSectionName, KCfgSimpleGet, iSimpleGet ))
+				{
+				iSimpleGet = KDefCfgSimpleGet;
+				}
+			iTestStep->Log( _L("SimpleGet: %D"), iSimpleGet);
+		
+			// iTestEndDelay
+			if (!iTestStep->GetIntFromConfig(KSectionName, KCfgTestEndDelay, iTestEndDelay ))
+				{
+				iTestEndDelay = KDefCfgTestEndDelay;
+				}
+			iTestStep->Log( _L("TestEndDelay: %D"), iTestEndDelay);
+	
+			// iProtocol
+			if ( iTestStep->GetStringFromConfig(KSectionName, KCfgProtocol, aPtrResult))
+				{
+				iProtocol.Copy( aPtrResult );
+				}
+			else
+				{
+				iProtocol.Copy( KDefCfgProtocol );
+				}
+			iTestStep->Log( _L("Protocol: %S"), res);
+
+			// iUseGenericSocket
+			if (!iTestStep->GetBoolFromConfig(KSectionName, KCfgUseGenericSocket, iUseGenericSocket ))
+				{
+				iUseGenericSocket = KDefUseGenericSocket;
+				}
+			iTestStep->Log( _L("UseGenericSocket: %D"), iUseGenericSocket);
+
+			// iEAPKeyDerivation
+			if (!iTestStep->GetBoolFromConfig(KSectionName, KCfgEAPKeyDerivation, iEAPKeyDerivation ))
+				{
+				iEAPKeyDerivation = KDefEAPKeyDerivation;
+				}
+			iTestStep->Log( _L("EAPKeyDerivation: %D"), iEAPKeyDerivation);
+
+			// On to next state 
+			iRunState = EFindFreeTest;			
+
+			iTimer.After( iStatus, KControllerDelayTime );
+			SetActive();
+			break;
+		} // case EReadNextSite
+	case EFindFreeTest:
+		{
+			// check if this server name and port is already being tested by an object
+			for ( i=0; i<KMaxSSLConnections; i++ )
+			{
+				if ( iTLSTest[i]->TestingSite( iAddress, iPortNum ) )
+				{
+					// This address and port is already being tested!
+					start = EFalse;
+					iRunState = EFindFreeTest;
+
+					iTestStep->Log( _L("Test active %d"), i );
+					break; // break from for loop
+				}
+			}
+		
+			if ( start )
+			{
+				// the server isnt already being tested, so test it!
+				for ( i=0; i<KMaxSSLConnections; i++ )
+				{
+					// find the first unused test object
+					if ( !iTLSTest[i]->InUse() )
+					{
+						// this test isn't active, so use it
+						TInt maxConnections = KMaxSSLConnections;
+						if ( maxConnections != 1 )
+							{
+							iTestStep->Log( _L("Using test object %d"), i );
+							}
+
+						iTLSTest[i]->ConnectL( iAddress, iPortNum, iPage, iCipherSuites, 
+							iCipher, iSimpleGet, iTestEndDelay, iDNSName, iProtocol, iUseGenericSocket, iEAPKeyDerivation );
+
+						iRunState = EWaitForComplete;
+						break; // break from the for loop
+					}
+				} // 'for' statement
+			} // 'if' statement
+
+			iTimer.After( iStatus, KControllerDelayTime );
+			SetActive();
+			break;
+		} // case EFreeTest
+	case EWaitForComplete:
+		{
+			iRunState = ETestCompleted;
+
+			for ( i=0; i<KMaxSSLConnections; i++ )
+			{
+				if ( iTLSTest[i]->InUse() )
+				{
+					iRunState = EWaitForComplete;
+					break; // break from the for loop
+				}
+			}
+
+			iTimer.After( iStatus, KControllerDelayTime );
+			SetActive();
+			break;
+		} // case EWaitForComplete
+	case ETestCompleted:
+		{	// All the tests are finished, so now stop the active scheduler
+			currentScheduler = CActiveScheduler::Current();
+			currentScheduler->Stop();
+			break;
+		} // case ETestCompleted
+	} // switch
+}
+	
+void CController::DoCancel()
+/**
+ * DoCancel
+ */
+{
+}