tcpiputils/dhcp/src/dhcphwaddrmanager.cpp
changeset 0 af10295192d8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tcpiputils/dhcp/src/dhcphwaddrmanager.cpp	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,129 @@
+// 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:
+// MacTableManager.cpp
+// Hardware address manager class implementation.
+// 
+//
+
+/**
+ @file
+ @internalTechnology
+*/
+#include "dhcphwaddrmanager.h"
+
+  /**
+  * Constants used to compare with the received hardware address. Macro __GNUC__ is defined to 
+  * gccxml build error "value too large for type 'long'" avoid the error, though it can expand 
+  * the 'Uint64' to 'long long unsigned int'
+  *
+  *	@internalTechnology
+  */
+#ifdef __GNUC__
+const Uint64 KAnyMac = 0xFF;
+const Uint64 KResetMac = 0x00;
+#else
+const Uint64 KAnyMac = 0xFFFFFFFFFFFF;
+const Uint64 KResetMac = 0x000000000000;
+#endif //__GNUC__
+
+/**
+  * Constructor
+  *
+  *	@internalTechnology
+  *
+  */
+CDhcpHwAddrManager::CDhcpHwAddrManager()
+	{
+		
+	}
+
+/**
+  * Destructor frees the list
+  *
+  *	@internalTechnology
+  *
+  */
+CDhcpHwAddrManager::~CDhcpHwAddrManager()
+	{
+	iHardwareAddressList.Close();
+	}
+
+/**
+  * Static function to create the instance of CDhcpHwAddrManager.
+  *
+  *	@internalTechnology
+  *
+  */
+CDhcpHwAddrManager* CDhcpHwAddrManager::NewL()
+	{
+	return new (ELeave) CDhcpHwAddrManager();
+	}
+
+/**
+  * Function to check that atleast any one of the harware address is provisioned or not. 
+  *
+  *	@internalTechnology
+  * @return - ETrue if the list has at least one entry, otherwise EFalse.
+  */
+TBool CDhcpHwAddrManager::IsHwAddressProvisioned()
+	{
+	return (iHardwareAddressList.Count() > 0) ? ETrue : EFalse;
+	}
+
+/**
+  * Function inserts the provided Hardware Address into RArray. If the received address (KResetMac)
+  * is to reset the iHardwareAddressList, then clears the list.
+  *
+  *	@internalTechnology
+  * @param aInt - 48 bits of hardware address.
+  */
+void CDhcpHwAddrManager::Insert(const Uint64& aInt)
+	{
+	if(aInt == KResetMac)
+		{
+		iHardwareAddressList.Close();
+		return;
+		}
+	TInt index = iHardwareAddressList.Find(aInt, TIdentityRelation<Uint64>());
+	if(index == KErrNotFound)
+		{
+		iHardwareAddressList.Append(aInt);
+		}
+	}
+
+/**
+  * Function identfies whether the received Hardware Address is Provisioned by the control 
+  * application or not.
+  *
+  *	@internalTechnology
+  * @param aInt - 48 bits of hardware address.
+  * @return - ETrue, if the received address exists in the list, otherwise EFalse.
+  */
+TBool CDhcpHwAddrManager::Provisioned(const Uint64& aInt)
+	{	
+	
+	return  ( iHardwareAddressList.Find(aInt, TIdentityRelation<Uint64>()) == KErrNotFound )? EFalse : ETrue;
+	}
+
+/**
+  * Function identfies whether the DHCP server shall provide IP to any client or not.
+  * If the provided hardware address is KAnyMac, then DHCP assigns IP in FCFS basis.
+  *
+  *	@internalTechnology
+  * @return - ETrue if the application provides KAnyMac to DHCP server, otherwise EFlase.
+  */
+TBool CDhcpHwAddrManager::IsAnyClientAllowed()
+	{
+	return  ( iHardwareAddressList.Find(KAnyMac, TIdentityRelation<Uint64>()) == KErrNotFound )? EFalse : ETrue;
+	}