33 lines
680 B
C#
33 lines
680 B
C#
|
|
using DotNetDDI.Services.Dhcp;
|
||
|
|
|
||
|
|
using nietras.SeparatedValues;
|
||
|
|
|
||
|
|
namespace DotNetDDI.Integrations.Kea;
|
||
|
|
|
||
|
|
public class KeaDhcp4LeaseHandler : IKeaDhcpLeaseHandler
|
||
|
|
{
|
||
|
|
public DhcpLeaseChange? Handle(in SepReader.Row row)
|
||
|
|
{
|
||
|
|
if (KeaDhcp4Lease.Parse(row) is not { } lease)
|
||
|
|
{
|
||
|
|
goto exitNull;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (lease.State != 0)
|
||
|
|
{
|
||
|
|
goto exitNull;
|
||
|
|
}
|
||
|
|
|
||
|
|
DhcpLeaseIdentifier identifier = lease.ClientId switch
|
||
|
|
{
|
||
|
|
string clientId when !string.IsNullOrWhiteSpace(clientId) => new DhcpLeaseClientIdentifier(clientId),
|
||
|
|
_ => new DhcpLeaseHWAddrIdentifier(lease.HWAddr)
|
||
|
|
};
|
||
|
|
|
||
|
|
return new(lease.Address, lease.Hostname, identifier, lease.ValidLifetime);
|
||
|
|
|
||
|
|
exitNull:
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
}
|