ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

dhcpcsvc.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.