using System;
using System.IO;
using System.Net;
using System.Collections;
using System.Collections.Generic;
using System.Text;
namespace Heijden.DNS
{
public class Response
{
///
/// List of Question records
///
public List Questions;
///
/// List of AnswerRR records
///
public List Answers;
///
/// List of AuthorityRR records
///
public List Authorities;
///
/// List of AdditionalRR records
///
public List Additionals;
public Header header;
///
/// Error message, empty when no error
///
public string Error;
///
/// The Size of the message
///
public int MessageSize;
///
/// TimeStamp when cached
///
public DateTime TimeStamp;
///
/// Server which delivered this response
///
public IPEndPoint Server;
public Response()
{
Questions = new List();
Answers = new List();
Authorities = new List();
Additionals = new List();
Server = new IPEndPoint(0,0);
Error = "";
MessageSize = 0;
TimeStamp = DateTime.Now;
header = new Header();
}
public Response(IPEndPoint iPEndPoint, byte[] data)
{
Error = "";
Server = iPEndPoint;
TimeStamp = DateTime.Now;
MessageSize = data.Length;
RecordReader rr = new RecordReader(data);
Questions = new List();
Answers = new List();
Authorities = new List();
Additionals = new List();
header = new Header(rr);
for (int intI = 0; intI < header.QDCOUNT; intI++)
{
Questions.Add(new Question(rr));
}
for (int intI = 0; intI < header.ANCOUNT; intI++)
{
Answers.Add(new AnswerRR(rr));
}
for (int intI = 0; intI < header.NSCOUNT; intI++)
{
Authorities.Add(new AuthorityRR(rr));
}
for (int intI = 0; intI < header.ARCOUNT; intI++)
{
Additionals.Add(new AdditionalRR(rr));
}
}
///
/// List of RecordMX in Response.Answers
///
public RecordMX[] RecordsMX
{
get
{
List list = new List();
foreach (AnswerRR answerRR in this.Answers)
{
RecordMX record = answerRR.RECORD as RecordMX;
if(record!=null)
list.Add(record);
}
list.Sort();
return list.ToArray();
}
}
///
/// List of RecordTXT in Response.Answers
///
public RecordTXT[] RecordsTXT
{
get
{
List list = new List();
foreach (AnswerRR answerRR in this.Answers)
{
RecordTXT record = answerRR.RECORD as RecordTXT;
if (record != null)
list.Add(record);
}
return list.ToArray();
}
}
///
/// List of RecordA in Response.Answers
///
public RecordA[] RecordsA
{
get
{
List list = new List();
foreach (AnswerRR answerRR in this.Answers)
{
RecordA record = answerRR.RECORD as RecordA;
if (record != null)
list.Add(record);
}
return list.ToArray();
}
}
///
/// List of RecordPTR in Response.Answers
///
public RecordPTR[] RecordsPTR
{
get
{
List list = new List();
foreach (AnswerRR answerRR in this.Answers)
{
RecordPTR record = answerRR.RECORD as RecordPTR;
if (record != null)
list.Add(record);
}
return list.ToArray();
}
}
///
/// List of RecordCNAME in Response.Answers
///
public RecordCNAME[] RecordsCNAME
{
get
{
List list = new List();
foreach (AnswerRR answerRR in this.Answers)
{
RecordCNAME record = answerRR.RECORD as RecordCNAME;
if (record != null)
list.Add(record);
}
return list.ToArray();
}
}
///
/// List of RecordAAAA in Response.Answers
///
public RecordAAAA[] RecordsAAAA
{
get
{
List list = new List();
foreach (AnswerRR answerRR in this.Answers)
{
RecordAAAA record = answerRR.RECORD as RecordAAAA;
if (record != null)
list.Add(record);
}
return list.ToArray();
}
}
///
/// List of RecordNS in Response.Answers
///
public RecordNS[] RecordsNS
{
get
{
List list = new List();
foreach (AnswerRR answerRR in this.Answers)
{
RecordNS record = answerRR.RECORD as RecordNS;
if (record != null)
list.Add(record);
}
return list.ToArray();
}
}
///
/// List of RecordSOA in Response.Answers
///
public RecordSOA[] RecordsSOA
{
get
{
List list = new List();
foreach (AnswerRR answerRR in this.Answers)
{
RecordSOA record = answerRR.RECORD as RecordSOA;
if (record != null)
list.Add(record);
}
return list.ToArray();
}
}
///
/// List of RecordSRV in Response.Answers
///
public RecordSRV[] RecordsSRV
{
get
{
List list = new List();
foreach (AnswerRR answerRR in this.Answers)
{
RecordSRV record = answerRR.RECORD as RecordSRV;
if (record != null)
list.Add(record);
}
return list.ToArray();
}
}
public RR[] RecordsRR
{
get
{
List list = new List();
foreach (RR rr in this.Answers)
{
list.Add(rr);
}
foreach (RR rr in this.Answers)
{
list.Add(rr);
}
foreach (RR rr in this.Authorities)
{
list.Add(rr);
}
foreach (RR rr in this.Additionals)
{
list.Add(rr);
}
return list.ToArray();
}
}
}
}