ReactOS 0.4.16-dev-321-g63bb46a
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 DSLeaseIpAddress (PipeSendFunc Send, HANDLE CommPipe, COMM_DHCP_REQ *Req)
 
DWORD DSQueryHWInfo (PipeSendFunc Send, HANDLE CommPipe, COMM_DHCP_REQ *Req)
 
DWORD DSReleaseIpAddressLease (PipeSendFunc Send, HANDLE CommPipe, COMM_DHCP_REQ *Req)
 
DWORD DSRenewIpAddressLease (PipeSendFunc Send, HANDLE CommPipe, COMM_DHCP_REQ *Req)
 
DWORD DSStaticRefreshParams (PipeSendFunc Send, HANDLE CommPipe, COMM_DHCP_REQ *Req)
 
DWORD DSGetAdapterInfo (PipeSendFunc Send, HANDLE CommPipe, COMM_DHCP_REQ *Req)
 

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()

◆ DSGetAdapterInfo()

DWORD DSGetAdapterInfo ( PipeSendFunc  Send,
HANDLE  CommPipe,
COMM_DHCP_REQ Req 
)

Definition at line 209 of file api.c.

209 {
210 COMM_DHCP_REPLY Reply;
211 PDHCP_ADAPTER Adapter;
212
213 ApiLock();
214
215 Adapter = AdapterFindIndex( Req->AdapterIndex );
216
217 Reply.Reply = Adapter ? 1 : 0;
218
219 if( Adapter ) {
220 Reply.GetAdapterInfo.DhcpEnabled = (S_STATIC != Adapter->DhclientState.state);
221 if (S_BOUND == Adapter->DhclientState.state) {
222 if (sizeof(Reply.GetAdapterInfo.DhcpServer) ==
223 Adapter->DhclientState.active->serveraddress.len) {
224 memcpy(&Reply.GetAdapterInfo.DhcpServer,
225 Adapter->DhclientState.active->serveraddress.iabuf,
226 Adapter->DhclientState.active->serveraddress.len);
227 } else {
228 DPRINT1("Unexpected server address len %d\n",
229 Adapter->DhclientState.active->serveraddress.len);
230 Reply.GetAdapterInfo.DhcpServer = htonl(INADDR_NONE);
231 }
232 Reply.GetAdapterInfo.LeaseObtained = Adapter->DhclientState.active->obtained;
233 Reply.GetAdapterInfo.LeaseExpires = Adapter->DhclientState.active->expiry;
234 } else {
235 Reply.GetAdapterInfo.DhcpServer = htonl(INADDR_NONE);
236 Reply.GetAdapterInfo.LeaseObtained = 0;
237 Reply.GetAdapterInfo.LeaseExpires = 0;
238 }
239 }
240
241 ApiUnlock();
242
243 return Send(CommPipe, &Reply );
244}
#define INADDR_NONE
Definition: tcp.c:42
#define DPRINT1
Definition: precomp.h:8
PDHCP_ADAPTER AdapterFindIndex(unsigned int indx)
Definition: adapter.c:498
VOID ApiLock()
Definition: api.c:22
VOID ApiUnlock()
Definition: api.c:26
@ S_BOUND
Definition: dhcpd.h:175
@ S_STATIC
Definition: dhcpd.h:178
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define htonl(x)
Definition: module.h:214
struct client_state DhclientState
Definition: rosdhcp.h:72
struct _COMM_DHCP_REPLY::@3458 GetAdapterInfo

Referenced by PipeThreadProc().

◆ DSLeaseIpAddress()

DWORD DSLeaseIpAddress ( PipeSendFunc  Send,
HANDLE  CommPipe,
COMM_DHCP_REQ Req 
)

Definition at line 36 of file api.c.

36 {
37 COMM_DHCP_REPLY Reply;
38 PDHCP_ADAPTER Adapter;
39 struct protocol* proto;
40
41 ApiLock();
42
43 Adapter = AdapterFindIndex( Req->AdapterIndex );
44
45 Reply.Reply = Adapter ? 1 : 0;
46
47 if( Adapter ) {
49 if (proto)
51
52 add_protocol( Adapter->DhclientInfo.name,
53 Adapter->DhclientInfo.rfdesc, got_one,
54 &Adapter->DhclientInfo );
55
56 Adapter->DhclientInfo.client->state = S_INIT;
57 state_reboot(&Adapter->DhclientInfo);
58
61 }
62
63 ApiUnlock();
64
65 return Send(CommPipe, &Reply );
66}
HANDLE hAdapterStateChangedEvent
Definition: dhcpcsvc.c:20
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
void state_reboot(void *ipp)
Definition: dhclient.c:172
@ S_INIT
Definition: dhcpd.h:172
#define NULL
Definition: types.h:112
struct interface_info DhclientInfo
Definition: rosdhcp.h:71
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
Definition: synch.c:733

Referenced by PipeThreadProc().

◆ DSQueryHWInfo()

DWORD DSQueryHWInfo ( PipeSendFunc  Send,
HANDLE  CommPipe,
COMM_DHCP_REQ Req 
)

Definition at line 68 of file api.c.

68 {
69 COMM_DHCP_REPLY Reply;
70 PDHCP_ADAPTER Adapter;
71
72 ApiLock();
73
74 Adapter = AdapterFindIndex( Req->AdapterIndex );
75
76 Reply.Reply = Adapter ? 1 : 0;
77
78 if (Adapter) {
79 Reply.QueryHWInfo.AdapterIndex = Req->AdapterIndex;
80 Reply.QueryHWInfo.MediaType = Adapter->IfMib.dwType;
81 Reply.QueryHWInfo.Mtu = Adapter->IfMib.dwMtu;
82 Reply.QueryHWInfo.Speed = Adapter->IfMib.dwSpeed;
83 }
84
85 ApiUnlock();
86
87 return Send(CommPipe, &Reply );
88}
MIB_IFROW IfMib
Definition: rosdhcp.h:66
DWORD dwSpeed
Definition: ifmib.h:41
DWORD dwMtu
Definition: ifmib.h:40
DWORD dwType
Definition: ifmib.h:39
struct _COMM_DHCP_REPLY::@3457 QueryHWInfo

Referenced by PipeThreadProc().

◆ DSReleaseIpAddressLease()

DWORD DSReleaseIpAddressLease ( PipeSendFunc  Send,
HANDLE  CommPipe,
COMM_DHCP_REQ Req 
)

Definition at line 90 of file api.c.

90 {
91 COMM_DHCP_REPLY Reply;
92 PDHCP_ADAPTER Adapter;
93 struct protocol* proto;
94
95 ApiLock();
96
97 Adapter = AdapterFindIndex( Req->AdapterIndex );
98
99 Reply.Reply = Adapter ? 1 : 0;
100
101 if( Adapter ) {
102 if (Adapter->NteContext)
103 {
104 DeleteIPAddress( Adapter->NteContext );
105 Adapter->NteContext = 0;
106 }
107 if (Adapter->RouterMib.dwForwardNextHop)
108 {
109 DeleteIpForwardEntry( &Adapter->RouterMib );
110 Adapter->RouterMib.dwForwardNextHop = 0;
111 }
112
114 if (proto)
116
117 Adapter->DhclientInfo.client->active = NULL;
118 Adapter->DhclientInfo.client->state = S_INIT;
119
122 }
123
124 ApiUnlock();
125
126 return Send(CommPipe, &Reply );
127}
DWORD WINAPI DeleteIpForwardEntry(PMIB_IPFORWARDROW pRoute)
DWORD WINAPI DeleteIPAddress(ULONG NTEContext)
ULONG NteContext
Definition: rosdhcp.h:70
MIB_IPFORWARDROW RouterMib
Definition: rosdhcp.h:67
DWORD dwForwardNextHop
Definition: ipmib.h:74

Referenced by PipeThreadProc().

◆ DSRenewIpAddressLease()

DWORD DSRenewIpAddressLease ( PipeSendFunc  Send,
HANDLE  CommPipe,
COMM_DHCP_REQ Req 
)

Definition at line 129 of file api.c.

129 {
130 COMM_DHCP_REPLY Reply;
131 PDHCP_ADAPTER Adapter;
132 struct protocol* proto;
133
134 ApiLock();
135
136 Adapter = AdapterFindIndex( Req->AdapterIndex );
137
138 if( !Adapter || Adapter->DhclientState.state == S_STATIC ) {
139 Reply.Reply = 0;
140 ApiUnlock();
141 return Send(CommPipe, &Reply );
142 }
143
144 Reply.Reply = 1;
145
147 if (proto)
149
150 add_protocol( Adapter->DhclientInfo.name,
151 Adapter->DhclientInfo.rfdesc, got_one,
152 &Adapter->DhclientInfo );
153
154 Adapter->DhclientInfo.client->state = S_INIT;
155 state_reboot(&Adapter->DhclientInfo);
156
159
160 ApiUnlock();
161
162 return Send(CommPipe, &Reply );
163}

Referenced by PipeThreadProc().

◆ DSStaticRefreshParams()

DWORD DSStaticRefreshParams ( PipeSendFunc  Send,
HANDLE  CommPipe,
COMM_DHCP_REQ Req 
)

Definition at line 165 of file api.c.

165 {
167 COMM_DHCP_REPLY Reply;
168 PDHCP_ADAPTER Adapter;
169 struct protocol* proto;
170
171 ApiLock();
172
173 Adapter = AdapterFindIndex( Req->AdapterIndex );
174
175 Reply.Reply = Adapter ? 1 : 0;
176
177 if( Adapter ) {
178 if (Adapter->NteContext)
179 {
180 DeleteIPAddress( Adapter->NteContext );
181 Adapter->NteContext = 0;
182 }
183 if (Adapter->RouterMib.dwForwardNextHop)
184 {
185 DeleteIpForwardEntry( &Adapter->RouterMib );
186 Adapter->RouterMib.dwForwardNextHop = 0;
187 }
188
189 Adapter->DhclientState.state = S_STATIC;
191 if (proto)
194 Req->Body.StaticRefreshParams.Netmask,
195 Req->AdapterIndex,
196 &Adapter->NteContext,
197 &Adapter->NteInstance );
198 Reply.Reply = NT_SUCCESS(Status);
199
202 }
203
204 ApiUnlock();
205
206 return Send(CommPipe, &Reply );
207}
LONG NTSTATUS
Definition: precomp.h:26
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
Status
Definition: gdiplustypes.h:25
DWORD WINAPI AddIPAddress(IPAddr Address, IPMask Netmask, DWORD IfIndex, PULONG NteContext, PULONG NteInstance)
Definition: iphlpapi_main.c:67
union _COMM_DHCP_REQ::@3452 Body
struct _COMM_DHCP_REQ::@3452::@3456 StaticRefreshParams
ULONG NteInstance
Definition: rosdhcp.h:70

Referenced by PipeThreadProc().

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