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(); } } } }