datacommsserver/esockserver/test/TS_MultiHoming/TS_MultiHomingStep.cpp
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/test/TS_MultiHoming/TS_MultiHomingStep.cpp	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,303 @@
+// Copyright (c) 2002-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:
+// This contains CTS_MultiHomingStep class which is
+// the base class for all the MultiHoming test steps
+// 
+//
+
+/**
+ @file
+*/
+#include "TS_MultiHomingStep.h"
+
+
+// Constructor
+CTS_MultiHomingStep::CTS_MultiHomingStep() : iIsOOMTest(EFalse)
+	{
+	}
+
+// Destructor
+CTS_MultiHomingStep::~CTS_MultiHomingStep()
+	{ 
+	}	
+
+TInt CTS_MultiHomingStep::GetConnectionType(TConnDetails *conn, TDesC& aName)
+	{
+		TPtrC ptrBuf;
+		TInt err = GetStringFromConfig(aName, KConnType, ptrBuf);
+
+		if(err != 1)
+		{
+			LogExtra((TText8*)__FILE__, __LINE__, ESevrWarn, KEConfigFile);
+			return err;
+		}
+
+
+		if(ptrBuf.Compare(KConnDefault) ==0)
+			conn->iConnectionType = TConnDetails::defaultConn;
+		else if(ptrBuf.Compare(KConnImplicit) ==0)
+			conn->iConnectionType = TConnDetails::implicitConn;
+		else if(ptrBuf.Compare(KConnExplicit) ==0)
+			conn->iConnectionType = TConnDetails::explicitConn;
+		else
+			{
+			_LIT(KTypeErr, "Connection type should be one of %S %S or %S");
+			LogExtra((TText8*)__FILE__, __LINE__, ESevrErr, KTypeErr, KConnExplicit, KConnImplicit, KConnDefault );
+			return KErrNotFound;
+			}
+		return KErrNone;			
+
+	}
+
+TInt CTS_MultiHomingStep::SetConnPrefs(TCommDbConnPref& aPrefs, TDesC& aName)
+/**
+ * Fills up a CStoreableOverrideSettings* with script file configs
+ * @param aPrefs A pointer to a CStoreableOverrideSettings object
+ * @param aName Name of the connection to get prefs for
+ * @return KErrNone if sucessful, otherwise system wide error codes
+ * @exception Can leave
+ */
+	{
+
+	TInt theIap = 0;
+	TInt theNet = 0;
+	// Get the IAP index and use it to complete the .ini file section name
+	if(GetIntFromConfig(aName, KConnIap, theIap))
+		{
+		aPrefs.SetIapId(theIap);		
+		}
+
+	if(GetIntFromConfig(aName, KConnNet, theNet))
+		{
+		aPrefs.SetNetId(theNet);
+		}
+	return KErrNone;
+	}
+
+
+TInt CTS_MultiHomingStep::GetSockConfig(const TInt aIndex, TInt& aProtocol,
+										TInt& aPackSize, TInt& aNumPackets,
+										TInt& aUdp, TInetAddr& aDstAddr, 
+										TInetAddr& aSrcAddr, 
+										TBool& aExpectSuccess,
+										TBool& aIsListener,
+										TConnDetails **aConnDetails)
+/**
+ * Gets socket configuration from file, using defaults if necessary
+ * @param aIndex The index for the socket configkey
+ * @param aProtocol The protocol to be used
+ * @param aPackSize The packet size in bytes
+ * @param aNumPackets Number of packets to send
+ * @param aUdp Percentage of UDP packets that can be dropped
+ * @param aAddr The destination address for the socket
+ * @param aSS The socket server sub-session to use for the socket
+ * @param aNetName The network connection name in the suite
+ * @return System wide error code
+ */
+	{
+	TInt err=KErrNone;
+	TInt val=0;
+	TBuf<10> socketNum;		// Create the Key for the config lookup
+	socketNum= KSocket;
+	socketNum.AppendNum(aIndex);
+	
+	TPtrC ptrBuf;
+
+
+	
+
+	// Port 0 means we dont care about binding to port
+
+	err = GetStringFromConfig(socketNum, KSrcAddr, ptrBuf);
+	if (err)
+		{
+		// String found in table
+		err = aSrcAddr.Input(ptrBuf);
+		TESTE(err==KErrNone,err);
+		if (err !=KErrNone)
+			{
+			iTestStepResult= EInconclusive;
+			return KErrBadName;
+			}
+		}
+		else 
+			aSrcAddr.SetAddress(KInetAddrAny);
+
+	err = GetIntFromConfig(socketNum, KSrcPort, val);
+	if (err)
+		aSrcAddr.SetPort((TUint) val);
+	else
+		aSrcAddr.SetPort(0);		// Default to zero - ie source address NOT uses
+	
+
+	err = GetStringFromConfig(socketNum, KDestAddr, ptrBuf);
+	if (!err)
+		{
+		LogExtra((TText8*)__FILE__, __LINE__, ESevrWarn, KEConfigFile);
+		iTestStepResult= EInconclusive;
+		return KErrNotFound;
+		}
+
+
+	err = aDstAddr.Input(ptrBuf);
+	TESTE(err==KErrNone,err);
+	if (err !=KErrNone)
+		{
+		iTestStepResult= EInconclusive;
+		return KErrBadName;
+		}
+
+	err = GetIntFromConfig(socketNum, KDestPort, val);
+	if (!err)
+		aDstAddr.SetPort(ECHO_PORT);		// Default to echo port
+	aDstAddr.SetPort((TUint) val);
+	
+	err = GetStringFromConfig(socketNum, KProtocol, ptrBuf);
+	if (err && (ptrBuf.Compare(KTcp)==0))
+		aProtocol = KProtocolInetTcp;
+	else
+		aProtocol = KProtocolInetUdp;
+	
+	err = GetIntFromConfig(socketNum, KPacketSize, val);
+	if (!err)
+		aPackSize=PACKET_SIZE;
+	aPackSize=val;
+	
+	err = GetIntFromConfig(socketNum, KNumOfPackets, val);
+	if (!err)
+		aNumPackets=NUM_OF_PACKETS;
+	aNumPackets=val;
+		
+	err = GetIntFromConfig(socketNum, KUdpTol, val);
+	if (!err)
+		aUdp=UDP_TOLERANCE;
+	aUdp=val;
+
+	aExpectSuccess = ETrue;
+	GetBoolFromConfig(socketNum, KExpectSuccess, aExpectSuccess);
+	
+	aIsListener = EFalse;
+	GetBoolFromConfig(socketNum, KIsListener, aIsListener);
+
+	err = GetStringFromConfig(socketNum, KConnName, ptrBuf);
+	if (!err)
+		{
+		LogExtra((TText8*)__FILE__, __LINE__, ESevrWarn, KEConfigFile);
+		iTestStepResult= EInconclusive;
+		return KErrNotFound;
+		}
+		// Use default
+
+	*aConnDetails = iOwnerSuite->GetTConnection(ptrBuf);								
+
+	return KErrNone;
+	}
+
+void CTS_MultiHomingStep::StepLog(TRefByValue<const TDesC16> aText, ...)
+/**
+ * Logging wrapper for CEchoSocket class
+ * @param aText Text for the Logging, with any other parameters
+ */
+	{
+	VA_LIST aList;
+	VA_START( aList, aText );
+
+	// Create a formated descriptor
+	TBuf <MAX_LOG_LINE_LENGTH> LineBuf;
+	LineBuf.AppendFormatList( aText, aList);
+
+	// Log to the suite's logger
+	iSuite->Log( _L("%S"),&LineBuf );
+
+	VA_END( aList ); 
+	}
+
+
+void CTS_MultiHomingStep::ExpLogExtra(const TText8* aFile, TInt aLine, TInt aSeverity,
+		TRefByValue<const TDesC> aFmt,...)
+	{
+	VA_LIST aList;
+	VA_START( aList, aFmt );
+
+
+	// Log to the suite's logger
+	iSuite->LogExtra( aFile, aLine, aSeverity, aFmt, aList );
+
+	VA_END( aList ); 
+
+	}
+
+
+TInt CTS_MultiHomingStep::GetResolverConfig(const TInt aIndex, TName &aHostName, TInt& aProtocol,																				 
+										TBool& aExpectSuccess, TBool& aExpectTimeout, TBool& aExpectNotReady, 
+										TBool& aExplicitResolve, TConnDetails **aConnDetails)
+/**
+ * Gets resolver configuration from file, using defaults if necessary
+ * @param aIndex The index for the socket configkey
+ * @param aHostName The host to be resolved
+ * @param aProtocol The protocol to be used
+ * @param aExpectSuccess Flag indicating if name should be resolved ok
+ * @param aExpectTimeout Flag indicating if name resolution should timeout
+ * @param aConnDetails The connection for an explicit resolver
+ * @return System wide error code
+ */
+	{
+	TInt err=KErrNone;	
+	TName resolverName;		// Create the Key for the config lookup
+	resolverName = KResolver;
+	resolverName.AppendNum(aIndex);
+	
+	TPtrC ptrBuf;
+	err = GetStringFromConfig(resolverName, KDestName, ptrBuf);
+	if (!err)
+		{
+		LogExtra((TText8*)__FILE__, __LINE__, ESevrWarn, KEConfigFile);
+		iTestStepResult= EInconclusive;
+		return KErrNotFound;
+		}
+	aHostName.Copy(ptrBuf.Ptr(), ptrBuf.Length());
+		
+	
+	aExpectSuccess = ETrue;
+	GetBoolFromConfig(resolverName, KExpectSuccess, aExpectSuccess);
+	
+	aExpectTimeout = EFalse;
+	GetBoolFromConfig(resolverName, KExpectTimeout, aExpectTimeout);
+
+	aExpectNotReady = EFalse;
+    GetBoolFromConfig(resolverName, KExpectNoDnsServer, aExpectNotReady);
+
+	aExplicitResolve = EFalse;
+	GetBoolFromConfig(resolverName, KExplicitResolve, aExplicitResolve);
+		
+
+	err = GetStringFromConfig(resolverName, KProtocol, ptrBuf);
+	if (err && (ptrBuf.Compare(KTcp)==0))
+		aProtocol = KProtocolInetTcp;
+	else
+		aProtocol = KProtocolInetUdp;	
+		
+	
+	err = GetStringFromConfig(resolverName, KConnName, ptrBuf);
+	if (!err)
+		{
+		return KErrNotFound;
+		}		
+
+	*aConnDetails = iOwnerSuite->GetTConnection(ptrBuf);								
+
+	return KErrNone;
+	}
+
+