private static uint HandleAddressOfferHook(IntPtr Packet, uint PacketSize, uint ControlCode, uint IpAddress, uint AltAddress, uint AddrType, uint LeaseTime, IntPtr Reserved, IntPtr PktContext) { var stopPropagation = false; var packet = new DhcpServerPacket(Packet, (int)PacketSize); var controlCode = (OfferAddressControlCodes)ControlCode; var serverAddress = DhcpServerIpAddress.FromNative(IpAddress); var leaseAddress = DhcpServerIpAddress.FromNative(AltAddress); var addressType = (OfferAddressTypes)AddrType; var leaseTime = new TimeSpan(LeaseTime * 10_000_000L); foreach (var consumer in Consumers) { if (consumer.SupportFlags.HasFlag(CalloutConsumerSupportFlags.AddressOffer)) { try { consumer.Proxy.AddressOffer(packet, controlCode, serverAddress, leaseAddress, addressType, leaseTime, ref stopPropagation); } catch (Win32Exception ex) { return((uint)ex.NativeErrorCode); } catch (Exception) { return(0x1U); //ERROR_INVALID_FUNCTION } if (stopPropagation) { return(ERROR_SUCCESS); } } } // chain if (!stopPropagation && ChainTable.DhcpAddressOfferHook != null) { return(ChainTable.DhcpAddressOfferHook(Packet, PacketSize, ControlCode, IpAddress, AltAddress, AddrType, LeaseTime, Reserved, PktContext)); } return(ERROR_SUCCESS); }
private static uint HandleAddressDelHook(IntPtr Packet, uint PacketSize, uint ControlCode, uint IpAddress, uint AltAddress, IntPtr Reserved, IntPtr PktContext) { var stopPropagation = false; var packet = new DhcpServerPacket(Packet, (int)PacketSize); var controlCode = (AddressDeleteControlCodes)ControlCode; var serverAddress = DhcpServerIpAddress.FromNative(IpAddress); var leaseAddress = DhcpServerIpAddress.FromNative(AltAddress); foreach (var consumer in Consumers) { if (consumer.SupportFlags.HasFlag(CalloutConsumerSupportFlags.AddressDelete)) { try { consumer.Proxy.AddressDelete(packet, controlCode, serverAddress, leaseAddress, 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.DhcpAddressDelHook != null) { return(ChainTable.DhcpAddressDelHook(Packet, PacketSize, ControlCode, IpAddress, AltAddress, Reserved, PktContext)); } return(ERROR_SUCCESS); }
private static uint HandleHandleOptionsHook(IntPtr Packet, uint PacketSize, IntPtr Reserved, IntPtr PktContext, IntPtr ServerOptions) { var stopPropagation = false; var packet = new DhcpServerPacket(Packet, (int)PacketSize); var serverOptions = new DhcpServerPacketOptions(ServerOptions); foreach (var consumer in Consumers) { if (consumer.SupportFlags.HasFlag(CalloutConsumerSupportFlags.HandleOptions)) { try { consumer.Proxy.HandleOptions(packet, serverOptions, 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.DhcpHandleOptionsHook != null) { return(ChainTable.DhcpHandleOptionsHook(Packet, PacketSize, Reserved, PktContext, ServerOptions)); } return(ERROR_SUCCESS); }