protected virtual IResponse ResolveLocal(Request request) { Response response = Response.FromRequest(request); foreach (Question question in request.Questions) { IList <IResourceRecord> answers = masterFile.Get(question); if (answers.Count > 0) { Merge(response.AnswerRecords, answers); } else { IResponse answer = ResolveRemote(request); foreach (var ans in answer.AnswerRecords) { masterFile.Add(ans); } return(answer); } } return(response); }
protected virtual IResponse ResolveLocal(Request request) { Console.WriteLine("Request From: " + local.Address.ToString()); Response response = Response.FromRequest(request); foreach (Question question in request.Questions) { IList <IResourceRecord> answers = masterFile.Get(question); if (answers.Count > 0) { Merge(response.AnswerRecords, answers); } } return(response); }
protected virtual async Task <IResponse> ResolveLocal(Request request) { Response response = Response.FromRequest(request); foreach (Question question in request.Questions) { IList <IResourceRecord> answers = masterFile.Get(question); if (answers.Count > 0) { Merge(response.AnswerRecords, answers); } else { return(await ResolveRemote(request)); } } return(response); }
protected virtual IResponse ResolveLocal(Request request) { Response response = Response.FromRequest(request); foreach (Question question in request.Questions) { IList <IResourceRecord> answers = masterFile.Get(question); if (answers.Count > 0) { Merge(response.AnswerRecords, answers); } else { if (WhiteList.Read().Any(x => x == question.Name.ToString())) { return(ResolveFromIsp(request)); } return(ResolveFromGlobal(request)); } } return(response); }
protected virtual async Task <IResponse> ResolveLocal(Request request) { Response response = Response.FromRequest(request); foreach (Question question in request.Questions) { IList <IResourceRecord> answers = masterFile.Get(question); if (answers.Count > 0) { Merge(response.AnswerRecords, answers); } else { if (!LocalOnly) { return(await ResolveRemote(request)); } else if (RedirectUnknownToLocal && question.Type == RecordType.A) { IPAddress answerIP; IPAddress.TryParse(LocalIP, out answerIP); if (answerIP != null) { IList <IResourceRecord> entries = new List <IResourceRecord>(); IResourceRecord fakeResponse = new IPAddressResourceRecord(request.Questions[0].Name, answerIP); entries.Add(fakeResponse); Merge(response.AnswerRecords, entries); } } } } return(response); }