diff -r 000000000000 -r af10295192d8 networkprotocols/dnsproxy/dnsproxyserver/src/dnsproxydb.cpp --- /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 +#include +#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;iiHostName,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;iiHostAddr; + 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(); + }