tcpiputils/dhcp/include/DHCPControl.h
changeset 0 af10295192d8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tcpiputils/dhcp/include/DHCPControl.h	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,166 @@
+// Copyright (c) 2003-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:
+// The DHCP Control header file
+// 
+//
+
+/**
+ @file DHCPControl.h
+*/
+
+#ifndef DHCPCONTROL_H
+#define DHCPCONTROL_H
+
+#include <e32base.h>
+#include <es_enum.h>
+#include <comms-infras/statemachine.h>
+#include "ExpireTimer.h"
+#ifdef SYMBIAN_NETWORKING_PLATSEC
+#include <comms-infras/rconfigdaemonmess.h>
+#else
+#include <comms-infras/cs_daemonmess.h>
+#endif
+
+class CDHCPStateMachine;
+class CDHCPDb;
+class CDHCPConfigListener;
+#ifdef SYMBIAN_NETWORKING_ADDRESS_PROVISION
+class CDhcpHwAddrManager;
+#endif //SYMBIAN_NETWORKING_ADDRESS_PROVISION
+class CDHCPControl : public CBase, public MStateMachineNotify, public MExpireTimer
+/**
+  * Base class for DHCP control
+  * 
+  *
+  * @internalTechnology
+  *
+  */
+	{
+public:
+	virtual ~CDHCPControl();
+	
+	virtual void ConfigureL(const TConnectionInfo& aInfo, const RMessage2* aMessage);
+	virtual void Cancel();
+	void HandleClientRequestL(const RMessage2& aMessage);	
+		
+	virtual TBool OnCompletion(CStateMachine* aStateMachine); 
+
+	virtual void TimerExpired();	//timer callback
+	
+	virtual void LinkLocalCreated()	{}
+
+public:
+	enum TConfigType
+		{
+		EConfigToBeDecided,
+		EConfigIPAddress,
+		EConfigNoIPAddress
+		};
+
+protected:
+	CDHCPControl(RSocketServ& aEsock,TConfigType aConfigType) :
+		 iEsock(aEsock),
+       iState(EStart),
+		 iConfigType( aConfigType )
+			 {
+			 }
+			 
+	virtual TInt HandleClientRequestL(TUint aName, TDes8* aDes);
+	virtual TInt HandleClientRequestL(TUint aName);	
+	virtual TInt HandleClientRequestL(TUint aName, TInt aValue);
+	void SaveAndHandleClientRequestL(const RMessage2& aMessage,TUint aOptionName,TInt aValue = 0);	 
+
+	void HandleInterfaceDebugL(const RMessage2& aMessage);
+
+	virtual void TaskCompleteL(TInt aError);
+	virtual void HandleGetRawOptionDataL(TDes8* aDes) = 0;
+	virtual void HandleGetSipServerAddrL(TDes8* aDes) = 0;
+	virtual void HandleGetSipServerDomainL(TDes8* aDes) = 0;
+#ifdef SYMBIAN_TCPIPDHCP_UPDATE
+	virtual void HandleGetDomainSearchListL(TDes8* /* aDes */){};
+	virtual void HandleGetDNSServerListL(TDes8* /*aDes */){};
+#endif //SYMBIAN_TCPIPDHCP_UPDATE
+#ifdef SYMBIAN_NETWORKING_DHCP_MSG_HEADERS
+	virtual void HandleGetMultipleParamsL(TDes8& aDesc)=0;
+	virtual void HandleGetTftpServerAddrL(TDes8& aDes)=0 ;
+	virtual void HandleGetTftpServerNameL(TDes8& aDes)=0 ;
+	virtual	TInt InformCompleteRequestHandlerL()=0;
+	virtual void GetDhcpHdrSiaddrL(TDes8& aNxtAddress)=0;
+	virtual void GetDhcpHdrSnameL(TDes8& aHdrSvrName)=0;
+#endif // SYMBIAN_NETWORKING_DHCP_MSG_HEADERS
+	
+	void FindInterfaceNameL(const TConnectionInfo& aInfo, TInt aFamily);
+	TBool InformNegotiationIsRequiredForConnectionStartCompletion(void) const;
+	virtual TBool ShouldInformAfterFailedInit();
+
+	TBool CompleteClientMessage(TInt aError, TInt aFunctionToCancel = -1);
+	TBool CompleteClientIoctlMessage(TInt aError) {return CompleteClientMessage(aError, EConfigDaemonIoctl);}
+	TBool CompleteClientConfigureMessage(TInt aError) {return CompleteClientMessage(aError, EConfigDaemonConfigure);}
+#ifdef SYMBIAN_NETWORKING_DHCPSERVER	
+	TBool CompleteServerConfigureMessage(TInt aError) {return CompleteClientMessage(aError, EConfigDaemonConfigure);}
+	TBool CompleteServerIoctlMessage(TInt aError) {return CompleteClientMessage(aError, EConfigDaemonIoctl);}
+	virtual void HandleSetRawOptionCodeL(TDes8* aDes);
+	void ServiceAnyOutstandingServerIoctlL();
+#endif // SYMBIAN_NETWORKING_DHCPSERVER	
+	void ServiceAnyOutstandingIoctlL();
+  	void UpdateDns(TDesC8* aHostName, TDesC8* aDomainName);
+	void ConfigureL( TBool aStaticAddress );
+   	virtual void BindingFinishedL();
+   	void SaveMessageBufferForLaterReference();
+
+
+protected:
+	CDHCPStateMachine* iDhcpStateMachine;	// owns (created by subclass)
+	const RMessage2* iMessage;
+	RSocketServ& iEsock;
+	RConnection iConnection;
+	TName iInterfaceName;
+
+	CDHCPDb* iDhcpDb; //owns (created by subclass)
+	CDHCPConfigListener* iDhcpConfigListener; // owns
+#ifdef SYMBIAN_NETWORKING_ADDRESS_PROVISION
+	CDhcpHwAddrManager* iDhcpHwAddrManager; //owns (created by subclass)
+#endif //SYMBIAN_NETWORKING_ADDRESS_PROVISION
+
+protected:
+	CExpireTimer* iTimer;   // owns
+	enum TState
+		{
+		EStart,
+		EInitInProgress,
+		EInitialised,
+		ERenewInProgress,
+		ERebindInProgress,
+		EDeclineInProgress,
+		EReleaseInProgress,
+		EInformInProgress,
+		EDeferredInform, // awaiting an ioctl call to trigger an inform negotiation
+		EReconfigureInProgress,
+		EDeclineInitialisedInProgress,
+		EEnd
+		};
+	TState iState;
+	TBool iInitStartedByRenew;
+	TBool iDhcpDaemonDeregister; // to decide RemoveConfigureAddress not to be called while completion of DHCPREL msg
+	TConfigType iConfigType;
+	RBuf8 iValidMsg; //to save msg buffer in case user wants to retrieve any info
+#ifdef SYMBIAN_NETWORKING_DHCPSERVER
+	HBufC8* iDNSRawOption;
+public:
+	TBool iDHCPServerImpl;
+#endif // SYMBIAN_NETWORKING_DHCPSERVER		
+	};
+
+#endif
+