diff -r 000000000000 -r af10295192d8 networkprotocols/dnsproxy/dnsproxyserver/inc/dnsproxyengine.h --- /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 +#include +#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 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 iBuf; //< Receive buffer + TBuf 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 */