From 69b2de46134da3d7d24d87edae8e7c47589c2d4d Mon Sep 17 00:00:00 2001 From: AliveDevil Date: Tue, 2 Jan 2024 00:14:28 +0100 Subject: [PATCH] Review PowerDns types --- src/pdns-dhcp/PowerDns/Methods.cs | 4 ++-- src/pdns-dhcp/PowerDns/Parameters.cs | 4 ++-- src/pdns-dhcp/PowerDns/PowerDnsHandler.cs | 22 ++++++++++++++-------- src/pdns-dhcp/PowerDns/Replies.cs | 8 ++++---- 4 files changed, 22 insertions(+), 16 deletions(-) diff --git a/src/pdns-dhcp/PowerDns/Methods.cs b/src/pdns-dhcp/PowerDns/Methods.cs index 2259203..84ae31b 100644 --- a/src/pdns-dhcp/PowerDns/Methods.cs +++ b/src/pdns-dhcp/PowerDns/Methods.cs @@ -23,6 +23,6 @@ public abstract class Method(TParam parameters) : Method public TParam Parameters => parameters; } -public class InitializeMethod(InitializeMethodParameters parameters) : Method(parameters), IMethod; +public class InitializeMethod(InitializeParameters parameters) : Method(parameters), IMethod; -public class LookupMethod(LookupMethodParameters parameters) : Method(parameters), IMethod; +public class LookupMethod(LookupParameters parameters) : Method(parameters), IMethod; diff --git a/src/pdns-dhcp/PowerDns/Parameters.cs b/src/pdns-dhcp/PowerDns/Parameters.cs index 8e480c7..b4f4285 100644 --- a/src/pdns-dhcp/PowerDns/Parameters.cs +++ b/src/pdns-dhcp/PowerDns/Parameters.cs @@ -11,12 +11,12 @@ public record class MethodParameters : Parameters public Dictionary AdditionalProperties { get; set; } = []; } -public record class InitializeMethodParameters( +public record class InitializeParameters( [property: JsonPropertyName("command")] string Command, [property: JsonPropertyName("timeout")] int Timeout ) : MethodParameters; -public record class LookupMethodParameters( +public record class LookupParameters( [property: JsonPropertyName("qtype")] string Qtype, [property: JsonPropertyName("qname")] string Qname, [property: JsonPropertyName("remote")] string Remote, diff --git a/src/pdns-dhcp/PowerDns/PowerDnsHandler.cs b/src/pdns-dhcp/PowerDns/PowerDnsHandler.cs index d6661b7..42b56f8 100644 --- a/src/pdns-dhcp/PowerDns/PowerDnsHandler.cs +++ b/src/pdns-dhcp/PowerDns/PowerDnsHandler.cs @@ -53,7 +53,7 @@ public class PowerDnsHandler : ConnectionHandler catch (Exception e) { } await JsonSerializer.SerializeAsync(writer, reply, ReplyContext.Default.Reply, connection.ConnectionClosed) - .ConfigureAwait(ConfigureAwaitOptions.SuppressThrowing); + .ConfigureAwait(continueOnCapturedContext: false); } } @@ -106,22 +106,28 @@ public class PowerDnsHandler : ConnectionHandler InitializeMethod { Parameters: { } init } => HandleInitialize(init), LookupMethod { Parameters: { } lookup } => HandleLookup(lookup), - _ => ValueTask.FromResult(new BoolReply(false)) + _ => LogUnhandled(_logger, method) }; + + static ValueTask LogUnhandled(ILogger logger, Method method) + { + logger.LogWarning("Unhandled Method {Method}", method); + return ValueTask.FromResult(BoolReply.False); + } } - private ValueTask HandleInitialize(InitializeMethodParameters method) + private ValueTask HandleInitialize(InitializeParameters parameters) { - return ValueTask.FromResult(BoolReply.True); + return ValueTask.FromResult(BoolReply.True); } - private ValueTask HandleLookup(LookupMethodParameters method) + private ValueTask HandleLookup(LookupParameters parameters) { - switch (method.Qtype.ToLowerInvariant()) + switch (parameters.Qtype.ToUpperInvariant()) { default: - _logger.LogWarning("Unhandled QType {QType}", method.Qtype); - return ValueTask.FromResult(BoolReply.False); + _logger.LogWarning("Unhandled QType {QType}", parameters.Qtype); + return ValueTask.FromResult(BoolReply.False); } } } diff --git a/src/pdns-dhcp/PowerDns/Replies.cs b/src/pdns-dhcp/PowerDns/Replies.cs index b170c9b..0312e44 100644 --- a/src/pdns-dhcp/PowerDns/Replies.cs +++ b/src/pdns-dhcp/PowerDns/Replies.cs @@ -7,22 +7,22 @@ namespace pdns_dhcp.PowerDns; public abstract class Reply; [JsonSerializable(typeof(Reply)), JsonSourceGenerationOptions( - GenerationMode = JsonSourceGenerationMode.Serialization, - PropertyNamingPolicy = JsonKnownNamingPolicy.KebabCaseLower, + GenerationMode = JsonSourceGenerationMode.Metadata, WriteIndented = false )] internal partial class ReplyContext : JsonSerializerContext; public abstract class Reply(T result) : Reply { + [JsonPropertyName("result")] public T Result => result; } public class BoolReply(bool result) : Reply(result) { - public static Reply False { get; } = new BoolReply(false); + public static BoolReply False { get; } = new BoolReply(false); - public static Reply True { get; } = new BoolReply(true); + public static BoolReply True { get; } = new BoolReply(true); } public class LookupReply(QueryResult[] result) : Reply(result);