--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/networkprotocols/dnsproxy/dnsproxyserver/inc/dnsproxyqryhandler.h Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,159 @@
+//dnsproxyqryhandler.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:
+* @file
+* @internalTechnology
+*
+*/
+
+
+
+#ifndef DNS_PROXYQRYHANDLER_H
+#define DNS_PROXYQRYHANDLER_H
+
+#include <in_sock.h>
+#include <timeout.h>
+#include "dns_hdr.h"
+
+//forward declaration
+class CDnsProxyEngine;
+class CDnsProxyListener;
+class TQueryContext;
+class CDnsServerConfig;
+
+/*
+ * This enum represents the state of query handler active object.
+ * @internalTechnology
+ * */
+ enum TStatus
+ {
+ EInit, // This is the initial state of an active object once sendto is called
+ EComplete // This is the response waiting state which means receive is pending
+ };
+
+class CDnsProxyQueryHandler:public CActive
+ {
+/*
+ * This class sends global query to available uplinks at given time
+ * receives response and sends the same back to the querying host using
+ * local writer.
+ * This class is derived from CActive
+ * @internalTechnology
+ * */
+ public:
+ //two phase construction
+ static CDnsProxyQueryHandler* NewL(CDnsProxyEngine& aEngine, CDnsProxyListener& aListener);
+ //destructor
+ ~CDnsProxyQueryHandler();
+ public:
+ //Invoked when request compltes
+ void RunL();
+ //Method to cancel outstanding request of the active object
+ void DoCancel();
+ //this will be invoked whenever RunL function leaves
+ TInt RunError(TInt aErr);
+ void BindRandomPort();
+ void SendQuery(TInetAddr& aServerAddress);
+ void ProcessQueryL();
+ void SetQueryContext(TQueryContext* aQueryContext);
+ void RunReader();
+ void CancelTimer();
+ TBool GetQHandlerState();
+ void SetQHandlerState(TBool aQueryHandlerStatus);
+
+ // A callback method when the timeout expires
+ void TimeoutL(const TTime &aNow);
+ // Request a call to Timeout after specified time (seconds)
+ void SetTimer(TUint aTimeout);
+
+ protected:
+ //constructor
+ CDnsProxyQueryHandler(CDnsProxyEngine& aEngine, CDnsProxyListener& aListener);
+
+ private:
+ // Process Any pending Query
+ void ProcessNextQueryL();
+ //Set the state of AO
+ void SetActiveObjectState(TStatus aState);
+ //Get the state of AO
+ TStatus GetActiveObjectState();
+ //Reset the Query Handler
+ void QueryDone();
+ //Reset server count
+ void ResetServerCount();
+ //Reset timeout count
+ void ResetTimerCount();
+ //Reset timeout count
+ void ResetSockActiveStatus();
+ //send DNS server failure to the host if the uplink is not available.
+ void SendDnsFailureL();
+ //Activate the socket
+ void ActivateSocketL();
+ //Deactivate the socket
+ void DeActivateSocket();
+
+ public:
+ RTimeout iTimeout; // Timer
+
+ private:
+ CDnsProxyEngine& iProxyEngine; // Instance of control class
+ CDnsProxyListener& iListener; // Instance of listener class
+ RSocket iSocket; // Outbound socket
+ TBool iActiveStatus; // Status of the socket
+ TBool iQueryHandlerStatus; // Status of QueryHandler
+ TInt iServerCount; // Number of servers available
+ TInt iCurServer; // Current server in use
+ TInt iTimerCount; // This is current retry count
+ TInt iRetryCount; // This is maximum possible retries
+ TQueryContext* iQueryContext; // Current Query context under processing
+ CDnsServerConfig* iProxyServer;// External DNS server configuration
+ TBuf8<KDnsMaxMessage> iReply; // DNS reply
+ TSockAddr iFrom; // Query Source
+ TInetAddr iServerAddress; // Current DNS server address
+ TUint32 iCurrentUplink; // Current Uplink in Use
+
+ TStatus iSocketStatus; // Active object state
+
+ };
+
+inline void CDnsProxyQueryHandler::ResetServerCount()
+/**
+ * Reset server count
+ * @internalTechnology
+ * */
+ {
+ iCurServer = 0;
+ }
+
+inline void CDnsProxyQueryHandler::ResetTimerCount()
+/**
+ * Reset timeout count
+ * @internalTechnology
+ * */
+ {
+ iTimerCount = 0;
+ }
+
+inline void CDnsProxyQueryHandler::ResetSockActiveStatus()
+/**
+ * Reset socket active status
+ * @internalTechnology
+ * */
+ {
+ iActiveStatus = EFalse;
+ }
+
+#endif /*DNS_PROXYQRYHANDLER_H*/