networkprotocols/dnsproxy/dnsproxyserver/inc/dnsproxyengine.h
changeset 0 af10295192d8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkprotocols/dnsproxy/dnsproxyserver/inc/dnsproxyengine.h	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,190 @@
+//dnsproxyengine.h
+/*
+* 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:
+* dnsproxyengine.h - Dns Engine class
+* @file
+* @internalTechnology
+*
+*/
+
+
+
+#ifndef DNS_PROXY_ENGINE_H
+#define DNS_PROXY_ENGINE_H
+
+#include <es_ini.h>
+#include <es_enum.h> 
+#include "dnsproxyserver.h"
+#include "dnsproxydb.h"
+#include "dns_hdr.h"
+
+//Literals constants for reading .ini file
+_LIT(DNS_PROXY_INI_DATA,             "resolver.ini");
+_LIT(DNS_PROXY_INI_SECTION,          "proxyresolver");	
+_LIT(DNS_PROXY_INI_NUM_SOCK_SESSION, "sessioncount");
+_LIT(DNS_PROXY_INI_NUM_RETRIES,      "retries");	
+_LIT(DNS_PROXY_INI_QUEUE_SIZE,       "queuesize");
+_LIT(DNS_PROXY_INI_TTL,              "TTL");
+_LIT(DNS_PROXY_INI_DB_SIZE,          "dbsize");
+_LIT(DNS_PROXY_INI_TIMER_VAL,        "timerval");
+_LIT(DNS_PROXY_INI_SERIAL_NUM,       "serialnum");
+_LIT(DNS_PROXY_INI_REFRESH_TIME,     "refreshtime");
+_LIT(DNS_PROXY_INI_RETRY_TIME,       "retrytime");
+_LIT(DNS_PROXY_INI_EXPIRE_TIME,      "expiretime");
+
+const TUint   KSessioncount = 1;
+const TUint   KRetrycount   = 2;
+const TUint   KQSize 		= 20;
+const TUint   KTtl		    = 21600;//dhcp lease timer is 6 hrs
+const TUint   KDbSize       = 10;
+const TUint   KTimerVal     = 5;
+const TUint32 KSerialNum   = 10000;
+const TUint32 KRefreshTime = 900;
+const TUint32 KRetryTime   = 600;
+const TUint32 KExpireTime  = 300;
+const TUint32 KAddrLength  = 100;
+
+
+
+
+//T Type class for DNS Proxy Configuration parameters
+class TDnsProxyConfigParams
+	{
+public:
+    TUint iSessionCount;//< Max number of Socket sessions  
+    TUint iRetryCount;	//< Possible number of retries 
+    TUint iQSize;       //< Queue size limit 
+    TUint iTTL;			//< Time to Live
+    TUint iDbSize;      //< Max number of DB entries
+	TUint iTimerVal;	//< Timeout value for response timer
+	TUint32 iSerialNum; //< This is required for NS response
+	TUint32 iRefreshTime; //< This is required for NS response
+	TUint32 iRetryTime; //< This is required for NS response
+	TUint32 iExpiretime; //< This is required for NS response
+	};
+
+
+//forward declaration
+class CDnsProxyListener;
+class CESockIniData;
+class CDnsProxyDb;
+class CDnsServerConfig;
+
+	
+/**
+ *  This class is an entry point and reads all configuration values and creates 
+ *  some necessary objects
+ *  @internalTechnology
+ * */
+class CDnsProxyEngine:public CBase
+	{
+	public:
+		//two phase construction
+        static CDnsProxyEngine* GetInstanceL();
+		~CDnsProxyEngine();
+		//Starts DNSProxy. The method is called from DNSProxy server session.
+		TInt Start(const RMessage2& aMessage);
+		//Stops DNSProxy. The method is called from DNSProxy server session.
+		void Stop();
+		//Returns instance of socket server
+		RSocketServ& GetSocketServer();
+		//Returns an instance of Listener
+		CDnsProxyListener* GetProxyListener();
+	    // The method updates DNS Proxy DB. 
+		TInt AddDbEntryL(const RMessage2& aMsg);
+		//remove entry from db
+		TInt RemoveDbEntry(const RMessage2& aMsg);
+		//This method updates domain name
+		void UpdateDomainName(const RMessage2& aMsg);
+		// The method to update domain info
+		TInt UpdateDomainInfo(const RMessage2& aMsg);
+		void UpdateLocalAddr(TInetAddr& aAddr);
+		// Suffix is available or not
+		TInt IsSuffixAvailable();
+	    //This method returns the configuration parameters read from .ini file.
+		const TDnsProxyConfigParams& GetConfig() const;
+		TInt SetDlinkConnectionInfo(const RMessage2 &aMessage);
+		TInt SetUplinkConnectionInfo(const RMessage2 &aMessage);
+					
+	protected:
+	    // Initializes the member variables
+		void ConstructL();	
+		
+	private:
+        static CDnsProxyEngine* NewL();
+		//constructor
+		CDnsProxyEngine();
+		//reads the configuation file
+		void ReadConfiguration();
+		//reads the configuation file for specified name /value pair	
+		TInt GetIniValue(const TDesC& aSection, const TDesC& aName, TInt aValue=0);
+		//finds the value for given name 
+		TBool FindVar(const TDesC& aSection, const TDesC& aVarName, TInt& aResult);
+		//loads the cinfiguaration file 
+		TBool LoadConfigurationFile();
+		//unloads cinfiguration file
+		void UnLoadConfigurationFile();
+		
+				
+	public:
+		TDnsProxyConfigParams 	    iConfigParams;		//< Parsed configuration parameters
+		CDnsServerConfig* 		    iProxyServer;		//< DNS server configuration
+		CDnsProxyDb* 				iDnsproxydb;          //< DNS Proxy db instance
+		TInetAddr                   iProxyIfAddr;		//< Listener interface address
+		TBuf8<KMaxName>             iSuffixInfo;
+	
+	private:
+		CESockIniData* 			    iConfigData;		//< Used to read config data 		
+		TInt 					    iConfigDataErr;     //< Contains config data error
+		RSocketServ 			    iSockServ;          //< socket server handler
+		CDnsProxyListener* 		    iListener;          //< Intance of listener object
+		TBool                       iSuffixAvailable;   //< Suffix is available
+		
+					
+	private:
+		TBuf<KDnsMaxMessage> iBuf;	      //< Receive buffer
+		TBuf<KDnsMaxMessage> iDomainName; 
+		static CDnsProxyEngine* iDnsProxyEngine;
+
+	};
+	
+ inline const TDnsProxyConfigParams& CDnsProxyEngine::GetConfig() const
+ /**
+ *  This method returns an instance of config params 
+ *  @internalTechnology
+ * */ 
+ 	{ 
+ 	return iConfigParams; 
+ 	}
+ 	
+ inline RSocketServ& CDnsProxyEngine::GetSocketServer()
+/**
+ *  This method returns an instance of socket server 
+ *  @internalTechnology
+ * */
+	{
+	return iSockServ;
+	}
+	
+inline CDnsProxyListener* CDnsProxyEngine::GetProxyListener()
+/**
+ *  This method returns an instance of listener object
+ *  @internalTechnology
+ * */
+	{
+	return iListener;
+	}
+	
+#endif /* DNS_PROXY_ENGINE_H */