internal virtual UniAddress GetFirstAddress()
{
AddressIndex = 0;
string host = Url.GetHost();
string path = Url.AbsolutePath;
string query = Url.GetQuery();
if (Addresses != null && Addresses.Length > 0)
{
return GetNextAddress();
}
if (query != null)
{
string server = QueryLookup(query, "server");
if (!string.IsNullOrEmpty(server))
{
Addresses = new UniAddress[1];
Addresses[0] = UniAddress.GetByName(server);
return GetNextAddress();
}
string address = QueryLookup(query, "address");
if (!string.IsNullOrEmpty(address))
{
byte[] ip = Extensions.GetAddressByName(address).GetAddressBytes();
Addresses = new UniAddress[1];
//addresses[0] = new UniAddress(IPAddress.Parse(host, ip));
Addresses[0] = new UniAddress(IPAddress.Parse(host));
return GetNextAddress();
}
}
if (host.Length == 0)
{
try
{
NbtAddress addr = NbtAddress.GetByName(NbtAddress.MasterBrowserName, 0x01, null);
Addresses = new UniAddress[1];
Addresses[0] = UniAddress.GetByName(addr.GetHostAddress());
}
catch (UnknownHostException uhe)
{
NtlmPasswordAuthentication.InitDefaults();
if (NtlmPasswordAuthentication.DefaultDomain.Equals("?"))
{
throw;
}
Addresses = UniAddress.GetAllByName(NtlmPasswordAuthentication.DefaultDomain, true
);
}
}
else
{
if (path.Length == 0 || path.Equals("/"))
{
Addresses = UniAddress.GetAllByName(host, true);
}
else
{
Addresses = UniAddress.GetAllByName(host, false);
}
}
return GetNextAddress();
}