Skip to content

Commit

Permalink
Merge pull request #18 from alanedwardes/v1
Browse files Browse the repository at this point in the history
V1
  • Loading branch information
alanedwardes authored May 7, 2023
2 parents eb3e202 + 935eaad commit a8533cb
Show file tree
Hide file tree
Showing 17 changed files with 105 additions and 67 deletions.
2 changes: 1 addition & 1 deletion src/Ae.Dns.AppMetrics/Ae.Dns.AppMetrics.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<TargetFrameworks>netstandard2.0;netstandard2.1;net6.0</TargetFrameworks>
<Version>0.0.21</Version>
<Version>1.0.0</Version>
<WarningsAsErrors>true</WarningsAsErrors>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<Authors>alanedwardes</Authors>
Expand Down
2 changes: 1 addition & 1 deletion src/Ae.Dns.Client/Ae.Dns.Client.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<TargetFrameworks>netstandard2.0;netstandard2.1;net6.0</TargetFrameworks>
<Version>0.0.21</Version>
<Version>1.0.0</Version>
<WarningsAsErrors>true</WarningsAsErrors>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<Authors>alanedwardes</Authors>
Expand Down
2 changes: 1 addition & 1 deletion src/Ae.Dns.Client/DnsCachingClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ private async Task<DnsMessage> GetFreshAnswer(DnsMessage query, CancellationToke
Id = query.Header.Id,
Host = query.Header.Host,
IsQueryResponse = false,
RecusionDesired = query.Header.RecusionDesired,
RecursionDesired = query.Header.RecursionDesired,
QueryClass = query.Header.QueryClass,
QueryType = query.Header.QueryType,
QuestionCount = query.Header.QuestionCount,
Expand Down
2 changes: 1 addition & 1 deletion src/Ae.Dns.Client/DnsFilterClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public void Dispose()
ResponseCode = DnsResponseCode.Refused,
IsQueryResponse = true,
RecursionAvailable = true,
RecusionDesired = query.Header.RecusionDesired,
RecursionDesired = query.Header.RecursionDesired,
Host = query.Header.Host,
QueryClass = query.Header.QueryClass,
QuestionCount = query.Header.QuestionCount,
Expand Down
2 changes: 1 addition & 1 deletion src/Ae.Dns.Client/DnsRebindMitigationClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public async Task<DnsMessage> Query(DnsMessage query, CancellationToken token =
ResponseCode = DnsResponseCode.Refused,
IsQueryResponse = true,
RecursionAvailable = true,
RecusionDesired = query.Header.RecusionDesired,
RecursionDesired = query.Header.RecursionDesired,
Host = query.Header.Host,
QueryClass = query.Header.QueryClass,
QuestionCount = query.Header.QuestionCount,
Expand Down
43 changes: 0 additions & 43 deletions src/Ae.Dns.Client/DnsRoundRobinClient.cs

This file was deleted.

2 changes: 1 addition & 1 deletion src/Ae.Dns.Client/Lookup/DnsStaticLookupClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ private DnsMessage ReturnPointer(DnsMessage query, string foundHost, IDnsLookupS
IsQueryResponse = true,
RecursionAvailable = true,
AnswerRecordCount = 1,
RecusionDesired = query.Header.RecusionDesired,
RecursionDesired = query.Header.RecursionDesired,
Host = query.Header.Host,
QueryClass = query.Header.QueryClass,
QuestionCount = query.Header.QuestionCount,
Expand Down
2 changes: 1 addition & 1 deletion src/Ae.Dns.Protocol/Ae.Dns.Protocol.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<TargetFrameworks>netstandard2.0;netstandard2.1;net6.0</TargetFrameworks>
<Version>0.0.21</Version>
<Version>1.0.0</Version>
<WarningsAsErrors>true</WarningsAsErrors>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<Authors>alanedwardes</Authors>
Expand Down
6 changes: 3 additions & 3 deletions src/Ae.Dns.Protocol/DnsHeader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -117,17 +117,17 @@ public bool Truncation
}

/// <summary>
/// Indicates whether recrusion is desired on this DNS query.
/// Indicates whether recursion is desired on this DNS query.
/// If this is an answer, indicates whether the original query requested recursion.
/// </summary>
public bool RecusionDesired
public bool RecursionDesired
{
get => (Flags & 0x0100) == 0x0100;
set => Flags = value ? (ushort)(Flags | 0x0100) : (ushort)(Flags & (~0x0100));
}

/// <summary>
/// Indicates whether recusion is available.
/// Indicates whether recursion is available.
/// </summary>
public bool RecursionAvailable
{
Expand Down
6 changes: 3 additions & 3 deletions src/Ae.Dns.Protocol/DnsQueryFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public static DnsMessage CreateQuery(string host, DnsQueryType type = DnsQueryTy
QueryClass = DnsQueryClass.IN,
OperationCode = DnsOperationCode.QUERY,
QuestionCount = 1,
RecusionDesired = true
RecursionDesired = true
}
};
}
Expand All @@ -54,7 +54,7 @@ public static DnsHeader Clone(DnsHeader header)
QueryClass = header.QueryClass,
OperationCode = header.OperationCode,
QuestionCount = header.QuestionCount,
RecusionDesired = header.RecusionDesired,
RecursionDesired = header.RecursionDesired,
AdditionalRecordCount = header.AdditionalRecordCount,
AnswerRecordCount = header.AnswerRecordCount,
AuthoritativeAnswer = header.AuthoritativeAnswer,
Expand Down Expand Up @@ -94,7 +94,7 @@ private static string GetReverseLookupHostForIpAddress(IPAddress ipAddress)
{
if (ipAddress.AddressFamily == AddressFamily.InterNetworkV6)
{
return string.Join(".", ipAddress.ToString().Replace(":", string.Empty).ToCharArray().Reverse()) + ".ip6.arpa";
return string.Join(".", string.Concat(ipAddress.GetAddressBytes().Select(x => x.ToString("x2"))).Reverse()) + ".ip6.arpa";
}
else if (ipAddress.AddressFamily == AddressFamily.InterNetwork)
{
Expand Down
9 changes: 9 additions & 0 deletions src/Ae.Dns.Protocol/SocketTaskExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System;
using System.Net;
using System.Net.Sockets;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;

Expand Down Expand Up @@ -31,6 +32,14 @@ public static async Task<int> SendToAsync(this Socket socket, ReadOnlyMemory<byt
// Implementations from https://github.com/dotnet/corefx/blob/v1.0.0/src/System.Net.Sockets/src/System/Net/Sockets/SocketTaskExtensions.cs
public static Task<int> ReceiveAsync(this Socket socket, ArraySegment<byte> buffer, SocketFlags socketFlags)
{
if (!socket.IsBound && socket.SocketType == SocketType.Dgram)
{
// Addresses a problem under NETSTANDARD2_0
// where calling receieve when the socket is not "connected"
// continually throws an exception (and creates log spam)
return Task.Delay(TimeSpan.FromMilliseconds(1)).ContinueWith(x => 0);
}

return Task<int>.Factory.FromAsync(
(targetBuffer, flags, callback, state) => ((Socket)state).BeginReceive(
targetBuffer.Array,
Expand Down
2 changes: 1 addition & 1 deletion src/Ae.Dns.Server.Http/Ae.Dns.Server.Http.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<TargetFrameworks>net6.0;netcoreapp3.1</TargetFrameworks>
<Version>0.0.21</Version>
<Version>1.0.0</Version>
<WarningsAsErrors>true</WarningsAsErrors>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<Authors>alanedwardes</Authors>
Expand Down
2 changes: 1 addition & 1 deletion src/Ae.Dns.Server/Ae.Dns.Server.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<TargetFrameworks>netstandard2.0;netstandard2.1;net6.0</TargetFrameworks>
<Version>0.0.21</Version>
<Version>1.0.0</Version>
<WarningsAsErrors>true</WarningsAsErrors>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<Authors>alanedwardes</Authors>
Expand Down
16 changes: 16 additions & 0 deletions tests/Ae.Dns.Tests/Ae.Dns.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
<WarningsAsErrors>true</WarningsAsErrors>
<LangVersion>8.0</LangVersion>
<IsPackable>false</IsPackable>
<SuppressTfmSupportBuildWarnings>true</SuppressTfmSupportBuildWarnings>
</PropertyGroup>

<ItemGroup>
Expand All @@ -17,6 +18,21 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp2.1'">
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="2.2.0" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1'">
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.0" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' == 'net6.0'">
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="6.0.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\src\Ae.Dns.Client\Ae.Dns.Client.csproj" />
Expand Down
4 changes: 2 additions & 2 deletions tests/Ae.Dns.Tests/Protocol/DnsHeaderTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ public void TestDnsHeaderGetSetFlags()
Assert.True(header.RecursionAvailable);
Assert.Equal(35972, header.Flags);

header.RecusionDesired = true;
Assert.True(header.RecusionDesired);
header.RecursionDesired = true;
Assert.True(header.RecursionDesired);
Assert.Equal(36228, header.Flags);
}
}
Expand Down
66 changes: 61 additions & 5 deletions tests/Ae.Dns.Tests/Protocol/DnsQueryFactoryTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public void TestCreateQuery()
Assert.Equal(DnsQueryType.CNAME, header.Header.QueryType);
Assert.Equal(DnsOperationCode.QUERY, header.Header.OperationCode);
Assert.Equal(1, header.Header.QuestionCount);
Assert.True(header.Header.RecusionDesired);
Assert.True(header.Header.RecursionDesired);
}

[Fact]
Expand All @@ -42,21 +42,77 @@ public void TestCreateReverseQueryIPv4()
Assert.Equal(DnsQueryType.PTR, header.Header.QueryType);
Assert.Equal(DnsOperationCode.QUERY, header.Header.OperationCode);
Assert.Equal(1, header.Header.QuestionCount);
Assert.True(header.Header.RecusionDesired);
Assert.True(header.Header.RecursionDesired);
}

[Fact]
public void TestCreateReverseQueryIPv6()
public void TestCreateReverseQueryIPv6_Example1()
{
var header = DnsQueryFactory.CreateReverseQuery(IPAddress.Parse("2600:9000:2015:3600:1a:36dc:e5c0:93a1"));

Assert.Equal("1.a.3.9.0.c.5.e.c.d.6.3.a.1.0.0.6.3.5.1.0.2.0.0.0.9.0.0.6.2.ip6.arpa", header.Header.Host);
Assert.Equal("1.a.3.9.0.c.5.e.c.d.6.3.a.1.0.0.0.0.6.3.5.1.0.2.0.0.0.9.0.0.6.2.ip6.arpa", header.Header.Host);
Assert.True(header.Header.Id > 0);
Assert.Equal(DnsQueryClass.IN, header.Header.QueryClass);
Assert.Equal(DnsQueryType.PTR, header.Header.QueryType);
Assert.Equal(DnsOperationCode.QUERY, header.Header.OperationCode);
Assert.Equal(1, header.Header.QuestionCount);
Assert.True(header.Header.RecusionDesired);
Assert.True(header.Header.RecursionDesired);
}

[Fact]
public void TestCreateReverseQueryIPv6_Example2()
{
var header = DnsQueryFactory.CreateReverseQuery(IPAddress.Parse("2a02:2e0:3fe:1001:302::"));

Assert.Equal("0.0.0.0.0.0.0.0.0.0.0.0.2.0.3.0.1.0.0.1.e.f.3.0.0.e.2.0.2.0.a.2.ip6.arpa", header.Header.Host);
Assert.True(header.Header.Id > 0);
Assert.Equal(DnsQueryClass.IN, header.Header.QueryClass);
Assert.Equal(DnsQueryType.PTR, header.Header.QueryType);
Assert.Equal(DnsOperationCode.QUERY, header.Header.OperationCode);
Assert.Equal(1, header.Header.QuestionCount);
Assert.True(header.Header.RecursionDesired);
}

[Fact]
public void TestCreateReverseQueryIPv6_Example3()
{
var header = DnsQueryFactory.CreateReverseQuery(IPAddress.Parse("2a00:1450:4009:815::200e"));

Assert.Equal("e.0.0.2.0.0.0.0.0.0.0.0.0.0.0.0.5.1.8.0.9.0.0.4.0.5.4.1.0.0.a.2.ip6.arpa", header.Header.Host);
Assert.True(header.Header.Id > 0);
Assert.Equal(DnsQueryClass.IN, header.Header.QueryClass);
Assert.Equal(DnsQueryType.PTR, header.Header.QueryType);
Assert.Equal(DnsOperationCode.QUERY, header.Header.OperationCode);
Assert.Equal(1, header.Header.QuestionCount);
Assert.True(header.Header.RecursionDesired);
}

[Fact]
public void TestCreateReverseQueryIPv6_Example4()
{
var header = DnsQueryFactory.CreateReverseQuery(IPAddress.Parse("2620:149:af0::10"));

Assert.Equal("0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.f.a.0.9.4.1.0.0.2.6.2.ip6.arpa", header.Header.Host);
Assert.True(header.Header.Id > 0);
Assert.Equal(DnsQueryClass.IN, header.Header.QueryClass);
Assert.Equal(DnsQueryType.PTR, header.Header.QueryType);
Assert.Equal(DnsOperationCode.QUERY, header.Header.OperationCode);
Assert.Equal(1, header.Header.QuestionCount);
Assert.True(header.Header.RecursionDesired);
}

[Fact]
public void TestCreateReverseQueryIPv6_Example5()
{
var header = DnsQueryFactory.CreateReverseQuery(IPAddress.Parse("2a02:26f0:fd00:11a8::1ea2"));

Assert.Equal("2.a.e.1.0.0.0.0.0.0.0.0.0.0.0.0.8.a.1.1.0.0.d.f.0.f.6.2.2.0.a.2.ip6.arpa", header.Header.Host);
Assert.True(header.Header.Id > 0);
Assert.Equal(DnsQueryClass.IN, header.Header.QueryClass);
Assert.Equal(DnsQueryType.PTR, header.Header.QueryType);
Assert.Equal(DnsOperationCode.QUERY, header.Header.OperationCode);
Assert.Equal(1, header.Header.QuestionCount);
Assert.True(header.Header.RecursionDesired);
}

[Fact]
Expand Down
4 changes: 2 additions & 2 deletions tests/Ae.Dns.Tests/Protocol/DnsQueryTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,15 @@ public void ReadQuery1Packet()
Assert.False(header.IsQueryResponse);
Assert.False(header.Truncation);
Assert.False(header.RecursionAvailable);
Assert.True(header.RecusionDesired);
Assert.True(header.RecursionDesired);
Assert.Equal(DnsResponseCode.NoError, header.ResponseCode);

var header2 = new DnsHeader
{
Id = header.Id,
QueryClass = DnsQueryClass.IN,
QueryType = DnsQueryType.A,
RecusionDesired = true,
RecursionDesired = true,
Labels = header.Labels,
QuestionCount = 1,
};
Expand Down

0 comments on commit a8533cb

Please sign in to comment.