--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tcpiputils/dhcp/include/DHCPStates.h Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,334 @@
+// 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 DHCP States header file
+//
+//
+
+/**
+ @file DHCPStates.h
+*/
+
+#ifndef __DHCPSTATES_H__
+#define __DHCPSTATES_H__
+
+#include <e32base.h>
+#include <comms-infras/asynchevent.h>
+#include "DHCPStateMachine.h"
+#ifdef SYMBIAN_ESOCK_V3
+#include <comms-infras/idquerynetmsg.h>
+#include <comms-infras/netsubscribe.h>
+#include <c32root.h>
+
+namespace NetSubscribe
+{
+class TEvent;
+}
+
+class SFactoryChannel
+ {
+public:
+ ~SFactoryChannel();
+ SFactoryChannel()
+ {
+ }
+ void SendMessageL( NetMessages::CMessage& aMsg );
+
+protected:
+ CommsFW::TCFModuleName iModule;
+ Elements::TRBuf8 iBuf;
+ RRootServ iC32Root;
+ };
+
+class SDhcpSignal : public SFactoryChannel
+ {
+public:
+ ~SDhcpSignal();
+ SDhcpSignal()
+ {
+ }
+ void SubscribeL( const TName& aInterfaceName, TInt aEventId, NetSubscribe::TEvent& aEvent );
+
+protected:
+ NetSubscribe::CNetSubscribe* iNetSubscribe;
+ NetMessages::CTypeIdQuery* iQuery;
+ };
+#endif
+
+class CDHCPState : public CAsynchEvent
+ {
+public:
+ CDHCPState(CDHCPStateMachine& aDHCP) :
+ CAsynchEvent(&aDHCP)
+ {
+ }
+ virtual ~CDHCPState();
+
+ virtual CDHCPState* ProcessAckNakL(TRequestStatus* aStatus);
+ CDHCPStateMachine& Dhcp()
+ {
+ return static_cast<CDHCPStateMachine&>(*iStateMachine);
+ }
+
+ virtual void Cancel();
+public:
+ enum EDHCPHistory //must be a bit mask
+ {
+ EBinding = 1,
+ EBindToSource = 2
+ };
+
+ };
+
+class CDHCPAddressAcquisition : public CDHCPState
+ {
+public:
+ CDHCPAddressAcquisition(CDHCPStateMachine& aDHCP) :
+ CDHCPState(aDHCP)
+ {
+ }
+ //create msg sends it off & initiates receive
+ virtual CAsynchEvent* ProcessL(TRequestStatus& aStatus);
+ };
+
+class CDHCPSelect : public CDHCPState
+ {
+public:
+ CDHCPSelect(CDHCPStateMachine& aDHCP) :
+ CDHCPState(aDHCP)
+ {
+ }
+ //create msg sends it off & initiates receive
+ virtual CAsynchEvent* ProcessL(TRequestStatus& aStatus);
+ };
+
+class CDHCPRebootConfirm : public CDHCPState
+ {
+public:
+ CDHCPRebootConfirm(CDHCPStateMachine& aDHCP) :
+ CDHCPState(aDHCP)
+ {
+ }
+ //create msg sends it off & initiates receive
+ virtual CAsynchEvent* ProcessL(TRequestStatus& aStatus);
+ };
+
+class CDHCPInformationConfig : public CDHCPState
+ {
+public:
+ CDHCPInformationConfig(CDHCPStateMachine& aDHCP) :
+ CDHCPState(aDHCP)
+ {
+ }
+ //create msg sends it off & initiates receive
+ virtual CAsynchEvent* ProcessL(TRequestStatus& aStatus);
+ };
+
+class CDHCPRequest : public CDHCPState
+ {
+public:
+ CDHCPRequest(CDHCPStateMachine& aDHCP) :
+ CDHCPState(aDHCP)
+ {
+ }
+ virtual CAsynchEvent* ProcessL( TRequestStatus& aStatus );
+ };
+
+class CDHCPWaitForDADBind : public CDHCPState, public MExpireTimer
+ {//uses RSocket::Bind to validate DAD
+public:
+ CDHCPWaitForDADBind(CDHCPStateMachine& aDHCP) :
+ CDHCPState(aDHCP)
+ {
+ }
+ virtual void TimerExpired();
+
+ //starts bind timer
+ virtual CAsynchEvent* ProcessL(TRequestStatus& aStatus);
+
+ virtual void Cancel();
+protected:
+ TTime iBoundAt;
+ TInt iErr;
+ };
+
+#if 0
+class CDHCPWaitForDADIPNotifier : public CDHCPState, public CSubscribeChannel, public MExpireTimer
+ {//uses public&subscribe (IPEventNotifier component) to validate DAD
+public:
+ CDHCPWaitForDADIPNotifier(CDHCPStateMachine& aDHCP) :
+ CDHCPState(aDHCP)
+ {
+ }
+ virtual void TimerExpired();
+
+protected:
+ TTime iBoundAt;
+ };
+#endif
+
+class CDHCPRenew : public CDHCPState
+ {
+public:
+ CDHCPRenew(CDHCPStateMachine& aDHCP) : CDHCPState(aDHCP)
+ {
+ }
+ // ACK received => continue with next state (Bound)
+ virtual CAsynchEvent* ProcessL(TRequestStatus& aStatus);
+ };
+
+class CDHCPRebind : public CDHCPState
+ {
+public:
+ CDHCPRebind(CDHCPStateMachine& aDHCP) : CDHCPState(aDHCP)
+ {
+ }
+ // ACK received => continue with next state (Bound)
+ virtual CAsynchEvent* ProcessL(TRequestStatus& aStatus);
+ };
+
+class CDHCPRelease : public CDHCPState
+ {
+public:
+ CDHCPRelease(CDHCPStateMachine& aDHCP) :
+ CDHCPState(aDHCP)
+ {
+ }
+ //create msg sends it off
+ virtual CAsynchEvent* ProcessL(TRequestStatus& aStatus);
+ };
+
+
+
+class CDHCPDecline : public CDHCPState
+ {
+public:
+ CDHCPDecline(CDHCPStateMachine& aDHCP) :
+ CDHCPState(aDHCP)
+ {
+ }
+ //create msg sends it off
+ virtual CAsynchEvent* ProcessL(TRequestStatus& aStatus);
+ };
+
+#ifdef SYMBIAN_NETWORKING_DHCPSERVER
+class CDHCPWaitForClientMsgs : public CDHCPState
+ {
+public:
+ CDHCPWaitForClientMsgs(CDHCPStateMachine& aDHCP) :
+ CDHCPState(aDHCP)
+ {
+ }
+ //create msg sends it off
+ virtual CAsynchEvent* ProcessL(TRequestStatus& aStatus);
+ };
+
+class CDHCPHandleClientMsgs : public CDHCPState
+ {
+public:
+ CDHCPHandleClientMsgs(CDHCPStateMachine& aDHCP) :
+ CDHCPState(aDHCP)
+ {
+ }
+ //create msg sends it off
+ virtual CAsynchEvent* ProcessL(TRequestStatus& aStatus);
+ };
+
+class CDHCPHandleDiscover : public CDHCPState
+ {
+public:
+ CDHCPHandleDiscover(CDHCPStateMachine& aDHCP) :
+ CDHCPState(aDHCP)
+ {
+ }
+ //create msg sends it off
+ virtual CAsynchEvent* ProcessL(TRequestStatus& aStatus);
+ };
+
+class CDHCPProvideOffer : public CDHCPState
+ {
+public:
+ CDHCPProvideOffer(CDHCPStateMachine& aDHCP) :
+ CDHCPState(aDHCP)
+ {
+ }
+ //create msg sends it off
+ virtual CAsynchEvent* ProcessL(TRequestStatus& aStatus);
+ };
+
+class CDHCPSendRequestResponse : public CDHCPState
+ {
+public:
+ CDHCPSendRequestResponse(CDHCPStateMachine& aDHCP) :
+ CDHCPState(aDHCP)
+ {
+ }
+ //create msg sends it off
+ virtual CAsynchEvent* ProcessL(TRequestStatus& aStatus);
+ };
+
+
+class CDHCPSendInformResponse : public CDHCPState
+ {
+public:
+ CDHCPSendInformResponse(CDHCPStateMachine& aDHCP) :
+ CDHCPState(aDHCP)
+ {
+ }
+ //create msg sends it off
+ virtual CAsynchEvent* ProcessL(TRequestStatus& aStatus);
+ };
+
+class CDHCPHandleDecline : public CDHCPState
+ {
+public:
+ CDHCPHandleDecline(CDHCPStateMachine& aDHCP) :
+ CDHCPState(aDHCP)
+ {
+ }
+ //create msg sends it off
+ virtual CAsynchEvent* ProcessL(TRequestStatus& aStatus);
+ };
+
+class CDHCPHandleRelease : public CDHCPState
+ {
+public:
+ CDHCPHandleRelease(CDHCPStateMachine& aDHCP) :
+ CDHCPState(aDHCP)
+ {
+ }
+ //create msg sends it off
+ virtual CAsynchEvent* ProcessL(TRequestStatus& aStatus);
+ };
+
+// To implement a timer for server socket to bind with server IP address
+class CDHCPBindServer : public CDHCPState, public MExpireTimer
+ {
+public:
+ CDHCPBindServer(CDHCPStateMachine& aDHCP) :
+ CDHCPState(aDHCP)
+ {
+ }
+ virtual void TimerExpired();
+
+ //starts bind timer
+ virtual CAsynchEvent* ProcessL(TRequestStatus& aStatus);
+
+ virtual void Cancel();
+protected:
+ TInt iErr;
+ };
+
+#endif // SYMBIAN_NETWORKING_DHCPSERVER
+
+#endif