Example #1
0
        private static uint HandleDeleteClientHook(uint IpAddress, IntPtr HwAddress, uint HwAddressLength, uint Reserved, uint ClientType)
        {
            var stopPropagation = false;

            var leaseAddress = DhcpServerIpAddress.FromNative(IpAddress);

            if (HwAddressLength <= DhcpServerHardwareAddress.MaximumLength)
            {
                var leaseHardwareAddress = DhcpServerHardwareAddress.FromNative(DhcpServerHardwareType.Ethernet, HwAddress, (int)HwAddressLength);

                foreach (var consumer in Consumers)
                {
                    if (consumer.SupportFlags.HasFlag(CalloutConsumerSupportFlags.DeleteClient))
                    {
                        try
                        {
                            consumer.Proxy.DeleteClient(leaseAddress, leaseHardwareAddress, ref stopPropagation);
                        }
                        catch (Win32Exception ex)
                        {
                            return((uint)ex.NativeErrorCode);
                        }
                        catch (Exception)
                        {
                            return(0x1U); //ERROR_INVALID_FUNCTION
                        }

                        // stop propagation if instructed
                        if (stopPropagation)
                        {
                            return(ERROR_SUCCESS);
                        }
                    }
                }
            }

            // chain
            if (!stopPropagation && ChainTable.DhcpDeleteClientHook != null)
            {
                return(ChainTable.DhcpDeleteClientHook(IpAddress, HwAddress, HwAddressLength, Reserved, ClientType));
            }

            return(ERROR_SUCCESS);
        }
        public void DeleteClient(DhcpServerIpAddress LeaseAddress, DhcpServerHardwareAddress LeaseHardwareAddress, ref bool StopPropagation)
        {
            try
            {
                var sb = new StringBuilder();
                sb.AppendLine("DELETE CLIENT:");
                sb.AppendLine($"  Lease Address: {LeaseAddress}");
                sb.AppendLine($"  Hardware Address: {LeaseHardwareAddress}");
                sb.AppendLine("---------------------");

                WriteLog(sb.ToString());
            }
            catch (Exception ex)
            {
                WriteLog($"DELETE CLIENT ERROR: {ex.Message} [{ex.GetType().Name}]");
                WriteLog(ex.StackTrace);

                throw;
            }
        }
 public void DeleteClient(DhcpServerIpAddress LeaseAddress, DhcpServerHardwareAddress LeaseHardwareAddress, ref bool StopPropagation)
 {
     deleteClientHandler.DeleteClient(LeaseAddress, LeaseHardwareAddress, ref StopPropagation);
 }
 public DHCP_IP_RESERVATION_V4_Managed(DhcpServerIpAddress address, DhcpServerHardwareAddress reservedForClient, DhcpServerClientTypes allowedClientTypes)
     : this(reservedIpAddress : address.ToNativeAsNetwork(),
            reservedForClient : reservedForClient.ToNativeClientUid(),
            allowedClientTypes : (DHCP_CLIENT_TYPE)allowedClientTypes)
 {
 }
 public DHCP_IP_RESERVATION_Managed(DhcpServerIpAddress address, DhcpServerHardwareAddress reservedForClient)
     : this(reservedIpAddress : address.ToNativeAsNetwork(),
            reservedForClient : reservedForClient.ToNativeClientUid())
 {
 }