Skip to content

Commit

Permalink
Merge pull request #43 from richardschneider/apple-messages
Browse files Browse the repository at this point in the history
Apple messages
  • Loading branch information
richardschneider committed Jul 22, 2019
2 parents 7384ded + 7263c21 commit 701463d
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 14 deletions.
16 changes: 9 additions & 7 deletions src/Question.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace Makaretu.Dns
Expand Down Expand Up @@ -56,13 +57,14 @@ public override void Write(WireWriter writer)
/// <inheritdoc />
public override string ToString()
{
var s = new StringBuilder();
s.Append(Name);
s.Append(' ');
s.Append(Class);
s.Append(' ');
s.Append(Type);
return s.ToString();
using (var s = new StringWriter())
{
var writer = new PresentationWriter(s);
writer.WriteDomainName(Name);
writer.WriteDnsClass(Class);
writer.WriteDnsType(Type, appendSpace: false);
return s.ToString();
}
}
}
}
6 changes: 6 additions & 0 deletions src/UnknownEdnsOption.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,11 @@ public override void WriteData(WireWriter writer)
writer.WriteBytes(Data);
}

/// <inheritdoc />
public override string ToString()
{
return $"; Type = {Type}; Data = {Convert.ToBase64String(Data)}";
}

}
}
6 changes: 1 addition & 5 deletions src/WireReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -209,11 +209,7 @@ List<string> ReadLabels()

// Read current label and remaining labels.
var buffer = ReadBytes(length);
if (buffer.Any(c => c > 0x7F))
{
throw new InvalidDataException("Only ASCII characters are allowed.");
}
labels.Add(Encoding.ASCII.GetString(buffer, 0, length));
labels.Add(Encoding.UTF8.GetString(buffer, 0, length));
labels.AddRange(ReadLabels());

// Add to compressed names.
Expand Down
3 changes: 2 additions & 1 deletion src/WireWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,8 @@ public void WriteDomainName(DomainName name, bool uncompressed = false)
}

// Add the label
WriteString(label);
var bytes = Encoding.UTF8.GetBytes(label);
WriteByteLengthPrefixedBytes(bytes);
}

stream.WriteByte(0); // terminating byte
Expand Down
18 changes: 17 additions & 1 deletion test/MessageTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ public void Stringify()
QR = true,
Id = 1234
};
m.Questions.Add(new Question { Name = "emanon.org", Type=DnsType.A });
m.Questions.Add(new Question { Name = "emanon.org", Type = DnsType.A });
m.Answers.Add(new ARecord { Name = "emanon.org", Address = IPAddress.Parse("127.0.0.1") });
m.AuthorityRecords.Add(new SOARecord
{
Expand All @@ -311,5 +311,21 @@ public void Stringify_Edns()
var text = m.ToString();
Console.WriteLine(text);
}

[TestMethod]
public void AppleMessage()
{
// A MDNS query from an Apple Host. It contains a UTF8 domain name
// and an EDNS OPT-4 option.
var sample = "AAAAAAAGAAAAAAABCF9ob21la2l0BF90Y3AFbG9jYWwAAAyAAQ9fY29tcGFuaW9uLWxpbmvAFQAMgAEIX2FpcnBsYXnAFQAMgAEFX3Jhb3DAFQAMgAEbQ2hyaXN0b3BoZXLigJlzIE1hY0Jvb2sgUHJvwCUAEIABDF9zbGVlcC1wcm94eQRfdWRwwBoADAABAAApBaAAABGUABIABAAOAJB6e4qbc5l4e4qbc5k=";
var buffer1 = Convert.FromBase64String(sample);
var m = new Message();
m.Read(buffer1);

Assert.AreEqual("Christopher’s MacBook Pro", m.Questions[4].Name.Labels[0]);
Assert.AreEqual("_homekit._tcp.local CLASS32769 PTR", m.Questions[0].ToString());
}
}

}

0 comments on commit 701463d

Please sign in to comment.