public byte[] GetBytes()
        {
            using (var memoryStream = new MemoryStream())
            using (var writer = new DnsWriter(0, memoryStream))
            {
                var dnsNameWriter = new DnsNameWriter(memoryStream);

                writer.Write(this.MessageId.ToNetworkByteOrder());
                writer.Write(((ushort)this.Flags).ToNetworkByteOrder());

                writer.Write(this.QueryCount.ToNetworkByteOrder());
                writer.Write(((ushort)this.AnswerRecords.Count).ToNetworkByteOrder());
                writer.Write(((ushort)this.NameServerRecords.Count).ToNetworkByteOrder());
                writer.Write(((ushort)this.AdditionalRecords.Count).ToNetworkByteOrder());

                foreach (var resourceRecord in this.AnswerRecords)
                {
                    resourceRecord.Write(dnsNameWriter, writer);
                }

                foreach (var resourceRecord in this.NameServerRecords)
                {
                    resourceRecord.Write(dnsNameWriter, writer);
                }

                foreach (var resourceRecord in this.AdditionalRecords)
                {
                    resourceRecord.Write(dnsNameWriter, writer);
                }

                return memoryStream.ToArray();
            }
        }
 public void Write(DnsName dnsName)
 {
     using (var writer = new DnsWriter(0, this.stream))
     {
         this.rootLabelNode.Write(dnsName, writer);
     }
 }
 public byte[] GetBytes(DnsName dnsName)
 {
     using (var stream = new MemoryStream())
     using (var writer = new DnsWriter(this.stream.Position, stream))
     {
         this.Write(dnsName, writer);
         return stream.ToArray();
     }
 }
        internal void Write(DnsNameWriter dnsNameWriter, DnsWriter dnsWriter)
        {
            dnsNameWriter.Write(this.Name);
            dnsWriter.Write(((ushort)this.Type).ToNetworkByteOrder());
            dnsWriter.Write(((ushort)this.Class).ToNetworkByteOrder());
            dnsWriter.Write(this.TimeToLive.ToNetworkByteOrder());

            var data = this.GetData(dnsNameWriter);
            dnsWriter.Write(((ushort)data.Length).ToNetworkByteOrder());
            dnsWriter.Write(data);
        }
 private void Write(DnsWriter dnsWriter)
 {
     if (this.position.HasValue)
     {
         this.WritePointer(dnsWriter);
     }
     else
     {
         this.WriteLabel(dnsWriter);
         if (this.parent != null)
         {
             this.parent.Write(dnsWriter);
         }
     }
 }
 public void Write(IEnumerable<string> labels, DnsWriter dnsWriter)
 {
     var node = this.Create(labels);
     node.Write(dnsWriter);
 }
 private void Write(DnsName dnsName, DnsWriter dnsWriter)
 {
     this.rootLabelNode.Write(dnsName, dnsWriter);
 }
 private void WritePointer(DnsWriter dnsWriter)
 {
     var pointer = (ushort)(this.position.Value | 0xc000);
     dnsWriter.Write(pointer.ToNetworkByteOrder());
 }
 private void WriteLabel(DnsWriter dnsWriter)
 {
     this.position = (ushort)dnsWriter.Position;
     var bytes = Encoding.ASCII.GetBytes(this.label);
     dnsWriter.Write((byte)bytes.Length);
     dnsWriter.Write(bytes);
 }