private DnsMessageBase ProcessDnsQuery(DnsMessageBase message, IPAddress clientAddress, ProtocolType protocol)
{
state_.Logger.Debug("DNS query received");
message.IsQuery = false;
DnsMessage query = message as DnsMessage;
if(query == null)
{
message.ReturnCode = ReturnCode.ServerFailure;
return message;
}
foreach(DnsQuestion question in query.Questions)
{
state_.Logger.Debug("DNS question of type {0} received", question.RecordType);
List<DnsRecordBase> records = ProcessQuestion(question);
if(records == null)
records = ForwardQuery(question);
if(records == null)
{
message.ReturnCode = ReturnCode.ServerFailure;
return message;
}
else
query.AnswerRecords.AddRange(records);
}
return message;
}