|
1 // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
2 // All rights reserved. |
|
3 // This component and the accompanying materials are made available |
|
4 // under the terms of "Eclipse Public License v1.0" |
|
5 // which accompanies this distribution, and is available |
|
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
7 // |
|
8 // Initial Contributors: |
|
9 // Nokia Corporation - initial contribution. |
|
10 // |
|
11 // Contributors: |
|
12 // |
|
13 // Description: |
|
14 // The DHCPIP4StateMachine header file |
|
15 // |
|
16 // |
|
17 |
|
18 /** |
|
19 @file DHCPIP4StateMachine.h |
|
20 */ |
|
21 |
|
22 #ifndef __DHCPIP4STATEMACHINE_H__ |
|
23 #define __DHCPIP4STATEMACHINE_H__ |
|
24 |
|
25 #include "DHCPStateMachine.h" |
|
26 #include "DHCPIP4Msg.h" |
|
27 |
|
28 class CDHCPIP4State; |
|
29 #ifdef SYMBIAN_NETWORKING_ADDRESS_PROVISION |
|
30 class CDhcpHwAddrManager; |
|
31 #endif //SYMBIAN_NETWORKING_ADDRESS_PROVISION |
|
32 class CDHCPIP4StateMachine : public CDHCPStateMachine |
|
33 /** |
|
34 * Implements helper function & starts DHCPv4 tasks (INIT,INFORM,....) |
|
35 * |
|
36 * @internalTechnology |
|
37 */ |
|
38 { |
|
39 friend class CDHCPIP4Control; |
|
40 friend class CDHCPIP4Select; |
|
41 friend class CDHCPIP4HandleClientMsgs; |
|
42 friend class CDHCPIP4SendRequestResponse; |
|
43 friend class CDHCPIP4SendInformResponse; |
|
44 |
|
45 public: |
|
46 /* tasks the statemachine could be started for |
|
47 enum ETask |
|
48 { |
|
49 EInit, |
|
50 EInform, |
|
51 EReboot, |
|
52 ERenew, |
|
53 ERebind, |
|
54 EDecline, |
|
55 ERelease |
|
56 }; |
|
57 */ |
|
58 |
|
59 public: |
|
60 ~CDHCPIP4StateMachine(); |
|
61 #ifdef SYMBIAN_NETWORKING_DHCPSERVER |
|
62 #ifndef SYMBIAN_NETWORKING_ADDRESS_PROVISION |
|
63 static CDHCPIP4StateMachine* NewL(RSocketServ& aEsock, RConnection& aConnection, const TName& aInterfaceName,TBool aDHCPServerImpl); |
|
64 #else |
|
65 static CDHCPIP4StateMachine* NewL(RSocketServ& aEsock, RConnection& aConnection, const TName& aInterfaceName, CDhcpHwAddrManager* aDhcpHwAddrManager, TBool aDHCPServerImpl); |
|
66 #endif //SYMBIAN_NETWORKING_ADDRESS_PROVISION |
|
67 #else |
|
68 static CDHCPIP4StateMachine* NewL(RSocketServ& aEsock, RConnection& aConnection, const TName& aInterfaceName); |
|
69 #endif // SYMBIAN_NETWORKING_DHCPSERVER |
|
70 virtual void GetServerAddress( TInetAddr& aAddress ); |
|
71 #ifdef SYMBIAN_NETWORKING_DHCP_MSG_HEADERS |
|
72 void StartInformL(MStateMachineNotify* aStateMachineNotify); |
|
73 #endif //SYMBIAN_NETWORKING_DHCP_MSG_HEADERS |
|
74 virtual void SetCurrentAddress(const TInetAddr& aCurrentAddress, const TInetAddr& aSubnetMask); |
|
75 #ifdef SYMBIAN_NETWORKING_DHCPSERVER |
|
76 virtual void GetClientAddress(TInetAddr& aAddress); |
|
77 virtual CDHCPState* ReceiveOnPort67L( TRequestStatus* aStatus ); |
|
78 virtual void InitialiseServerSocketL();//For the Server Impl |
|
79 virtual void CreateOfferMsgL(); |
|
80 virtual void HandleRequestMsgL(); |
|
81 virtual void HandleInformMsgL(); |
|
82 virtual void InitServerStateMachineL(MStateMachineNotify* aStateMachineNotify); |
|
83 virtual void InitServerBinding(MStateMachineNotify* aStateMachineNotify); |
|
84 #endif // SYMBIAN_NETWORKING_DHCPSERVER |
|
85 virtual CDHCPState* ReceiveL( TRequestStatus* aStatus ); |
|
86 |
|
87 //interface used by CDHCPIP4Control |
|
88 virtual void StartInitL(MStateMachineNotify* aStateMachineNotify, EInitialisationContext aInitialisationContext, TInt aUserTimeOut = 0); |
|
89 virtual void StartInformL(MStateMachineNotify* aStateMachineNotify, TBool aStaticAddress); |
|
90 virtual void StartRebootL(MStateMachineNotify* aStateMachineNotify); |
|
91 virtual void StartRenewL(MStateMachineNotify* aStateMachineNotify, TInt aUserTimeOut); |
|
92 virtual void StartRebindL(MStateMachineNotify* aStateMachineNotify); |
|
93 virtual void StartDeclineL(MStateMachineNotify* aStateMachineNotify); |
|
94 virtual void StartReleaseL(MStateMachineNotify* aStateMachineNotify); |
|
95 |
|
96 virtual void RemoveConfiguredAddress(const TInetAddr *aInetAddr = NULL); |
|
97 |
|
98 //interface used by CDHCPIP4States derivatives |
|
99 void CreateMessageL(); |
|
100 void CreateCommonMsgStart(); |
|
101 void CreateCommonMsgEndL(); |
|
102 virtual void InitialiseSocketL(); |
|
103 virtual void CreateDiscoverMsgL(); |
|
104 virtual void CreateOfferAcceptanceRequestMsgL(); |
|
105 virtual void CreateRebootRequestMsgL(); |
|
106 virtual void CreateInformMsgL(); |
|
107 virtual void CreateDeclineMsgL(); |
|
108 virtual void CreateRenewRequestMsgL(); |
|
109 virtual void CreateRebindRequestMsgL(); |
|
110 virtual void CreateReleaseMsgL(); |
|
111 TInt CreateIPv4LinkLocal(); |
|
112 virtual void HandleOfferL(); |
|
113 virtual CDHCPState* HandleReplyL( TRequestStatus* aStatus ); |
|
114 |
|
115 virtual void BindSocketForUnicastL(); |
|
116 |
|
117 TUint8 GetMessageTypeL() const; |
|
118 TBool CheckXid() const; |
|
119 |
|
120 //interface used by both CDHCPIP4States derivatives & CDHCPIP4Control |
|
121 TBool IsUsingStaticAddress() const; |
|
122 #ifdef _DEBUG |
|
123 static TInt GetDestPort(); |
|
124 #endif |
|
125 |
|
126 #ifdef SYMBIAN_DNS_PROXY |
|
127 void ReadDhcpMsgParamsL(); |
|
128 #endif // SYMBIAN_DNS_PROXY |
|
129 |
|
130 #ifdef SYMBIAN_NETWORKING_DHCPSERVER |
|
131 void CheckClientMsgL(); |
|
132 void HandleRequest(); |
|
133 void HandleInformL(); |
|
134 void ProcessDiscoverL(); |
|
135 void ProcessRequestL(); |
|
136 void ProcessInformL(); |
|
137 TUint8 GetClientMessageTypeL() const; |
|
138 TUint32 GetIPAddressToOffer(); |
|
139 TUint32 GetClientIPAddress(); |
|
140 #ifdef SYMBIAN_NETWORKING_ADDRESS_PROVISION |
|
141 TBool ClientHwAddrProvisioned(); |
|
142 #endif //SYMBIAN_NETWORKING_ADDRESS_PROVISION |
|
143 #endif // SYMBIAN_NETWORKING_DHCPSERVER |
|
144 protected: |
|
145 #ifdef SYMBIAN_NETWORKING_DHCPSERVER |
|
146 #ifndef SYMBIAN_NETWORKING_ADDRESS_PROVISION |
|
147 CDHCPIP4StateMachine(RSocketServ& aEsock, RConnection& aConnection, const TName& aInterfaceName,TBool aDHCPServerImpl); |
|
148 #else |
|
149 CDHCPIP4StateMachine(RSocketServ& aEsock, RConnection& aConnection, const TName& aInterfaceName,CDhcpHwAddrManager* aDhcpHwAddrManager, TBool aDHCPServerImpl); |
|
150 #endif |
|
151 #else |
|
152 CDHCPIP4StateMachine(RSocketServ& aEsock, RConnection& aConnection, const TName& aInterfaceName); |
|
153 #endif // SYMBIAN_NETWORKING_DHCPSERVER |
|
154 |
|
155 void ConstructL(); |
|
156 |
|
157 void ConfigureInterfaceL(); |
|
158 virtual void PrepareToSendL(CDHCPStateMachine::EAddressType aEAddressType); |
|
159 #ifdef SYMBIAN_NETWORKING_DHCPSERVER |
|
160 virtual void PrepareToSendServerMsgL(CDHCPStateMachine::EAddressType aEAddressType); |
|
161 #endif // SYMBIAN_NETWORKING_DHCPSERVER |
|
162 virtual void AssembleClientIDsL(); |
|
163 virtual void AssignAddresses( TInetAddr& aDest, const TInetAddr& aSrc ) const; |
|
164 |
|
165 protected: |
|
166 DHCPv4::CDHCPMessageHeaderIP4* DhcpMessage() const; |
|
167 void SetMessageHeaderL( DHCPv4::TDHCPv4MessageType aMsgType ); |
|
168 #ifdef SYMBIAN_NETWORKING_DHCPSERVER |
|
169 void SetMessageHeaderAsServerL( DHCPv4::TDHCPv4MessageType aMsgType ); |
|
170 #endif // SYMBIAN_NETWORKING_DHCPSERVER |
|
171 void HandleAckL(); |
|
172 void CreateFqdnUpdateRequestL(); |
|
173 #ifdef SYMBIAN_NETWORKING_DHCPSERVER |
|
174 private: |
|
175 void ProcessDeclineL(); |
|
176 TUint32 GenerateClientIPAddress(); |
|
177 void AddParamRequestOptionL(TUint8 aParamReqValue); |
|
178 void CheckClientParamListL(); |
|
179 void AddMessageOptionsL(); |
|
180 #endif // SYMBIAN_NETWORKING_DHCPSERVER |
|
181 private: |
|
182 //accessed by CDHCPIP4Control & CDHCPIP6MessageReader |
|
183 TInetAddr iDHCPServerAddr; //server address currently used to send/receive |
|
184 TUint32 iServerAddress; // to store the address of the DHCP Server we are dealing with |
|
185 #ifdef SYMBIAN_NETWORKING_DHCPSERVER |
|
186 TInetAddr iDHCPClientAddr; //client address |
|
187 TBool iBroadCastFlag; |
|
188 #endif // SYMBIAN_NETWORKING_DHCPSERVER |
|
189 TPtr8 iIncomingMsgDataPtr; |
|
190 TInetAddr iDHCPServerID; |
|
191 TInetAddr iBroadcastAddress; |
|
192 TInetAddr iSubnetMask; |
|
193 }; |
|
194 |
|
195 #ifdef SYMBIAN_NETWORKING_DHCPSERVER |
|
196 #ifndef SYMBIAN_NETWORKING_ADDRESS_PROVISION |
|
197 inline CDHCPIP4StateMachine::CDHCPIP4StateMachine(RSocketServ& aEsock, RConnection& aConnection, const TName& aInterfaceName,TBool aDHCPServerImpl): |
|
198 CDHCPStateMachine( aEsock, aConnection, aInterfaceName ,aDHCPServerImpl), |
|
199 iIncomingMsgDataPtr( 0, 0 ) |
|
200 #else |
|
201 inline CDHCPIP4StateMachine::CDHCPIP4StateMachine(RSocketServ& aEsock, RConnection& aConnection, const TName& aInterfaceName, CDhcpHwAddrManager* aDhcpHwAddrManager, TBool aDHCPServerImpl): |
|
202 CDHCPStateMachine( aEsock, aConnection, aInterfaceName , aDhcpHwAddrManager, aDHCPServerImpl), |
|
203 iIncomingMsgDataPtr( 0, 0 ) |
|
204 #endif //SYMBIAN_NETWORKING_ADDRESS_PROVISION |
|
205 /** |
|
206 * Constructor of the DHCPv4StateMachine |
|
207 * |
|
208 * @internalTechnology |
|
209 * |
|
210 */ |
|
211 { |
|
212 } |
|
213 |
|
214 #else // SYMBIAN_NETWORKING_DHCPSERVER |
|
215 |
|
216 inline CDHCPIP4StateMachine::CDHCPIP4StateMachine(RSocketServ& aEsock, RConnection& aConnection, const TName& aInterfaceName): |
|
217 CDHCPStateMachine( aEsock, aConnection, aInterfaceName ), |
|
218 iIncomingMsgDataPtr( 0, 0 ) |
|
219 /** |
|
220 * Constructor of the DHCPv4StateMachine |
|
221 * |
|
222 * @internalTechnology |
|
223 * |
|
224 */ |
|
225 { |
|
226 } |
|
227 #endif // SYMBIAN_NETWORKING_DHCPSERVER |
|
228 |
|
229 inline DHCPv4::CDHCPMessageHeaderIP4* CDHCPIP4StateMachine::DhcpMessage() const |
|
230 { |
|
231 return static_cast<DHCPv4::CDHCPMessageHeaderIP4*>(iDhcpMessage); |
|
232 } |
|
233 |
|
234 inline TBool CDHCPIP4StateMachine::IsUsingStaticAddress() const |
|
235 { |
|
236 return iCfgInfoOnly; |
|
237 } |
|
238 |
|
239 #ifdef SYMBIAN_NETWORKING_DHCPSERVER |
|
240 inline TUint32 CDHCPIP4StateMachine::GetClientIPAddress() |
|
241 { |
|
242 DHCPv4::CDHCPMessageHeaderIP4* v4Msg = DhcpMessage(); |
|
243 return v4Msg->GetCIAddr(); |
|
244 } |
|
245 #endif // SYMBIAN_NETWORKING_DHCPSERVER |
|
246 |
|
247 #endif |
|
248 |