networkingtestandutils/networkingintegrationtest/Te_Msg/src/TeMsgStep.cpp
changeset 0 af10295192d8
child 39 45fd446095e6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingtestandutils/networkingintegrationtest/Te_Msg/src/TeMsgStep.cpp	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,311 @@
+// 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:
+// Example CTestStep derived implementation
+// 
+//
+
+/**
+ @file
+*/
+#include "TeMsgStep.h"
+#include "TeMsgSecureSocket.h"
+
+//EPOC includes
+#include <test/testexecutelog.h>
+#include <es_sock.h>
+#include <in_sock.h>
+#include <c32root.h>
+#include <commdbconnpref.h>
+#include <e32std.h>
+#include <securesocket.h>
+
+
+_LIT(KIap,					"Iap");
+_LIT(KIapNumber,			"IapNumber");
+_LIT(KTCPConfig,			"TCP Config");
+_LIT(KHostName,				"HostName");
+_LIT(KPort,					"Port");
+_LIT(KDNSName,				"DNSName"); 
+_LIT(KPhbkSyncCMI,			"phbsync.cmi");
+
+#if defined (__WINS__)
+#define PDD_NAME _L("ECDRV")
+#define LDD_NAME _L("ECOMM")
+#else
+#define PDD_NAME _L("EUART1")
+#define LDD_NAME _L("ECOMM")
+#endif
+
+const TInt iapCount = 2;
+
+CTestConnectStep::CTestConnectStep():iIapNumber(0), iPort(0), iScheduler(NULL)
+/**
+ * Constructor
+ */
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KConnectWithOverrides);
+	}
+
+CTestConnectStep::~CTestConnectStep()
+/**
+ * Destructor
+ */
+	{
+	iConnection.Stop();
+	iConnection.Close();
+	iSocketServ.Close();
+	}
+
+TVerdict CTestConnectStep::doTestStepPreambleL()
+	{
+	TVerdict	ret = CTestStep::doTestStepPreambleL();
+	
+	if (ret != KErrNone)
+		{
+		SetTestStepResult(EFail);
+		}
+	else
+		{
+		iScheduler = new CActiveScheduler();
+		CActiveScheduler::Install(iScheduler);
+		INFO_PRINTF1(_L("Load PDD"));	
+		TInt err = User::LoadPhysicalDevice(PDD_NAME);
+		if (err != KErrNone && err != KErrAlreadyExists)
+			{
+			INFO_PRINTF2(_L("Could not load PDD! Leaving with error %d"), err);
+			SetTestStepResult(EFail);
+			User::Leave(err);
+			}
+
+		INFO_PRINTF1(_L("Load LDD"));	
+		err = User::LoadLogicalDevice(LDD_NAME);
+		if (err != KErrNone && err != KErrAlreadyExists)
+			{
+			INFO_PRINTF2(_L("Could not load LDD! Leaving with error %d"), err);
+			SetTestStepResult(EFail);
+			User::Leave(err);
+			}
+		}
+	return ret;
+	}
+
+TVerdict CTestConnectStep::doTestStepPostambleL()
+	{
+	delete iScheduler;
+	iScheduler=NULL;
+	CActiveScheduler::Install(NULL);
+	return CTestStep::doTestStepPostambleL();
+	}
+
+
+TVerdict CTestConnectStep::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * Demonstrates reading configuration parameters fom an ini file section
+ */
+	{
+	if(TestStepResult()==EPass)
+		{
+		INFO_PRINTF1(_L("In Test Step ConnectWithOverrides"));
+		// When bootstrapping C32 we have to avoid the PhBkSyncServer being started, since
+ 		// it needs a different CommDB
+		TInt ret = StartC32WithCMISuppressions(KPhbkSyncCMI);
+		
+		if((ret!=KErrNone) && (ret!=KErrAlreadyExists))
+			{
+			INFO_PRINTF2(_L("error is : %d \n"),ret);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Started C32\n"));
+			}
+
+		RHostResolver hr;
+
+		INFO_PRINTF1(_L("Connect to RSocketServ"));			
+		User::LeaveIfError(iSocketServ.Connect());
+
+		// Set up the connections, both overridden as host resolver won't work 
+		// on the default interface
+		INFO_PRINTF1(_L("Open the RConnection interface"));			
+		User::LeaveIfError(iConnection.Open(iSocketServ));
+
+		// get the IapNumber value from the ini file
+		if(!GetIntFromConfig(ConfigSection(), KIapNumber, iIapNumber))
+			{
+			if(!GetIntFromConfig(KIap, KIapNumber, iIapNumber))
+				{
+				iIapNumber=1;
+				INFO_PRINTF1(_L("Failed to read Iap from ini file, using default"));
+				}
+			}
+		INFO_PRINTF2((_L("IapNumber = %d")), iIapNumber);
+
+		TRequestStatus status;
+
+		TInt rank = 1;
+
+		// Create a multiple connection preference object
+		TCommDbMultiConnPref prefs;
+
+		for(TInt i=0;i<iapCount;i++)
+			{
+			TCommDbConnPref pref;
+			// Set the direction
+			pref.SetDirection(ECommDbConnectionDirectionOutgoing);
+			// Set the bear ser
+			pref.SetBearerSet(KCommDbBearerPSD | KCommDbBearerCSD);
+			// Set the IAP
+			pref.SetIapId(iIapNumber + i);
+			// Set the dialog preference to Do Not Prompt
+			pref.SetDialogPreference(ECommDbDialogPrefDoNotPrompt);
+			// Set the rank
+			User::LeaveIfError(prefs.SetPreference(rank, pref));
+
+			rank++;
+			}
+
+		prefs.SetConnectionAttempts(rank-1);
+
+		// Start the connection
+		iConnection.Start(prefs, status);
+
+		
+		User::WaitForRequest(status);
+
+		TInt result = status.Int();
+
+		if(result!=KErrNone)
+			{
+			ERR_PRINTF2(_L("Failed to start connection. Error %d"), result);
+			SetTestStepResult(EFail);
+			User::Leave(EFail);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Connection started with overrides"));
+			}
+
+		// Set up the host resolver
+		INFO_PRINTF1(_L("Initialise a host resolver service"));			
+		User::LeaveIfError(hr.Open(iSocketServ, KAfInet, KProtocolInetTcp, iConnection));
+		CleanupClosePushL(hr);
+
+
+		// Test the interfaces conn, host resolution should work ok
+		TBuf<64> hostname;
+		TRequestStatus status1;
+		TNameEntry nameEntry;
+
+		TPtrC temphost;
+		if(GetStringFromConfig(KTCPConfig, KHostName, temphost))
+			{
+			INFO_PRINTF2(_L("Hostname is : %S"), &temphost);
+			}
+		else
+			{
+			ERR_PRINTF1(_L("No hostname"));
+			SetTestStepResult(EFail);
+			User::Leave(EFail);
+			}
+		hostname = temphost;
+
+		hr.GetByName(hostname, nameEntry, status1);
+		User::WaitForRequest(status1);
+
+		TInt result1 = status1.Int();
+
+		if(result1!=KErrNone)
+			{
+			ERR_PRINTF2(_L("Failed to resolve the name. Error %d"), result1);
+			SetTestStepResult(EFail);
+			User::Leave(EFail);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Resolved the name successfully"));
+			}
+
+		// open socket
+		INFO_PRINTF1(_L("Open the socket"));			
+		User::LeaveIfError(iSocket.Open(iSocketServ, KAfInet, KSockStream, KProtocolInetTcp, iConnection));
+		CleanupClosePushL(iSocket);
+
+		// print the host resolver's ip address
+		TInetAddr inetAddr;
+		inetAddr = TInetAddr(nameEntry().iAddr);
+		TBuf<50> addr;
+		inetAddr.Output(addr);
+		INFO_PRINTF2(_L("The host resolver's ip address is: %S"), &addr);
+		
+		// get the port number from the ini file
+		if(!GetIntFromConfig(KTCPConfig, KPort, iPort))
+			{
+			ERR_PRINTF1(_L("Failed to read Port from ini file"));
+			SetTestStepResult(EFail);
+			User::Leave(EFail);
+			}
+		INFO_PRINTF2((_L("Port = %d")), iPort);
+
+		// connect to the socket
+		inetAddr.SetPort(iPort);
+		//nameEntry().iAddr.SetPort(iPort);
+		TRequestStatus status2;
+		//iSocket.Connect(nameEntry().iAddr,status2);
+		iSocket.Connect(inetAddr,status2);
+		User::WaitForRequest(status2);
+
+		TInt result2 = status2.Int();
+
+		if(result2!=KErrNone)
+			{
+			ERR_PRINTF2(_L("Failed to connect to the socket. Error %d"), result2);
+			SetTestStepResult(EFail);
+			User::Leave(EFail);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Connect to the socket successfully"));
+			}
+
+
+		TPtrC ptrDNSName;
+		if(GetStringFromConfig(KTCPConfig, KDNSName, ptrDNSName))
+			{
+			INFO_PRINTF2(_L("DNSName is : %S"), &ptrDNSName);
+			}
+		else
+			{
+			ERR_PRINTF1(_L("No DNSName"));
+			SetTestStepResult(EFail);
+			User::Leave(EFail);
+			}
+		TBuf8<256>	bufDnsName;
+		bufDnsName.Copy(ptrDNSName);
+
+		// connect to the secure socket
+		CTestSecureSocket* iTestSecureSocket = CTestSecureSocket::NewL(*this, iSocket, bufDnsName);
+		CleanupStack::PushL(iTestSecureSocket);
+		iTestSecureSocket->StartHandshake();
+		CActiveScheduler::Start();
+
+		CleanupStack::PopAndDestroy(3); //iTestSecureSocket, iSocket, hr
+		}
+	
+	return TestStepResult();
+	}
+
+