diff -r 000000000000 -r af10295192d8 tcpiputils/networkaddressandporttranslation/inc/translationtable.h --- /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 + +#include +#include // for BigEndian +#include +#include +#include +#include +#include +#include +#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 + { +public: + TNaptIPPortMap(): + TSglQue(_FOFF(CNaptIPPortMap, iLink)) {}; + }; + + +typedef class TSglQueIter 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 &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