--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tcpiputils/dhcp/include/DHCPIP4StateMachine.h Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,248 @@
+// Copyright (c) 2004-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 DHCPIP4StateMachine header file
+//
+//
+
+/**
+ @file DHCPIP4StateMachine.h
+*/
+
+#ifndef __DHCPIP4STATEMACHINE_H__
+#define __DHCPIP4STATEMACHINE_H__
+
+#include "DHCPStateMachine.h"
+#include "DHCPIP4Msg.h"
+
+class CDHCPIP4State;
+#ifdef SYMBIAN_NETWORKING_ADDRESS_PROVISION
+class CDhcpHwAddrManager;
+#endif //SYMBIAN_NETWORKING_ADDRESS_PROVISION
+class CDHCPIP4StateMachine : public CDHCPStateMachine
+/**
+ * Implements helper function & starts DHCPv4 tasks (INIT,INFORM,....)
+ *
+ * @internalTechnology
+ */
+ {
+friend class CDHCPIP4Control;
+friend class CDHCPIP4Select;
+friend class CDHCPIP4HandleClientMsgs;
+friend class CDHCPIP4SendRequestResponse;
+friend class CDHCPIP4SendInformResponse;
+
+public:
+ /* tasks the statemachine could be started for
+ enum ETask
+ {
+ EInit,
+ EInform,
+ EReboot,
+ ERenew,
+ ERebind,
+ EDecline,
+ ERelease
+ };
+ */
+
+public:
+ ~CDHCPIP4StateMachine();
+#ifdef SYMBIAN_NETWORKING_DHCPSERVER
+#ifndef SYMBIAN_NETWORKING_ADDRESS_PROVISION
+ static CDHCPIP4StateMachine* NewL(RSocketServ& aEsock, RConnection& aConnection, const TName& aInterfaceName,TBool aDHCPServerImpl);
+#else
+ static CDHCPIP4StateMachine* NewL(RSocketServ& aEsock, RConnection& aConnection, const TName& aInterfaceName, CDhcpHwAddrManager* aDhcpHwAddrManager, TBool aDHCPServerImpl);
+#endif //SYMBIAN_NETWORKING_ADDRESS_PROVISION
+#else
+ static CDHCPIP4StateMachine* NewL(RSocketServ& aEsock, RConnection& aConnection, const TName& aInterfaceName);
+#endif // SYMBIAN_NETWORKING_DHCPSERVER
+ virtual void GetServerAddress( TInetAddr& aAddress );
+#ifdef SYMBIAN_NETWORKING_DHCP_MSG_HEADERS
+ void StartInformL(MStateMachineNotify* aStateMachineNotify);
+#endif //SYMBIAN_NETWORKING_DHCP_MSG_HEADERS
+ virtual void SetCurrentAddress(const TInetAddr& aCurrentAddress, const TInetAddr& aSubnetMask);
+#ifdef SYMBIAN_NETWORKING_DHCPSERVER
+ virtual void GetClientAddress(TInetAddr& aAddress);
+ virtual CDHCPState* ReceiveOnPort67L( TRequestStatus* aStatus );
+ virtual void InitialiseServerSocketL();//For the Server Impl
+ virtual void CreateOfferMsgL();
+ virtual void HandleRequestMsgL();
+ virtual void HandleInformMsgL();
+ virtual void InitServerStateMachineL(MStateMachineNotify* aStateMachineNotify);
+ virtual void InitServerBinding(MStateMachineNotify* aStateMachineNotify);
+#endif // SYMBIAN_NETWORKING_DHCPSERVER
+ virtual CDHCPState* ReceiveL( TRequestStatus* aStatus );
+
+ //interface used by CDHCPIP4Control
+ virtual void StartInitL(MStateMachineNotify* aStateMachineNotify, EInitialisationContext aInitialisationContext, TInt aUserTimeOut = 0);
+ virtual void StartInformL(MStateMachineNotify* aStateMachineNotify, TBool aStaticAddress);
+ virtual void StartRebootL(MStateMachineNotify* aStateMachineNotify);
+ virtual void StartRenewL(MStateMachineNotify* aStateMachineNotify, TInt aUserTimeOut);
+ virtual void StartRebindL(MStateMachineNotify* aStateMachineNotify);
+ virtual void StartDeclineL(MStateMachineNotify* aStateMachineNotify);
+ virtual void StartReleaseL(MStateMachineNotify* aStateMachineNotify);
+
+ virtual void RemoveConfiguredAddress(const TInetAddr *aInetAddr = NULL);
+
+ //interface used by CDHCPIP4States derivatives
+ void CreateMessageL();
+ void CreateCommonMsgStart();
+ void CreateCommonMsgEndL();
+ virtual void InitialiseSocketL();
+ virtual void CreateDiscoverMsgL();
+ virtual void CreateOfferAcceptanceRequestMsgL();
+ virtual void CreateRebootRequestMsgL();
+ virtual void CreateInformMsgL();
+ virtual void CreateDeclineMsgL();
+ virtual void CreateRenewRequestMsgL();
+ virtual void CreateRebindRequestMsgL();
+ virtual void CreateReleaseMsgL();
+ TInt CreateIPv4LinkLocal();
+ virtual void HandleOfferL();
+ virtual CDHCPState* HandleReplyL( TRequestStatus* aStatus );
+
+ virtual void BindSocketForUnicastL();
+
+ TUint8 GetMessageTypeL() const;
+ TBool CheckXid() const;
+
+ //interface used by both CDHCPIP4States derivatives & CDHCPIP4Control
+ TBool IsUsingStaticAddress() const;
+#ifdef _DEBUG
+ static TInt GetDestPort();
+#endif
+
+#ifdef SYMBIAN_DNS_PROXY
+ void ReadDhcpMsgParamsL();
+#endif // SYMBIAN_DNS_PROXY
+
+#ifdef SYMBIAN_NETWORKING_DHCPSERVER
+ void CheckClientMsgL();
+ void HandleRequest();
+ void HandleInformL();
+ void ProcessDiscoverL();
+ void ProcessRequestL();
+ void ProcessInformL();
+ TUint8 GetClientMessageTypeL() const;
+ TUint32 GetIPAddressToOffer();
+ TUint32 GetClientIPAddress();
+#ifdef SYMBIAN_NETWORKING_ADDRESS_PROVISION
+ TBool ClientHwAddrProvisioned();
+#endif //SYMBIAN_NETWORKING_ADDRESS_PROVISION
+#endif // SYMBIAN_NETWORKING_DHCPSERVER
+protected:
+#ifdef SYMBIAN_NETWORKING_DHCPSERVER
+#ifndef SYMBIAN_NETWORKING_ADDRESS_PROVISION
+ CDHCPIP4StateMachine(RSocketServ& aEsock, RConnection& aConnection, const TName& aInterfaceName,TBool aDHCPServerImpl);
+#else
+ CDHCPIP4StateMachine(RSocketServ& aEsock, RConnection& aConnection, const TName& aInterfaceName,CDhcpHwAddrManager* aDhcpHwAddrManager, TBool aDHCPServerImpl);
+#endif
+#else
+ CDHCPIP4StateMachine(RSocketServ& aEsock, RConnection& aConnection, const TName& aInterfaceName);
+#endif // SYMBIAN_NETWORKING_DHCPSERVER
+
+ void ConstructL();
+
+ void ConfigureInterfaceL();
+ virtual void PrepareToSendL(CDHCPStateMachine::EAddressType aEAddressType);
+#ifdef SYMBIAN_NETWORKING_DHCPSERVER
+ virtual void PrepareToSendServerMsgL(CDHCPStateMachine::EAddressType aEAddressType);
+#endif // SYMBIAN_NETWORKING_DHCPSERVER
+ virtual void AssembleClientIDsL();
+ virtual void AssignAddresses( TInetAddr& aDest, const TInetAddr& aSrc ) const;
+
+protected:
+ DHCPv4::CDHCPMessageHeaderIP4* DhcpMessage() const;
+ void SetMessageHeaderL( DHCPv4::TDHCPv4MessageType aMsgType );
+#ifdef SYMBIAN_NETWORKING_DHCPSERVER
+ void SetMessageHeaderAsServerL( DHCPv4::TDHCPv4MessageType aMsgType );
+#endif // SYMBIAN_NETWORKING_DHCPSERVER
+ void HandleAckL();
+ void CreateFqdnUpdateRequestL();
+#ifdef SYMBIAN_NETWORKING_DHCPSERVER
+private:
+ void ProcessDeclineL();
+ TUint32 GenerateClientIPAddress();
+ void AddParamRequestOptionL(TUint8 aParamReqValue);
+ void CheckClientParamListL();
+ void AddMessageOptionsL();
+#endif // SYMBIAN_NETWORKING_DHCPSERVER
+private:
+ //accessed by CDHCPIP4Control & CDHCPIP6MessageReader
+ TInetAddr iDHCPServerAddr; //server address currently used to send/receive
+ TUint32 iServerAddress; // to store the address of the DHCP Server we are dealing with
+#ifdef SYMBIAN_NETWORKING_DHCPSERVER
+ TInetAddr iDHCPClientAddr; //client address
+ TBool iBroadCastFlag;
+#endif // SYMBIAN_NETWORKING_DHCPSERVER
+ TPtr8 iIncomingMsgDataPtr;
+ TInetAddr iDHCPServerID;
+ TInetAddr iBroadcastAddress;
+ TInetAddr iSubnetMask;
+ };
+
+#ifdef SYMBIAN_NETWORKING_DHCPSERVER
+#ifndef SYMBIAN_NETWORKING_ADDRESS_PROVISION
+inline CDHCPIP4StateMachine::CDHCPIP4StateMachine(RSocketServ& aEsock, RConnection& aConnection, const TName& aInterfaceName,TBool aDHCPServerImpl):
+ CDHCPStateMachine( aEsock, aConnection, aInterfaceName ,aDHCPServerImpl),
+ iIncomingMsgDataPtr( 0, 0 )
+#else
+inline CDHCPIP4StateMachine::CDHCPIP4StateMachine(RSocketServ& aEsock, RConnection& aConnection, const TName& aInterfaceName, CDhcpHwAddrManager* aDhcpHwAddrManager, TBool aDHCPServerImpl):
+ CDHCPStateMachine( aEsock, aConnection, aInterfaceName , aDhcpHwAddrManager, aDHCPServerImpl),
+ iIncomingMsgDataPtr( 0, 0 )
+#endif //SYMBIAN_NETWORKING_ADDRESS_PROVISION
+/**
+ * Constructor of the DHCPv4StateMachine
+ *
+ * @internalTechnology
+ *
+ */
+ {
+ }
+
+#else // SYMBIAN_NETWORKING_DHCPSERVER
+
+inline CDHCPIP4StateMachine::CDHCPIP4StateMachine(RSocketServ& aEsock, RConnection& aConnection, const TName& aInterfaceName):
+ CDHCPStateMachine( aEsock, aConnection, aInterfaceName ),
+ iIncomingMsgDataPtr( 0, 0 )
+/**
+ * Constructor of the DHCPv4StateMachine
+ *
+ * @internalTechnology
+ *
+ */
+ {
+ }
+#endif // SYMBIAN_NETWORKING_DHCPSERVER
+
+inline DHCPv4::CDHCPMessageHeaderIP4* CDHCPIP4StateMachine::DhcpMessage() const
+ {
+ return static_cast<DHCPv4::CDHCPMessageHeaderIP4*>(iDhcpMessage);
+ }
+
+inline TBool CDHCPIP4StateMachine::IsUsingStaticAddress() const
+ {
+ return iCfgInfoOnly;
+ }
+
+#ifdef SYMBIAN_NETWORKING_DHCPSERVER
+inline TUint32 CDHCPIP4StateMachine::GetClientIPAddress()
+ {
+ DHCPv4::CDHCPMessageHeaderIP4* v4Msg = DhcpMessage();
+ return v4Msg->GetCIAddr();
+ }
+#endif // SYMBIAN_NETWORKING_DHCPSERVER
+
+#endif
+