tcpiputils/networkaddressandporttranslation/inc/hookdefs.h
changeset 0 af10295192d8
--- /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 <ip6_hook.h>
+#include <in_bind.h>
+#include <in6_event.h>
+#include "family.h"
+#include <in_sock.h>
+#include "translationtable.h"
+#include <posthook.h>
+#include <es_ini.h>
+#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<CSapNapt> 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__