ReactOS 0.4.16-dev-1946-g52006dd
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_AcquireParameters (_In_ PDHCP_SERVER_NAME ServerName, _In_ LPWSTR AdapterName)
 
DWORD __stdcall Server_ReleaseParameters (_In_ PDHCP_SERVER_NAME ServerName, _In_ LPWSTR AdapterName)
 
DWORD __stdcall Server_QueryHWInfo (_In_ PDHCP_SERVER_NAME ServerName, _In_ DWORD AdapterIndex, _Out_ PDWORD MediaType, _Out_ PDWORD Mtu, _Out_ PDWORD Speed)
 
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:751

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 81 of file api.c.

84{
85 PDHCP_ADAPTER Adapter;
86 struct protocol* proto;
88
89 DPRINT("Server_AcquireParameters()\n");
90
91 ApiLock();
92
94 if (Adapter == NULL || Adapter->DhclientState.state == S_STATIC)
95 {
97 goto done;
98 }
99
100 DPRINT("Adapter: %p\n", Adapter);
101
103 if (proto)
105
106 add_protocol(Adapter->DhclientInfo.name,
107 Adapter->DhclientInfo.rfdesc, got_one,
108 &Adapter->DhclientInfo);
109
110 Adapter->DhclientInfo.client->state = S_INIT;
111 state_reboot(&Adapter->DhclientInfo);
112
115
116done:
117 ApiUnlock();
118
119 return ret;
120}
PDHCP_ADAPTER AdapterFindName(const WCHAR *name)
Definition: adapter.c:514
HANDLE hAdapterStateChangedEvent
Definition: dhcpcsvc.c:20
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:73
struct client_state DhclientState
Definition: rosdhcp.h:74
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
Definition: synch.c:733

◆ Server_QueryHWInfo()

DWORD __stdcall Server_QueryHWInfo ( _In_ PDHCP_SERVER_NAME  ServerName,
_In_ DWORD  AdapterIndex,
_Out_ PDWORD  MediaType,
_Out_ PDWORD  Mtu,
_Out_ PDWORD  Speed 
)

Definition at line 165 of file api.c.

171{
172 PDHCP_ADAPTER Adapter;
174
175 DPRINT("Server_QueryHWInfo()\n");
176
177 ApiLock();
178
179 Adapter = AdapterFindIndex(AdapterIndex);
180 if (Adapter == NULL)
181 {
183 goto done;
184 }
185
186 DPRINT("Adapter: %p\n", Adapter);
187
188 *MediaType = Adapter->IfMib.dwType;
189 *Mtu = Adapter->IfMib.dwMtu;
190 *Speed = Adapter->IfMib.dwSpeed;
191
192done:
193 ApiUnlock();
194
195 return ret;
196}
PDHCP_ADAPTER AdapterFindIndex(unsigned int indx)
Definition: adapter.c:500
MIB_IFROW IfMib
Definition: rosdhcp.h:68
DWORD dwSpeed
Definition: ifmib.h:41
DWORD dwMtu
Definition: ifmib.h:40
DWORD dwType
Definition: ifmib.h:39

◆ Server_ReleaseParameters()

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

Definition at line 126 of file api.c.

129{
130 PDHCP_ADAPTER Adapter;
131 struct protocol* proto;
133
134 DPRINT("Server_ReleaseParameters()\n");
135
136 ApiLock();
137
138 Adapter = AdapterFindName(AdapterName);
139 if (Adapter == NULL)
140 {
142 goto done;
143 }
144
145 DPRINT("Adapter: %p\n", Adapter);
146
147 state_release(&Adapter->DhclientInfo);
148
150 if (proto)
152
155
156done:
157 ApiUnlock();
158
159 return ret;
160}
void state_release(void *ipp)
Definition: dhclient.c:231

◆ Server_RemoveDNSRegistrations()

DWORD __stdcall Server_RemoveDNSRegistrations ( _In_ PDHCP_SERVER_NAME  ServerName)

Definition at line 258 of file api.c.

260{
261 DPRINT1("Server_RemoveDNSRegistrations()\n");
262 /* FIXME: Call dnsapi.DnsRemoveRegistrations() */
263 return ERROR_SUCCESS;
264}

◆ Server_StaticRefreshParams()

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

Definition at line 201 of file api.c.

206{
207 PDHCP_ADAPTER Adapter;
208 struct protocol* proto;
210
211 DPRINT("Server_StaticRefreshParams()\n");
212
213 ApiLock();
214
215 Adapter = AdapterFindIndex(AdapterIndex);
216 if (Adapter == NULL)
217 {
219 goto done;
220 }
221
222 DPRINT("Adapter: %p\n", Adapter);
223
224 if (Adapter->NteContext)
225 {
226 DeleteIPAddress(Adapter->NteContext);
227 Adapter->NteContext = 0;
228 }
229 if (Adapter->RouterMib.dwForwardNextHop)
230 {
232 Adapter->RouterMib.dwForwardNextHop = 0;
233 }
234
235 Adapter->DhclientState.state = S_STATIC;
237 if (proto)
239
241 Netmask,
242 AdapterIndex,
243 &Adapter->NteContext,
244 &Adapter->NteInstance);
245
248
249done:
250 ApiUnlock();
251
252 return ret;
253}
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:72
ULONG NteInstance
Definition: rosdhcp.h:72
MIB_IPFORWARDROW RouterMib
Definition: rosdhcp.h:69
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