tcpiputils/networkaddressandporttranslation/src/naptconfigtable.cpp
changeset 0 af10295192d8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tcpiputils/networkaddressandporttranslation/src/naptconfigtable.cpp	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,216 @@
+// 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:
+// implementation of UDP and TCP tranlation
+// 
+//
+
+/**
+ @file
+ @internalTechnology 
+*/
+
+
+#include "hookdefs.h"
+#include "naptinterface.h"
+#include "naptutil.h"
+#include "naptconfigtable.h"
+
+void CNaptClientConfigMgr::ConstructL()
+/** 
+ * This is a phase2 constructor for this object.
+ * @param None
+ * @return None
+ * 
+ **/
+	{
+	
+	}	
+		
+CNaptClientConfigMgr :: CNaptClientConfigMgr(CProtocolNapt& aProtocol):iProtocol(aProtocol)
+/** 
+ * This is a constructor for config manager class.
+ * @param None
+ * @return None
+ * 
+ **/
+	{
+	
+	}
+
+CNaptClientConfigMgr :: ~CNaptClientConfigMgr()
+/** 
+ * This is a destructor for config manager class.
+ * @param None
+ * @return None
+ * 
+ **/
+	{
+	iConfigList.ResetAndDestroy();
+	}
+
+CNaptClientConfigMgr* CNaptClientConfigMgr::NewL(CProtocolNapt& aProtocol)
+/** 
+ * This is a static method to create an instance of CNaptClientConfigMgr class
+ * @param CProtocolNapt& - Reference to protocol instance object
+ * @return CNaptClientConfigMgr* - Pointer to created object intance
+ * 
+ **/
+	{
+	CNaptClientConfigMgr* self = new(ELeave) CNaptClientConfigMgr(aProtocol);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+	
+
+TNaptConfigInfo* CNaptClientConfigMgr :: FindConfig(TUint32 aIfIndex, TInt aIfFlag)
+/** 
+ * This method finds a configuration from config list based on interface index or private IAP.
+ * @param aIfIndex - Interface index
+ * @return None
+ * 
+ **/
+	{
+	TNaptConfigInfo* cinfo = NULL;
+	TUint32 ifindex = 0;
+	/*Loop through the list to find an entry corresponding to aIapId*/
+	for(TUint index = 0; index < iConfigList.Count(); index++)
+		{
+		(aIfFlag)?(ifindex = iConfigList[index]->iIfIndex):(ifindex = iConfigList[index]->iPrivateIap);
+		if(ifindex != aIfIndex)
+			continue;
+		else
+			{
+			/*Found a matching entry here so break out of the loop*/
+			cinfo = iConfigList[index];
+			break;	
+			}
+			
+		}
+		/*return configuration info*/
+		return cinfo;
+	}
+	
+void CNaptClientConfigMgr :: DeleteConfig(TUint32 aIapId)
+/** 
+ * This method deletes a configuration from config list based on IAP Id.
+ * @param aIapId - IAP Identifier
+ * @return None
+ * 
+ **/
+	{
+	/*Loop through the list to find an entry corresponding to aIapId*/
+	for(TUint index = 0; index < iConfigList.Count(); index++)
+		{
+		if(iConfigList[index]->iPrivateIap != aIapId)
+			continue;
+		else
+			{
+			/*Found a matching entry here so break out of the loop*/
+			delete iConfigList[index];
+			iConfigList[index] = NULL;
+			iConfigList.Remove(index);
+			break;	
+			}
+        }
+        iConfigList.Compress();
+	}
+
+void CNaptClientConfigMgr :: DeleteConfig(TNaptConfigInfo *aConfigInfo)
+/** 
+ * This method deletes a configuration from config list using a pointer
+ * @param aIfIndex - Interface index
+ * @return None
+ * 
+ **/
+	{
+	TInt index = iConfigList.Find(aConfigInfo);
+	if(index != KErrNotFound)
+		{
+		delete iConfigList[index];
+		iConfigList[index] = NULL;
+		iConfigList.Remove(index);
+		iConfigList.Compress();
+		}
+		
+	}
+
+
+TInt CNaptClientConfigMgr::UpdateConfigL(const TInterfaceLockInfo* aInfo, CSapNapt* aSap)
+/** 
+ * This method updates the configuration in the list. In case configuration is already present it updates
+ * the existing configuration corresponsing to interface index else it creates a new config and adds it
+ * the configuration list.
+ * @param const TInterfaceLockInfo* aInfo - Interface structure used for provisioning info
+ * @param CSapNapt* - Pointer to SAP thru which provisioning is being done.
+ * @return TInt - KErrNone in case of success.
+ * 
+ **/
+	{
+	
+	TInt err = KErrNone;
+	TNaptConfigInfo* cinfo = NULL;
+	
+	if(aInfo != NULL)
+		{
+		cinfo = aSap->GetConfigInfo();
+		if(cinfo == NULL)
+			{
+			cinfo = FindConfig(aInfo->iIfIndex);
+			if(!cinfo)
+				cinfo = new(ELeave)TNaptConfigInfo;
+			else
+				{
+				//Interface Index is already in Use, aborting operation
+				err = KErrAbort;
+				return err;
+				}
+			}
+			//cinfo is initialized above, hence Pointer NULL check is not required here.
+			cinfo->iPublicIap = aInfo->iPublicIap;
+			cinfo->iPrivateIap = aInfo->iPrivateIap;
+			TInetAddr::Cast(cinfo->iPublicGatewayIP).SetV4MappedAddress((aInfo->iPublicIp).Address());
+			TInetAddr::Cast(cinfo->iPrivateIp).SetV4MappedAddress((aInfo->iPrivateIp).Address());
+			//converting masklength to v6 mapped.So it will be 128-8 for class A, 128-16 for class B
+			//128-24 for class C
+			cinfo->iNetMaskLength = 128-(aInfo->iNetmaskLength);			
+	        cinfo->iIfIndex = aInfo->iIfIndex;	
+#ifdef SYMBIAN_NETWORKING_ADDRESS_PROVISION
+        	cinfo->iUplinkAccess  = aInfo->iUplinkAccess;			
+        	//Get the client IP which DHCP will offer from IAP table
+			//This is a not proper and will be fixed later for full DHCP impl	
+			err = TNaptUtil::GetClientIp(aInfo->iPrivateIap, cinfo->iProvisionedIp);
+#endif
+			if(!aSap->GetConfigInfo())
+				{
+				AddConfigL(cinfo);
+				aSap->SetConfigInfo(cinfo);
+				}
+        }
+		return err;
+	}
+	
+	
+void CNaptClientConfigMgr::AddConfigL(const TNaptConfigInfo* aConfigInfo)
+/** 
+ * This method adds the configuration to the config list. 
+ *
+ * @param const TNaptConfigInfo* aConfigInfo - Config Info to be added
+ * @return None
+ * 
+ **/
+	{
+	iConfigList.AppendL(aConfigInfo);
+	}