diff -r 000000000000 -r af10295192d8 tcpiputils/dhcp/include/DHCPControl.h --- /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 +#include +#include +#include "ExpireTimer.h" +#ifdef SYMBIAN_NETWORKING_PLATSEC +#include +#else +#include +#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 +