--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tcpiputils/networkaddressandporttranslation/inc/translationtable.h Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,138 @@
+// Copyright (c) 1997-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:
+// NAPT (Network Address & Port translation Code )
+//
+//
+
+/**
+ @file
+ @internalComponent
+ @prototype
+*/
+
+#ifndef __TRANSLATIONTABLE_H
+#define __TRANSLATIONTABLE_H
+
+
+#include <e32std.h>
+
+#include <e32base.h>
+#include <es_sock.h> // for BigEndian
+#include <icmp6_hdr.h>
+#include <ip4_hdr.h>
+#include <tcp_hdr.h>
+#include <in_pkt.h>
+#include <ext_hdr.h>
+#include <in_chk.h>
+#include "naptconfigtable.h"
+
+//Hash Table Array Size
+const TUint16 KTranslationHashTableSize= 111;
+
+//flags for TCP session close
+const TUint8 KTcpClosePacketOUT =0x40 ;
+const TUint8 KTcpClosePacketIN =0x80 ;
+const TUint8 KTcpCloseDeletePacket = KTcpClosePacketOUT | KTcpClosePacketIN | KTcpCtlACK ;
+
+//TImer Default Values.. All values in Seconds..
+const TUint32 KTimerMaxSeconds =2147 ; //Maximum Timer Interval
+const TUint32 KTableScanIntervalDefault =3*60 ; //3 minutes
+//Inactive Protcol Timeout Default Values
+const TUint32 KTcpIdleTimeOutDefault =24*60*60; //One day
+const TUint32 KUdpIdleTimeoutDefault =3*60; //3 minutes
+const TUint32 KIcmpIdleTimeoutDefault =3*60; //3 minutes
+//Tcp Close Wait Time for Napt Table Node Deletion
+const TUint32 KTcpOpenTimeoutDefault =30 ; // 30 seconds
+const TUint32 KTcpCloseTimeoutDefault =4*60; // 4 minutes
+
+//Napt Port Range
+const TUint16 KNaptPort_HIGH =64000;
+const TUint16 KNaptPort_LOW =61000;
+
+//IcmpQueryIdRange
+const TUint16 KNaptIcmpQuery_HIGH =30000;
+const TUint16 KNaptIcmpQuery_LOW =28000;
+
+class CNaptTimer;
+class CNaptIPPortMap;
+
+NONSHARABLE_CLASS(CNaptIPPortMap): public CBase
+ {
+
+ friend class CProtocolNapt;
+ public:
+
+ static CNaptIPPortMap* NewL();
+ ~CNaptIPPortMap();
+
+ public:
+
+ TUint16 iSrcPort; //original source Address port
+ TUint16 iDstPort; //just needed to compare in EntryExists function
+ TUint16 iTrPort; //final translated port
+ TUint8 iProtocolFlag; //soft state for tcp session close
+ TUint iProtocolType; //type of protocol TCP/UDP/ICMP
+ TUint32 iSrcIpAddr; //original source address
+ TUint32 iTrIpAddr; //final translated ip address
+ TUint32 iDstIpAddr; //just needed to compare in EntryExists function
+ TUint32 iCurTime; //used for deleting the entry based on the timout values
+ TNaptConfigInfo* iConfigInfo; //used for fetching packet specific configuration in InBound hook
+ TSglQueLink* iLink;
+ };
+
+class TNaptIPPortMap : public TSglQue<CNaptIPPortMap>
+ {
+public:
+ TNaptIPPortMap():
+ TSglQue<CNaptIPPortMap>(_FOFF(CNaptIPPortMap, iLink)) {};
+ };
+
+
+typedef class TSglQueIter<CNaptIPPortMap> TNaptTableIter;
+
+class TNaptTableMapMgr
+ {
+ friend class CProtocolNapt;
+
+ public:
+ TNaptTableMapMgr();
+ ~TNaptTableMapMgr();
+
+ inline TInt FindBucket(TInt aPortNo){ return aPortNo % KTranslationHashTableSize; }
+ inline TInt GetIndexedPortCount(){ return iBucketsInUse;}
+ CNaptIPPortMap* FindOrCreateNaptEntryL( TUint aProtocolType,const TUint32& aSrcAddr,const TUint32& aDstAddr,const TUint16 aSrcPort,const TUint16 aDstPort, const TNaptConfigInfo *aConfigInfo);
+ TBool VerifySender(const CNaptIPPortMap* aTableNode, const TUint32& aSrcIp,TUint16 aSrcPort);
+ CNaptIPPortMap* GetIPTranslationNode(TUint16 aDstPortNo);
+ void DeleteNodeInIndexedList(TInt aIndex, CNaptIPPortMap *aTableNode);
+ void TimerComplete();
+ void HandleTcpConnectionPhases( TInet6Checksum<TInet6HeaderTCP> &aPacket, CNaptIPPortMap* aTableNode,const TInt direction);
+
+ private :
+ CNaptIPPortMap *AllocateTranslationNodeL(TUint aProtocolType,const TUint32& aSrcAddr,const TUint32& aDstAddr,const TUint16 aSrcPort ,const TUint16 aDstPort, const TNaptConfigInfo *aConfigInfo, TUint16 aQueryId=0);
+ void DeleteNaptTableNode( CNaptIPPortMap* aTableNode);
+
+ private :
+ TNaptIPPortMap iIPPortMap[KTranslationHashTableSize];
+ TUint16 iLastPort;
+ TInt16 iBucketsInUse;
+ TUint16 iIcmpQueryId;
+ TUint32 iPublicGatewayIP;
+ CNaptTimer* iTimerPtr;
+
+ };
+
+
+
+
+#endif //translation.h