--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/test/TS_MultiHoming/TS_RConnectionStart.cpp Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,200 @@
+// 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 TS_MultiHoming RConnection Start primitive.
+// RConnection starts opens and starts a connection, and
+// stores this connection in C
+//
+//
+
+/**
+ @file
+*/
+
+
+#include "TS_RConnectionStart.h"
+#include <nifman.h>
+/*
+ * Test 1.1
+ * Open a default / named connection
+ */
+CTS_RConnectionStart::CTS_RConnectionStart()
+ {
+ iTestStepName = KRConnectionStart;
+ }
+
+CTS_RConnectionStart::~CTS_RConnectionStart()
+ {
+ }
+
+enum TVerdict CTS_RConnectionStart::doTestStepPreambleL(void)
+/**
+ * Implements OOM testing in each test
+ */
+ {
+ if (!(GetBoolFromConfig(KConnectionInfo,KOomTest,iIsOOMTest)))
+ iIsOOMTest=EFalse;
+ return EPass;
+ }
+
+
+enum TVerdict CTS_RConnectionStart::doTestStepL(void)
+/**
+ * Creates and starts one or more Explicit Connection(s)
+ * and appends it/them to the array of
+ * connections in the MultiHoming Suite
+ * @return The test step outcome.
+ *
+ */
+ {
+ TPtrC connPtr(KNameDefault);
+ TInt err = KErrNone;
+ TInt numOfConns = 0;
+ TBool expectSuccess = ETrue;
+
+ err = GetIntFromConfig(KConnectionInfo, KNumOfConns, numOfConns);
+
+
+ if (err != 1) // We have no config available, so end test
+ {
+ return EFail;
+ }
+
+
+ // Get Config Values
+
+ TBuf<10> keyName;
+
+ // Create Connection object(s)
+ for (TInt i=0; i < numOfConns; i++)
+ {
+ TConnDetails *myConn = iOwnerSuite->GetNewTConnection();
+ keyName = KConnName; //< Descriptor len is ok up to 99 connections...
+
+ keyName.AppendNum(i);
+ err = GetStringFromConfig(KConnectionInfo, keyName, connPtr);
+ if(err != 1)
+ {
+ LogExtra((TText8*)__FILE__, __LINE__, ESevrErr, KEConfigFile); // We must have the naming section, for >1 connection
+ return EFail;
+ }
+
+ myConn->iName.Copy(connPtr.Ptr(),connPtr.Length());
+
+ err = GetConnectionType(myConn, myConn->iName);
+ if(err != 0)
+ {
+ LogExtra((TText8*)__FILE__, __LINE__, ESevrErr, KEConfigFile); // We must have the naming section, for >1 connection
+ return EFail;
+ }
+
+
+ if(myConn->iConnectionType != TConnDetails::implicitConn)
+ {
+ err = myConn->iSocketServ.Connect();
+ TESTE(err==KErrNone,err);
+
+ err = myConn->iConnection.Open(myConn->iSocketServ, KAfInet);
+ TESTE(err==KErrNone,err);
+ }
+
+ // Find out if we're to use the notification API
+ // Ignore errors - dont care if this is missing
+ // No check necessary, as will stay false if fails.
+ err = SetConnPrefs(myConn->iConnPrefs, connPtr);
+
+ expectSuccess = -1;
+ if(err != 0)
+ {
+ TPtrC errorText = EpocErrorToText(err);
+ LogExtra((TText8*)__FILE__, __LINE__, ESevrInfo, KELogger, &errorText);
+ return EFail;
+ }
+
+ GetBoolFromConfig(connPtr, KExpectSuccess, expectSuccess);
+
+
+ if(myConn->iConnectionType == TConnDetails::explicitConn)
+ {
+ err = myConn->iConnection.Start(myConn->iConnPrefs);
+ }
+ else if(myConn->iConnectionType == TConnDetails::defaultConn)
+ {
+ err = myConn->iConnection.Start();
+ }
+ else
+ {
+ TUint protocol = KProtocolInetUdp;
+
+ err = myConn->iSocketServ.Connect();
+ TESTE(err==KErrNone,err);
+
+ // Get the protocol field and open the socke
+ err = myConn->iSocket.Open(myConn->iSocketServ, KAfInet, KSockDatagram, protocol);
+ // Bind the socket, as if this is a server to open the connection
+ TInetAddr localAddr;
+ localAddr.SetAddress(KInetAddrAny);
+ localAddr.SetPort(6666 + i); // source port = 666 + conn num
+
+ myConn->iSocket.SetOpt(KSoReuseAddr, KSolInetIp, 1);
+
+ err = myConn->iSocket.Bind(localAddr);
+
+ TInetAddr destAddr;
+
+ destAddr.SetAddress(INET_ADDR(192, 168, 1, 255));
+ destAddr.SetPort(500); // destination port....
+
+ TRequestStatus status;
+
+ TBuf8<32> buffer;
+
+ // build some data to send on the socket
+ buffer.SetMax();
+ buffer.FillZ();
+ myConn->iSocket.SendTo(buffer, destAddr, 0, status);
+ User::WaitForRequest(status);
+ err = status.Int();
+ }
+
+ TESTE(err == KErrNone && expectSuccess
+ || err == KErrNone && !expectSuccess, err);
+
+
+ if (err==KErrNone) // If we got this far without errors, we have an open connection
+ {
+ // Insert into array
+ if(myConn->iConnectionType != TConnDetails::implicitConn)
+ {
+// myConn->iConnection.SetOpt(KCOLProvider, KConnDisableTimers, ETrue);
+ }
+ else
+ {
+ myConn->iSocket.SetOpt(KCOLProvider, KConnDisableTimers, ETrue);
+ }
+ LogExtra((TText8*)__FILE__, __LINE__, ESevrInfo, KConnXInsert, &(myConn->iName));
+ }
+ else
+ {
+
+ TPtrC errorText = EpocErrorToText(err);
+ LogExtra((TText8*)__FILE__, __LINE__, ESevrInfo, KConnXFail, &(myConn->iName), &errorText);
+ myConn->iName.Zero();
+ // CLog::EpocErrorToText(err));
+ }
+
+ } // for (<numOfConns>)
+ return iTestStepResult;
+ }
+
+