diff -r 000000000000 -r af10295192d8 tcpiputils/dhcp/te_unittest/dhcpservtest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tcpiputils/dhcp/te_unittest/dhcpservtest.cpp Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,209 @@ +// Copyright (c) 2008-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: +// + +/** + @file + @internalTechnology +*/ + +#include +#include +#include +#include +#include +#include +#include +#include "es_enum.h" +#include +#include +#include "dhcpstatesdebug.h" + +/** + * MAC address length + */ + const TInt KMacAddrLength = 6; + +/** + * Variables used to configure the DHCP server. + * + * @internalTechnology + */ +TText8 KReset[KMacAddrLength]= {0x00,0x00,0x00,0x00,0x00,0x00}; +TText8 KAny[KMacAddrLength]= {0xff,0xff,0xff,0xff,0xff,0xff}; +//This value has to be changed by user and recompile this code. The value is the MAC address of +//the machine for which DHCP server has to provide the IP. +TText8 KCurrent[KMacAddrLength]= {0x04,0x13,0x21,0xca,0x78,0xde}; + +/** + * Console pointer to display the help and application response. + * + * @internalTechnology + */ +CConsoleBase *gConsole; + +/** + * Function to load the DHCP server. + * + * @internalTechnology + * @param socketServer - client side session of Socket server + * @param aDhcpServConnection - RConnection to load and configure DHCP server. + * @return - returns if there are any error, otherwise KErrNone. + */ +TInt LaunchDhcpServ(RSocketServ& socketServer, RConnection& aDhcpServConnection) + { + + TInt err(KErrNone); + //Open a subsession with the socket server for the RConnection + err = aDhcpServConnection.Open(socketServer); + if(err != KErrNone) return err; + + TCommDbConnPref prefs; + prefs.SetIapId(12); //IAP 12 is used to launch the DHCP server. + prefs.SetDialogPreference(ECommDbDialogPrefDoNotPrompt); + + TRequestStatus status; + aDhcpServConnection.Start(prefs, status); //Loads the DHCP server, if the provided configuration is perfect. + User::WaitForRequest(status); + gConsole->Printf(_L("aDhcpServConnection. Start Status %d\n"), status.Int()); + if(status.Int() != KErrNone) return status.Int(); + return KErrNone; + } + +/** + * Function to configure DHCP with the received aHwAddr. + * + * @internalTechnology + * @param aDhcpServConnection - RConnection to load and configure DHCP server. + * @param aHwAddr - Hardware address. + * @return - returns if there are any error, otherwise KErrNone. + */ +TInt ProvisionDhcpServ(RConnection& aDhcpServConnection, TText8* aHwAddr) + { + TRequestStatus status; + TBuf8 address = TPtrC8(&aHwAddr[0],KMacAddrLength); + aDhcpServConnection.Ioctl(KCOLConfiguration, KConnDhcpSetHwAddressParams, status, &address); + User::WaitForRequest(status); + return status.Int(); + } + +/** + * Function to stop DHCP server. + * + * @internalTechnology + * @param aDhcpServConnection - RConnection associated with DHCP server. + */ +void StopInterfacesL(RConnection& aConnection) + { + User::LeaveIfError(aConnection.Stop()); + aConnection.Close(); + } + +/** + * Function to stop DHCP server. + * + * @internalTechnology + * @param aDhcpServConnection - RConnection associated with DHCP server. + */ +TInt TestAddressProvisioningL(CConsoleBase* gConsole) + { +#ifdef _DEBUG + User::LeaveIfError(RProperty::Set(KMyPropertyCat, KMyPropertyDestPortv4, 118)); +#endif + + RSocketServ socketServer; + TInt err(KErrNone); + err = socketServer.Connect(); + if (err != KErrNone) return err; + + RConnection myDhcpServConnection; + err = LaunchDhcpServ(socketServer, myDhcpServConnection); + if (err != KErrNone) return err; + TBool done = EFalse; + while (!done) + { + // Get user command from menu + gConsole->ClearScreen(); + _LIT(KSelectOption, " Select an option \n\n"); + gConsole->Printf(KSelectOption); + _LIT(KPossibleSelectionsText, " 1 KAny \n 2 KRest \n 3 Provision \n 4 NoProvisioning \n 5 Quit \n"); + gConsole->Printf(KPossibleSelectionsText); + TKeyCode key = gConsole->Getch(); + switch (key) + { + case '1': + err = ProvisionDhcpServ(myDhcpServConnection, KAny); + if (err != KErrNone) return err; + gConsole->Printf(_L("DHCP server is in ANY mode.\n")); + break; + case '2': + err = ProvisionDhcpServ(myDhcpServConnection, KReset); + if (err != KErrNone) return err; + gConsole->Printf(_L("DHCP server is in RESET mode.\n")); + break; + case '3': + err = ProvisionDhcpServ(myDhcpServConnection, KCurrent); + if (err != KErrNone) return err; + gConsole->Printf(_L("DHCP server is in SPECIFIC mode.\n")); + break; + case '4': + err = ProvisionDhcpServ(myDhcpServConnection, KReset); + if (err != KErrNone) return err; + gConsole->Printf(_L("DHCP server is in RESET mode.\n")); + break; + case '5': + done = ETrue; + break; + default: + break; + } + gConsole->Printf(_L("Press any key to next.\n")); + gConsole->Getch(); + } // while + + StopInterfacesL(myDhcpServConnection); + gConsole->Printf(_L("Basic DHCP testing finished .....\n")); + return KErrNone; + } + +/** + * Function to triggers the test cases. + * + * @internalTechnology + * @return - Returns error if any, otherwise KErrNone. + */ +TInt TestConsoleL() + { + gConsole = Console::NewL(_L("PREQ1872 DHCP Unit Test Console"), TSize(KConsFullScreen, KConsFullScreen)); + CleanupStack::PushL(gConsole); + TInt err = TestAddressProvisioningL(gConsole); + CleanupStack::PopAndDestroy(gConsole); + return err; + } + +/** + * Main function + * + * @internalTechnology + * @return - Returns 0. + */ +GLDEF_C TInt E32Main() + { + __UHEAP_MARK; + CTrapCleanup * trap = CTrapCleanup::New(); + TRAPD(err,TestConsoleL()); + delete trap; + __UHEAP_MARKEND; + return err; + }