Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygendhcpcsvc.c
Go to the documentation of this file.
00001 /* 00002 * COPYRIGHT: See COPYING in the top level directory 00003 * PROJECT: ReactOS system libraries 00004 * FILE: lib/dhcpcapi/dhcpcapi.c 00005 * PURPOSE: Client API for DHCP 00006 * COPYRIGHT: Copyright 2005 Art Yerkes <ayerkes@speakeasy.net> 00007 */ 00008 00009 #include <rosdhcp.h> 00010 00011 #define NDEBUG 00012 #include <debug.h> 00013 00014 static HANDLE PipeHandle = INVALID_HANDLE_VALUE; 00015 00016 DWORD APIENTRY DhcpCApiInitialize(LPDWORD Version) { 00017 DWORD PipeMode; 00018 00019 /* Wait for the pipe to be available */ 00020 if (WaitNamedPipeW(DHCP_PIPE_NAME, NMPWAIT_USE_DEFAULT_WAIT)) 00021 { 00022 /* It's available, let's try to open it */ 00023 PipeHandle = CreateFileW(DHCP_PIPE_NAME, 00024 GENERIC_READ | GENERIC_WRITE, 00025 FILE_SHARE_READ | FILE_SHARE_WRITE, 00026 NULL, 00027 OPEN_EXISTING, 00028 0, 00029 NULL); 00030 00031 /* Check if we succeeded in opening the pipe */ 00032 if (PipeHandle == INVALID_HANDLE_VALUE) 00033 { 00034 /* We didn't */ 00035 return GetLastError(); 00036 } 00037 else 00038 { 00039 /* Change the pipe into message mode */ 00040 PipeMode = PIPE_READMODE_MESSAGE; 00041 if (!SetNamedPipeHandleState(PipeHandle, &PipeMode, NULL, NULL)) 00042 { 00043 /* Mode change failed */ 00044 CloseHandle(PipeHandle); 00045 PipeHandle = INVALID_HANDLE_VALUE; 00046 return GetLastError(); 00047 } 00048 else 00049 { 00050 /* We're good to go */ 00051 *Version = 2; 00052 return NO_ERROR; 00053 } 00054 } 00055 } 00056 else 00057 { 00058 /* No good, we failed */ 00059 return GetLastError(); 00060 } 00061 } 00062 00063 VOID APIENTRY DhcpCApiCleanup() { 00064 CloseHandle(PipeHandle); 00065 PipeHandle = INVALID_HANDLE_VALUE; 00066 } 00067 00068 DWORD APIENTRY DhcpQueryHWInfo( DWORD AdapterIndex, 00069 PDWORD MediaType, 00070 PDWORD Mtu, 00071 PDWORD Speed ) { 00072 COMM_DHCP_REQ Req; 00073 COMM_DHCP_REPLY Reply; 00074 DWORD BytesRead; 00075 BOOL Result; 00076 00077 ASSERT(PipeHandle != INVALID_HANDLE_VALUE); 00078 00079 Req.Type = DhcpReqQueryHWInfo; 00080 Req.AdapterIndex = AdapterIndex; 00081 00082 Result = TransactNamedPipe(PipeHandle, 00083 &Req, sizeof(Req), 00084 &Reply, sizeof(Reply), 00085 &BytesRead, NULL); 00086 if (!Result) 00087 { 00088 /* Pipe transaction failed */ 00089 return 0; 00090 } 00091 00092 if( !Reply.Reply ) return 0; 00093 else { 00094 *MediaType = Reply.QueryHWInfo.MediaType; 00095 *Mtu = Reply.QueryHWInfo.Mtu; 00096 *Speed = Reply.QueryHWInfo.Speed; 00097 return 1; 00098 } 00099 } 00100 00101 DWORD APIENTRY DhcpLeaseIpAddress( DWORD AdapterIndex ) { 00102 COMM_DHCP_REQ Req; 00103 COMM_DHCP_REPLY Reply; 00104 DWORD BytesRead; 00105 BOOL Result; 00106 00107 ASSERT(PipeHandle != INVALID_HANDLE_VALUE); 00108 00109 Req.Type = DhcpReqLeaseIpAddress; 00110 Req.AdapterIndex = AdapterIndex; 00111 00112 Result = TransactNamedPipe(PipeHandle, 00113 &Req, sizeof(Req), 00114 &Reply, sizeof(Reply), 00115 &BytesRead, NULL); 00116 if (!Result) 00117 { 00118 /* Pipe transaction failed */ 00119 return 0; 00120 } 00121 00122 return Reply.Reply; 00123 } 00124 00125 DWORD APIENTRY DhcpReleaseIpAddressLease( DWORD AdapterIndex ) { 00126 COMM_DHCP_REQ Req; 00127 COMM_DHCP_REPLY Reply; 00128 DWORD BytesRead; 00129 BOOL Result; 00130 00131 ASSERT(PipeHandle != INVALID_HANDLE_VALUE); 00132 00133 Req.Type = DhcpReqReleaseIpAddress; 00134 Req.AdapterIndex = AdapterIndex; 00135 00136 Result = TransactNamedPipe(PipeHandle, 00137 &Req, sizeof(Req), 00138 &Reply, sizeof(Reply), 00139 &BytesRead, NULL); 00140 if (!Result) 00141 { 00142 /* Pipe transaction failed */ 00143 return 0; 00144 } 00145 00146 return Reply.Reply; 00147 } 00148 00149 DWORD APIENTRY DhcpRenewIpAddressLease( DWORD AdapterIndex ) { 00150 COMM_DHCP_REQ Req; 00151 COMM_DHCP_REPLY Reply; 00152 DWORD BytesRead; 00153 BOOL Result; 00154 00155 ASSERT(PipeHandle != INVALID_HANDLE_VALUE); 00156 00157 Req.Type = DhcpReqRenewIpAddress; 00158 Req.AdapterIndex = AdapterIndex; 00159 00160 Result = TransactNamedPipe(PipeHandle, 00161 &Req, sizeof(Req), 00162 &Reply, sizeof(Reply), 00163 &BytesRead, NULL); 00164 if (!Result) 00165 { 00166 /* Pipe transaction failed */ 00167 return 0; 00168 } 00169 00170 return Reply.Reply; 00171 } 00172 00173 DWORD APIENTRY DhcpStaticRefreshParams( DWORD AdapterIndex, 00174 DWORD Address, 00175 DWORD Netmask ) { 00176 COMM_DHCP_REQ Req; 00177 COMM_DHCP_REPLY Reply; 00178 DWORD BytesRead; 00179 BOOL Result; 00180 00181 ASSERT(PipeHandle != INVALID_HANDLE_VALUE); 00182 00183 Req.Type = DhcpReqStaticRefreshParams; 00184 Req.AdapterIndex = AdapterIndex; 00185 Req.Body.StaticRefreshParams.IPAddress = Address; 00186 Req.Body.StaticRefreshParams.Netmask = Netmask; 00187 00188 Result = TransactNamedPipe(PipeHandle, 00189 &Req, sizeof(Req), 00190 &Reply, sizeof(Reply), 00191 &BytesRead, NULL); 00192 if (!Result) 00193 { 00194 /* Pipe transaction failed */ 00195 return 0; 00196 } 00197 00198 return Reply.Reply; 00199 } 00200 00228 DWORD APIENTRY 00229 DhcpNotifyConfigChange(LPWSTR ServerName, 00230 LPWSTR AdapterName, 00231 BOOL NewIpAddress, 00232 DWORD IpIndex, 00233 DWORD IpAddress, 00234 DWORD SubnetMask, 00235 int DhcpAction) 00236 { 00237 DbgPrint("DHCPCSVC: DhcpNotifyConfigChange not implemented yet\n"); 00238 return 0; 00239 } 00240 00265 DWORD APIENTRY DhcpRosGetAdapterInfo( DWORD AdapterIndex, 00266 PBOOL DhcpEnabled, 00267 PDWORD DhcpServer, 00268 time_t *LeaseObtained, 00269 time_t *LeaseExpires ) 00270 { 00271 COMM_DHCP_REQ Req; 00272 COMM_DHCP_REPLY Reply; 00273 DWORD BytesRead; 00274 BOOL Result; 00275 00276 ASSERT(PipeHandle != INVALID_HANDLE_VALUE); 00277 00278 Req.Type = DhcpReqGetAdapterInfo; 00279 Req.AdapterIndex = AdapterIndex; 00280 00281 Result = TransactNamedPipe(PipeHandle, 00282 &Req, sizeof(Req), 00283 &Reply, sizeof(Reply), 00284 &BytesRead, NULL); 00285 00286 if ( 0 != Result && 0 != Reply.Reply ) { 00287 *DhcpEnabled = Reply.GetAdapterInfo.DhcpEnabled; 00288 } else { 00289 *DhcpEnabled = FALSE; 00290 } 00291 if ( *DhcpEnabled ) { 00292 *DhcpServer = Reply.GetAdapterInfo.DhcpServer; 00293 *LeaseObtained = Reply.GetAdapterInfo.LeaseObtained; 00294 *LeaseExpires = Reply.GetAdapterInfo.LeaseExpires; 00295 } else { 00296 *DhcpServer = INADDR_NONE; 00297 *LeaseObtained = 0; 00298 *LeaseExpires = 0; 00299 } 00300 00301 return Reply.Reply; 00302 } 00303 00304 INT WINAPI 00305 DllMain(PVOID hinstDll, 00306 ULONG dwReason, 00307 PVOID reserved) 00308 { 00309 switch (dwReason) 00310 { 00311 case DLL_PROCESS_ATTACH: 00312 DisableThreadLibraryCalls(hinstDll); 00313 break; 00314 00315 case DLL_PROCESS_DETACH: 00316 break; 00317 } 00318 00319 return TRUE; 00320 } 00321 00322 /* EOF */ Generated on Sat May 26 2012 04:22:05 for ReactOS by
1.7.6.1
|