Skip to content

Commit

Permalink
Capture exceptions in DnsCaptureRawClient.
Browse files Browse the repository at this point in the history
  • Loading branch information
alanedwardes committed Feb 4, 2024
1 parent bc80f15 commit 9a1c669
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 7 deletions.
18 changes: 14 additions & 4 deletions misc/Ae.Dns.Console/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -188,10 +188,20 @@ async Task GroupToTable(IEnumerable<IGrouping<string?, DnsQuery>> groups, params
{
await context.Response.WriteAsync($"<li>");
await context.Response.WriteAsync($"<b>Served by {capture.Request.ServerName} from {capture.Request.SourceEndpoint}</b>");
await context.Response.WriteAsync($"<pre>{capture.Response.Query}</pre>");
await context.Response.WriteAsync($"<pre>Query bytes: {DnsByteExtensions.ToDebugString(capture.Query)}</pre>");
await context.Response.WriteAsync($"<pre>{capture.Response.Answer}</pre>");
await context.Response.WriteAsync($"<pre>Answer bytes: {DnsByteExtensions.ToDebugString(capture.Answer)}</pre>");
await context.Response.WriteAsync($"<pre>{capture.Response?.Query.ToString() ?? "Error processing query"}</pre>");
await context.Response.WriteAsync($"<pre>{DnsByteExtensions.ToDebugString(capture.Query)}</pre>");

if (capture.Answer.HasValue)
{
await context.Response.WriteAsync($"<pre>{capture.Response?.Answer}</pre>");
await context.Response.WriteAsync($"<pre>{DnsByteExtensions.ToDebugString(capture.Answer.Value)}</pre>");
}

if (capture.Exception != null)
{
await context.Response.WriteAsync($"<pre>{capture.Exception}</pre>");
}

await context.Response.WriteAsync($"</li>");

}
Expand Down
24 changes: 21 additions & 3 deletions src/Ae.Dns.Client/DnsCaptureRawClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,15 @@ public sealed class Capture
/// <summary>
/// The raw answer.
/// </summary>
public ReadOnlyMemory<byte> Answer { get; set; }
public ReadOnlyMemory<byte>? Answer { get; set; }
/// <summary>
/// The outgoing response.
/// </summary>
public DnsRawClientResponse Response { get; set; }
public DnsRawClientResponse? Response { get; set; }
/// <summary>
/// An exception, if there was one.
/// </summary>
public Exception Exception { get; set; }
}

/// <summary>
Expand Down Expand Up @@ -77,7 +81,21 @@ public async Task<DnsRawClientResponse> Query(Memory<byte> buffer, DnsRawClientR
var queryBuffer = new byte[request.QueryLength];
buffer.Slice(0, request.QueryLength).CopyTo(queryBuffer);

var response = await _innerClient.Query(buffer, request, token);
DnsRawClientResponse response;
try
{
response = await _innerClient.Query(buffer, request, token);
}
catch (Exception ex)
{
Captures.Add(new Capture
{
Request = request,
Query = queryBuffer,
Exception = ex
});
throw;
}

if (CaptureFilter(request, response))
{
Expand Down

0 comments on commit 9a1c669

Please sign in to comment.