private Uri ConstructUrl(IRequest originalRequest, IPEndPoint remote)
{
if (!state_.IsLocal(remote.Address))
{
return(originalRequest.Uri);
}
DnsMessage message = state_.Dns.Resolve(originalRequest.Uri.DnsSafeHost);
if (null == message)
{
throw new ApplicationException(string.Format("Could not resolve '{0}' with DNS '{1}'", originalRequest.Uri.DnsSafeHost, state_.Config.Dns.Server));
}
foreach (DnsRecordBase recordBase in message.AnswerRecords)
{
ARecord record = recordBase as ARecord;
if (record == null)
{
continue;
}
string host = originalRequest.Uri.Host;
string url = originalRequest.Uri.AbsoluteUri.Replace(host, record.Address.ToString());
return(new Uri(url));
}
return(originalRequest.Uri);
}