diff -r 000000000000 -r af10295192d8 tcpiputils/networkaddressandporttranslation/inc/hookdefs.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tcpiputils/networkaddressandporttranslation/inc/hookdefs.h Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,264 @@ +// Copyright (c) 2007-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: +// hookdef.h +// +// + +/** + @file + @internalComponent + @prototype +*/ + +#ifndef __HOOKDEFS_H__ +#define __HOOKDEFS_H__ + +#include +#include +#include +#include "family.h" +#include +#include "translationtable.h" +#include +#include +#include "panic.h" +#include "naptinterface.h" +#include "naptconfigtable.h" + + +/* +------------------------------------------------------------------------------------ + INCOMING PACKETS FROM PUBLIC INTERFACE TO PRIVATE + + + ip stack + + / \ + / \ + / \ + |forward hook to change route| |Inbound Hook napt hook| + / \ + / \ + / \ + / \ + / \ + ---------- ------------- + private interface public interface +------------------------------------------------------------------------------------- + +*/ + +/* +------------------------------------------------------------------------------------ + OUTCOMING PACKETS FROM PRIVATE INTERFACE TO PUBLIC + + + ip stack + + / \ + / \ + / \ + |forward hook napt hook| \ + / \ + / \ + / \ + / \ + / \ + ---------- ------------- + private interface public interface +------------------------------------------------------------------------------------- + +*/ + +//Definitions of ICMP messages. These messages are not supported by stack therefore +//defining them in this file.Since NAPT will forward packets which are coming there is +//no good reason to support only icmp messages which are supported by Stack. + +const TUint8 KInetICMP_Information_Request= 15; +const TUint8 KInetICMP_Information_Reply= 16; +const TUint8 KInet4ICMP_AddressMask_Request= 17; +const TUint8 KInet4ICMP_AddressMask_Reply= 18; +const TUint8 KInet4ICMP_DNS_Request= 37; +const TUint8 KInet4ICMP_DNS_Reply= 38; + +//ICMP CODES +const TUint8 KInet4ICMP_CODE_DF = 4; + +const TUint KProtocolNAPT = 1000; + +//Number of Service access points allowed +const TUint16 KMaxNumSap = 5; + +class CProtocolNapt; +class CNaptTimer; + + +NONSHARABLE_CLASS(CSapNapt) : public CServProviderBase +/** +* Class Derived from CServProviderBase. +* Inherit virtual functions from CServProviderBase.This Class is socket support for this +* Hook (protocol).Protocol or Hook could be manipulated by the Socket using socket options. +* This class will be used to take downlink information from the private client.The SAP will +* called for all the Socket opened by the socket. SAP is 1 to 1 with Socket. +**/ + { + +public: +friend class CProtocolNapt; + CSapNapt(); + ~CSapNapt(); + void Ioctl(TUint /*level*/,TUint /* name*/,TDes8* /* anOption*/); + + void Start(); + void Shutdown(TCloseType option); + void LocalName(TSockAddr& anAddr) const; + TInt SetLocalName(TSockAddr& anAddr); + void RemName(TSockAddr& anAddr) const; + TInt SetRemName(TSockAddr& anAddr); + TInt GetOption(TUint /*level*/,TUint /*name*/,TDes8& /*anOption*/)const; + void CancelIoctl(TUint /*aLevel*/,TUint /*aName*/); + TInt SetOption(TUint aLevel,TUint aName,const TDesC8& anOption); + void ActiveOpen(); + void ActiveOpen(const TDesC8& /*aConnectionData*/); + TInt PassiveOpen(TUint /*aQueSize*/); + TInt PassiveOpen(TUint /*aQueSize*/,const TDesC8& /*aConnectionData*/); + void Shutdown(TCloseType /*option*/,const TDesC8& /*aDisconnectionData*/); + void AutoBind(); + TInt SecurityCheck(MProvdSecurityChecker* aChecker); + TNaptConfigInfo* GetConfigInfo(); + void SetConfigInfo(TNaptConfigInfo *cinfo); + +private: + void DoBindToL(TInt aStatus); + CProtocolNapt* iProtocol; + CNaptClientConfigMgr* iConfigMgr; + TNaptConfigInfo* iConfigInfo; + }; //End Class CProtocolSap + + +class CProtocolNaptIn; + + NONSHARABLE_CLASS(CProtocolNapt) : public CProtocolPosthook +/** +* Class Derived from CIp6Hook. +* The class will implement all the virtual functions of Base class CIp6Hook (ApplyL). +* The class object will be the Protocol instance will open service access point for that +* Protocol.Service access point will be used to manipulate Protocol using socket option. +* This will Open interested flows for manipulation. +**/ + + { +public: + friend class CProtocolNaptIn; + static CProtocolNapt* NewL(); + ~CProtocolNapt(); + void Identify(TServerProtocolDesc* aProtocolDesc)const; + TInt ApplyL(RMBufHookPacket& aPacket, RMBufRecvInfo& aInfo); + void BindL(CProtocolBase* protocol, TUint id); + void BindToL(CProtocolBase* aProtocol); + CServProviderBase* NewSAPL(TUint aProtocol); + void ForwardManipulation(RMBufHookPacket& aPacket,RMBufRecvInfo& aInfo); + void IcmpHandlerForward(RMBufHookPacket& aPacket, RMBufRecvInfo& aInfo); + static void Describe(TServerProtocolDesc& anEntry); + void NetworkAttachedL(); + virtual MNetworkService *NetworkService() + { + return CProtocolPosthook::NetworkService(); + } + + void ReadConfigurationFile(); + void ConfigInfo(); + TInt GetIniValue(const TDesC& aSection, const TDesC& aName, TInt aDefault, TInt aMin, TInt aMax); + TNaptTableMapMgr iNaptMapMgr; + void CancelSap(CSapNapt *aSap); +private: + void CreateL(); + MInterfaceManager* iManager; + + //table related information + CNaptTimer* iTimer; + CProtocolNaptIn* iProtInbound; + RPointerArray iSapList; + CNaptClientConfigMgr* iConfigMgr; + TNaptConfigInfo* iCurConfigInfo; + +public: + TBool iBoundFlag; + CProtocolBase* iProtBase; + + }; //End class CProtocolNapt + +NONSHARABLE_CLASS(CProtocolNaptIn) : public CIp6Hook +/** +* Class Derived from CIp6Hook. +* The class will implement all the virtual functions of Base class CIp6Hook (ApplyL). +* The class object will be the Protocol instance will open service access point for that +* Protocol.Service access point will be used to manipulate Protocol using socket option. +* This will Open interested flows for manipulation. +**/ + { + public: + CProtocolNaptIn(CProtocolNapt* aNapt); + ~CProtocolNaptIn(); + TInt IncomingPacketManipulation(RMBufHookPacket& aPacket, RMBufRecvInfo& aInfo); + TInt ApplyL(RMBufHookPacket& aPacket, RMBufRecvInfo& aInfo); + TInt IcmpHandler(RMBufHookPacket& aPacket, RMBufRecvInfo& aInfo) ; + TInt IcmpHandlerTracert(RMBufHookPacket& aPacket, RMBufRecvInfo& aInfo, TNaptConfigInfo** aConfigInfo); + + private: + CProtocolNapt* iNapt; + CNaptClientConfigMgr *iConfigMgr; + + }; + +NONSHARABLE_CLASS(CNaptTimer) : public CTimer + /** + * Class CNaptTimer deriver from CTimer. + * Timer instance is created during hook attach time. + * It will be started only when a first packet needs NAPT translation. + * Timer will be stopped only when there are no packets. + */ + { + + public: + static CNaptTimer* NewL(CProtocolNapt* aNaptProtcol); + ~CNaptTimer(); + + void StartTimer(); + void Cancel(); + void RunL(); + + TInt iNaptTableScanInterval; + TInt iNaptTcpIdleTimeout; + TInt iNaptUdpIdleTimeout; + TInt iNaptIcmpIdleTimeout; + TInt iNaptTcpOpenTimeout; + TInt iNaptTcpCloseTimeout; + + private: + CNaptTimer(); + CProtocolNapt* iNaptProtocol; + TNaptTableMapMgr* iMapMgrPtr; + + + + }; + +inline CNaptTimer::CNaptTimer() : CTimer(EPriorityStandard) + { + } + + + +#endif //__HOOKDEFS_H__