--- /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
+