networkprotocols/dnsproxy/dnsproxyserver/src/dnsproxydb.cpp
changeset 0 af10295192d8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkprotocols/dnsproxy/dnsproxyserver/src/dnsproxydb.cpp	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,208 @@
+// 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:
+// This class represents the database in the form of array
+//
+
+
+
+/**
+ @file
+ @internalTechnology
+*/
+#include <e32debug.h>
+#include <cflog.h>
+#include "dnsproxydb.h"
+#include "dnsproxyengine.h"
+#include "inet6log.h"
+#include "dnsproxylog.h"
+
+//
+CDnsProxyDb* CDnsProxyDb::iDbObject= NULL;
+
+CDnsProxyDb* CDnsProxyDb::CreateInstanceL(CDnsProxyEngine& aEngine)
+/**
+ * Creates the single object everytime
+ * @return iDbObject- reference to CDnsProxyDb;
+ *
+ * @internalTechnology
+ **/
+	{
+	if(!iDbObject)
+		{
+		iDbObject = new(ELeave)CDnsProxyDb(aEngine);
+		}
+	return iDbObject;
+	}
+
+CDnsProxyDb::CDnsProxyDb(CDnsProxyEngine& aEngine):iEngine(aEngine)
+/**
+ * Constructor
+ *
+ * @internalTechnology
+ **/
+
+	{
+	}
+
+CDnsProxyDb::~CDnsProxyDb()
+/**
+ * Destructor
+ *
+ * @internalTechnology
+ **/
+	{
+	Cleanup();
+	}
+
+void CDnsProxyDb::UpdateDbL(const TDesC8& aHostName,TInetAddr& aHostAddr)
+/**
+ * Updates the DB with HostName and Host Address
+ * @param aHostName - Host Name
+ * @param aHostAddr - Host Address
+ *
+ * @internalTechnology
+ **/
+	{
+	
+	TDnsProxydbElement* aDbElement = new TDnsProxydbElement;
+	aDbElement->iHostName.Copy(aHostName);
+	aDbElement->iHostAddr = aHostAddr ;
+	iElementList.AppendL(aDbElement);
+	}
+
+TDnsProxydbElement* CDnsProxyDb::GetRecordList(const TDesC8& aQName)
+/**
+ * Returns the array of TDnsProxydbElement object having same name as that of QueryName
+ * @param  aName- Query Name to be searched in db
+ * @return element - returns the reference to TDnsProxydbElement
+ *
+ * @internalTechnology
+ **/
+	{
+	TBool flag = EFalse;
+	TDnsProxydbElement* element = NULL;
+	for(TInt i =0;i<iElementList.Count();i++)
+		{
+		 if(iElementList[i])
+			{
+			flag = CompareNames(iElementList[i]->iHostName,aQName);
+			if(flag)
+				{
+				element = iElementList[i];
+				break;
+				}
+			}
+		}
+	return element;	
+	}
+
+void CDnsProxyDb::AddRRecord(TDnsProxydbElement& aElementList,const TDesC8& aRRecord,TUint16 aDnsQType)
+/**
+ * Adds record into db
+ * @param aElementList - associates with record to be inserted into db
+ * @param aRRecord - record to be added into db which may be of type AN or NS
+ * @param aFlag - which will indicate type of record like NS or AN
+ * @internalTechnology
+ **/
+	{
+	aElementList.iRecord.Copy(aRRecord);
+	aElementList.iDnsQType = aDnsQType;
+	}
+
+void CDnsProxyDb::Cleanup()
+/**
+ * Destroys all the obejcts  present in the array list and empties it
+ * @internalTechnology
+ **/
+	{
+	iElementList.ResetAndDestroy();
+	}
+TDnsProxydbElement* CDnsProxyDb::FindIpAddress(TInetAddr& aAddr)
+/**
+ * Finds specified entry from db based on IP address
+ * @param aAddr - TInetAddress
+ * @return dbelement - pointer to TDnsProxydbElement class
+ *
+ * @internalTechnology
+ **/
+	{
+					
+	TDnsProxydbElement* dbelement = NULL;
+	for(TInt i = 0;i < iElementList.Count();i++)
+		{
+
+		if(iElementList[i])
+			{
+			if(aAddr.Match(iElementList[i]->iHostAddr))
+				{
+				dbelement = iElementList[i];
+				break;
+				}
+			}
+		}
+	
+	return dbelement;	
+	}
+
+void CDnsProxyDb::DeleteDbEntry(TInetAddr& aAddr)
+/**
+ * Deletes specified entry from db based on IP address
+ * @return TBool - returns ETrue if it is successful otherwise EFalse
+ *
+ * @internalTechnology
+ **/
+	{
+	for(TInt i =0;i<iElementList.Count();i++)
+		{
+		if(iElementList[i])
+			{
+
+			TInetAddr ipaddr = iElementList[i]->iHostAddr;
+			if(ipaddr.Match(aAddr))
+				{
+				delete iElementList[i];
+				iElementList[i] = NULL;
+				iElementList.Remove(i);
+    			iElementList.Compress();
+				}
+			}
+		}
+	}
+
+TBool CDnsProxyDb::CompareNames(const TDesC8& aHostName,const TDesC8& aQueryName)
+/**
+ * Compare Query Name with Host Name present in db
+ * @param aHostName - Host name retrived from db
+ * @param aQueryName - Query name to be compared with Host Name
+ * @return TBool - ETrue if it sucessful otherwise EFalse
+ *
+ * @internalTechnology
+ **/
+	{
+	TInt ret_val = aHostName.Compare(aQueryName);
+	if(ret_val==0)
+		return ETrue;
+	return EFalse;
+	}
+
+TInt CDnsProxyDb::GetDbSize()
+/**
+ * Retunrs the current size of the db
+ * @return size - current size of db
+ *
+ * @internalTechnology
+ **/
+	{
+	return iElementList.Count();
+	}