ReactOS 0.4.16-dev-2613-g9533ad7
api.c File Reference
#include <rosdhcp.h>
#include <reactos/debug.h>
Include dependency graph for api.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

VOID ApiInit ()
 
VOID ApiLock ()
 
VOID ApiUnlock ()
 
VOID ApiFree ()
 
DWORD WINAPI RpcThreadRoutine (LPVOID lpParameter)
 
HANDLE InitRpc (VOID)
 
VOID ShutdownRpc (VOID)
 
DWORD __stdcall Server_EnableDhcp (_In_ PDHCP_SERVER_NAME ServerName, _In_ LPWSTR AdapterName, _In_ BOOL Enable)
 
DWORD __stdcall Server_AcquireParameters (_In_ PDHCP_SERVER_NAME ServerName, _In_ LPWSTR AdapterName)
 
DWORD __stdcall Server_AcquireParametersByBroadcast (_In_ PDHCP_SERVER_NAME ServerName, _In_ LPWSTR AdapterName)
 
DWORD __stdcall Server_ReleaseParameters (_In_ PDHCP_SERVER_NAME ServerName, _In_ LPWSTR AdapterName)
 
DWORD __stdcall Server_FallbackRefreshParams (_In_ PDHCP_SERVER_NAME ServerName, _In_ LPWSTR AdapterName)
 
DWORD __stdcall Server_StaticRefreshParams (_In_ PDHCP_SERVER_NAME ServerName, _In_ DWORD AdapterIndex, _In_ DWORD Address, _In_ DWORD Netmask)
 
DWORD __stdcall Server_RemoveDNSRegistrations (_In_ PDHCP_SERVER_NAME ServerName)
 

Variables

static CRITICAL_SECTION ApiCriticalSection
 
HANDLE hAdapterStateChangedEvent
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 11 of file api.c.

Function Documentation

◆ ApiFree()

VOID ApiFree ( )

Definition at line 30 of file api.c.

30 {
32}
static CRITICAL_SECTION ApiCriticalSection
Definition: api.c:14
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)

◆ ApiInit()

VOID ApiInit ( )

Definition at line 18 of file api.c.

18 {
20}
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
Definition: synch.c:687

Referenced by init_client().

◆ ApiLock()

◆ ApiUnlock()

◆ InitRpc()

HANDLE InitRpc ( VOID  )

Definition at line 65 of file api.c.

66{
68}
DWORD WINAPI RpcThreadRoutine(LPVOID lpParameter)
Definition: api.c:36
#define NULL
Definition: types.h:112
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition: thread.c:137

Referenced by ServiceMain().

◆ RpcThreadRoutine()

DWORD WINAPI RpcThreadRoutine ( LPVOID  lpParameter)

Definition at line 36 of file api.c.

38{
40
41 Status = RpcServerUseProtseqEpW(L"ncacn_np", 20, L"\\pipe\\dhcpcsvc", NULL);
42 if (Status != RPC_S_OK)
43 {
44 DPRINT1("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status);
45 return 0;
46 }
47
48 Status = RpcServerRegisterIf(Server_dhcpcsvc_v0_0_s_ifspec, NULL, NULL);
49 if (Status != RPC_S_OK)
50 {
51 DPRINT1("RpcServerRegisterIf() failed (Status %lx)\n", Status);
52 return 0;
53 }
54
56 if (Status != RPC_S_OK)
57 {
58 DPRINT1("RpcServerListen() failed (Status %lx)\n", Status);
59 }
60
61 return 0;
62}
#define DPRINT1
Definition: precomp.h:8
#define FALSE
Definition: types.h:117
#define L(x)
Definition: resources.c:13
Status
Definition: gdiplustypes.h:25
RPC_STATUS WINAPI RpcServerListen(UINT MinimumCallThreads, UINT MaxCalls, UINT DontWait)
Definition: rpc_server.c:1520
RPC_STATUS WINAPI RpcServerRegisterIf(RPC_IF_HANDLE IfSpec, UUID *MgrTypeUuid, RPC_MGR_EPV *MgrEpv)
Definition: rpc_server.c:1116
RPC_STATUS WINAPI RpcServerUseProtseqEpW(RPC_WSTR Protseq, UINT MaxCalls, RPC_WSTR Endpoint, LPVOID SecurityDescriptor)
Definition: rpc_server.c:927
#define RPC_C_LISTEN_MAX_CALLS_DEFAULT
Definition: rpcdce.h:122
#define RPC_S_OK
Definition: rpcnterr.h:22
long RPC_STATUS
Definition: rpc.h:48

Referenced by InitRpc().

◆ Server_AcquireParameters()

DWORD __stdcall Server_AcquireParameters ( _In_ PDHCP_SERVER_NAME  ServerName,
_In_ LPWSTR  AdapterName 
)

Definition at line 148 of file api.c.

151{
152 PDHCP_ADAPTER Adapter;
153 struct protocol* proto;
155
156 DPRINT("Server_AcquireParameters(%S)\n", AdapterName);
157
158 ApiLock();
159
160 Adapter = AdapterFindName(AdapterName);
161 if (Adapter == NULL || Adapter->DhclientState.state == S_STATIC)
162 {
164 goto done;
165 }
166
167 DPRINT("Adapter: %p\n", Adapter);
168
170 if (proto)
172
173 add_protocol(Adapter->DhclientInfo.name,
174 Adapter->DhclientInfo.rfdesc, got_one,
175 &Adapter->DhclientInfo);
176
177 Adapter->DhclientInfo.client->state = S_INIT;
178 state_reboot(&Adapter->DhclientInfo);
179
182
183done:
184 ApiUnlock();
185
186 return ret;
187}
PDHCP_ADAPTER AdapterFindName(const WCHAR *name)
Definition: adapter.c:622
HANDLE hAdapterStateChangedEvent
Definition: dhcpcsvc.c:21
VOID ApiLock()
Definition: api.c:22
VOID ApiUnlock()
Definition: api.c:26
void add_protocol(char *name, int fd, void(*handler)(struct protocol *), void *local)
Definition: dispatch.c:342
void remove_protocol(struct protocol *proto)
Definition: dispatch.c:359
void got_one(struct protocol *l)
Definition: dispatch.c:194
struct protocol * find_protocol_by_adapter(struct interface_info *info)
Definition: dispatch.c:412
#define ERROR_SUCCESS
Definition: deptool.c:10
void state_reboot(void *ipp)
Definition: dhclient.c:172
@ S_INIT
Definition: dhcpd.h:173
@ S_STATIC
Definition: dhcpd.h:179
return ret
Definition: mutex.c:146
unsigned long DWORD
Definition: ntddk_ex.h:95
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
_Must_inspect_result_ _Out_ PNDIS_STATUS _Out_ PNDIS_STATUS _Out_ PNDIS_HANDLE _Out_ PUINT _In_ UINT _In_ NDIS_HANDLE _In_ NDIS_HANDLE _In_ PNDIS_STRING AdapterName
Definition: ndis.h:6016
#define DPRINT
Definition: sndvol32.h:73
struct interface_info DhclientInfo
Definition: rosdhcp.h:86
struct client_state DhclientState
Definition: rosdhcp.h:87
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
Definition: synch.c:669

◆ Server_AcquireParametersByBroadcast()

DWORD __stdcall Server_AcquireParametersByBroadcast ( _In_ PDHCP_SERVER_NAME  ServerName,
_In_ LPWSTR  AdapterName 
)

Definition at line 192 of file api.c.

195{
196 DPRINT1("Server_AcquireParametersByBroadcast(%S) is unimplemented!\n", AdapterName);
197 return ERROR_SUCCESS;
198}

◆ Server_EnableDhcp()

DWORD __stdcall Server_EnableDhcp ( _In_ PDHCP_SERVER_NAME  ServerName,
_In_ LPWSTR  AdapterName,
_In_ BOOL  Enable 
)

Definition at line 81 of file api.c.

85{
86 PDHCP_ADAPTER Adapter;
87 struct protocol* proto;
89
90 DPRINT1("Server_EnableDhcp(%S %u)\n", AdapterName, Enable);
91
92 ApiLock();
93
95 if (Adapter == NULL)
96 {
98 goto done;
99 }
100
101 DPRINT1("Adapter: %p\n", Adapter);
102
103 if (Enable)
104 {
105 DPRINT1("Enable DHCP for Adapter: %p\n", Adapter);
106
107 if (Adapter->DhclientState.state != S_STATIC)
108 {
109 DPRINT1("The Adapter is already enabled!\n");
110 goto done;
111 }
112
113 add_protocol(Adapter->DhclientInfo.name,
114 Adapter->DhclientInfo.rfdesc, got_one,
115 &Adapter->DhclientInfo);
116
117 Adapter->DhclientInfo.client->state = S_INIT;
118 state_reboot(&Adapter->DhclientInfo);
119 }
120 else
121 {
122 DPRINT1("Disable DHCP for Adapter: %p\n", Adapter);
123
124 if (Adapter->DhclientState.state == S_STATIC)
125 {
126 DPRINT1("The Adapter is already disabled!\n");
127 goto done;
128 }
129
130 Adapter->DhclientState.state = S_STATIC;
132 if (proto)
134 }
135
138
139done:
140 ApiUnlock();
141
142 return ret;
143}
_In_ ULONGLONG _In_ ULONGLONG _In_ BOOLEAN Enable
Definition: ntddpcm.h:142

Referenced by DhcpNotifyConfigChangeEx().

◆ Server_FallbackRefreshParams()

DWORD __stdcall Server_FallbackRefreshParams ( _In_ PDHCP_SERVER_NAME  ServerName,
_In_ LPWSTR  AdapterName 
)

Definition at line 242 of file api.c.

245{
246 PDHCP_ADAPTER Adapter;
247 HKEY hAdapterKey;
249
250 DPRINT("Server_FallbackRefreshParams(%S)\n", AdapterName);
251
252 ApiLock();
253
254 Adapter = AdapterFindName(AdapterName);
255 if (Adapter == NULL)
256 {
258 goto done;
259 }
260
261 DPRINT("Adapter: %p\n", Adapter);
262
263 if (Adapter->AlternateConfiguration)
264 {
266 Adapter->AlternateConfiguration = NULL;
267 }
268
269 hAdapterKey = FindAdapterKey(Adapter);
270 if (hAdapterKey)
271 {
272 ret = LoadAlternateConfiguration(Adapter, hAdapterKey);
273 RegCloseKey(hAdapterKey);
274 }
275
276done:
277 ApiUnlock();
278
279 return ret;
280}
HKEY FindAdapterKey(PDHCP_ADAPTER Adapter)
Definition: adapter.c:105
DWORD LoadAlternateConfiguration(PDHCP_ADAPTER Adapter, HKEY hAdapterKey)
Definition: adapter.c:154
#define RegCloseKey(hKey)
Definition: registry.h:49
#define free
Definition: debug_ros.c:5
PALTERNATE_CONFIGURATION AlternateConfiguration
Definition: rosdhcp.h:80

◆ Server_ReleaseParameters()

DWORD __stdcall Server_ReleaseParameters ( _In_ PDHCP_SERVER_NAME  ServerName,
_In_ LPWSTR  AdapterName 
)

Definition at line 203 of file api.c.

206{
207 PDHCP_ADAPTER Adapter;
208 struct protocol* proto;
210
211 DPRINT("Server_ReleaseParameters(%S)\n", AdapterName);
212
213 ApiLock();
214
215 Adapter = AdapterFindName(AdapterName);
216 if (Adapter == NULL)
217 {
219 goto done;
220 }
221
222 DPRINT("Adapter: %p\n", Adapter);
223
224 state_release(&Adapter->DhclientInfo);
225
227 if (proto)
229
232
233done:
234 ApiUnlock();
235
236 return ret;
237}
void state_release(void *ipp)
Definition: dhclient.c:231

◆ Server_RemoveDNSRegistrations()

DWORD __stdcall Server_RemoveDNSRegistrations ( _In_ PDHCP_SERVER_NAME  ServerName)

Definition at line 343 of file api.c.

345{
346 DPRINT1("Server_RemoveDNSRegistrations()\n");
347 /* FIXME: Call dnsapi.DnsRemoveRegistrations() */
348 return ERROR_SUCCESS;
349}

◆ Server_StaticRefreshParams()

DWORD __stdcall Server_StaticRefreshParams ( _In_ PDHCP_SERVER_NAME  ServerName,
_In_ DWORD  AdapterIndex,
_In_ DWORD  Address,
_In_ DWORD  Netmask 
)

Definition at line 286 of file api.c.

291{
292 PDHCP_ADAPTER Adapter;
293 struct protocol* proto;
295
296 DPRINT("Server_StaticRefreshParams()\n");
297
298 ApiLock();
299
300 Adapter = AdapterFindIndex(AdapterIndex);
301 if (Adapter == NULL)
302 {
304 goto done;
305 }
306
307 DPRINT("Adapter: %p\n", Adapter);
308
309 if (Adapter->NteContext)
310 {
311 DeleteIPAddress(Adapter->NteContext);
312 Adapter->NteContext = 0;
313 }
314 if (Adapter->RouterMib.dwForwardNextHop)
315 {
317 Adapter->RouterMib.dwForwardNextHop = 0;
318 }
319
320 Adapter->DhclientState.state = S_STATIC;
322 if (proto)
324
326 Netmask,
327 AdapterIndex,
328 &Adapter->NteContext,
329 &Adapter->NteInstance);
330
333
334done:
335 ApiUnlock();
336
337 return ret;
338}
PDHCP_ADAPTER AdapterFindIndex(unsigned int indx)
Definition: adapter.c:608
DWORD WINAPI AddIPAddress(IPAddr Address, IPMask Netmask, DWORD IfIndex, PULONG NteContext, PULONG NteInstance)
Definition: iphlpapi_main.c:67
DWORD WINAPI DeleteIpForwardEntry(PMIB_IPFORWARDROW pRoute)
DWORD WINAPI DeleteIPAddress(ULONG NTEContext)
static WCHAR Address[46]
Definition: ping.c:68
ULONG NteContext
Definition: rosdhcp.h:85
ULONG NteInstance
Definition: rosdhcp.h:85
MIB_IPFORWARDROW RouterMib
Definition: rosdhcp.h:82
DWORD dwForwardNextHop
Definition: ipmib.h:74

◆ ShutdownRpc()

VOID ShutdownRpc ( VOID  )

Definition at line 71 of file api.c.

72{
74}
RPC_STATUS WINAPI RpcMgmtStopServerListening(RPC_BINDING_HANDLE Binding)
Definition: rpc_server.c:1596

Referenced by ServiceMain().

Variable Documentation

◆ ApiCriticalSection

CRITICAL_SECTION ApiCriticalSection
static

Definition at line 14 of file api.c.

Referenced by ApiFree(), ApiInit(), ApiLock(), and ApiUnlock().

◆ hAdapterStateChangedEvent

HANDLE hAdapterStateChangedEvent
extern