diff --git a/MinecraftClient/Protocol/ProtocolHandler.cs b/MinecraftClient/Protocol/ProtocolHandler.cs
index 6f14eb70..fbe4f782 100644
--- a/MinecraftClient/Protocol/ProtocolHandler.cs
+++ b/MinecraftClient/Protocol/ProtocolHandler.cs
@@ -29,34 +29,44 @@ namespace MinecraftClient.Protocol
/// TRUE if a Minecraft Service was found.
public static bool MinecraftServiceLookup(ref string domain, ref ushort port)
{
+ bool foundService = false;
+ string domainVal = domain;
+ ushort portVal = port;
+
if (!String.IsNullOrEmpty(domain) && domain.Any(c => char.IsLetter(c)))
{
- try
+ AutoTimeout.Perform(() =>
{
- Console.WriteLine("Resolving {0}...", domain);
- Heijden.DNS.Response response = new Heijden.DNS.Resolver().Query("_minecraft._tcp." + domain, Heijden.DNS.QType.SRV);
- Heijden.DNS.RecordSRV[] srvRecords = response.RecordsSRV;
- if (srvRecords != null && srvRecords.Any())
+ try
{
- //Order SRV records by priority and weight, then randomly
- Heijden.DNS.RecordSRV result = srvRecords
- .OrderBy(record => record.PRIORITY)
- .ThenByDescending(record => record.WEIGHT)
- .ThenBy(record => Guid.NewGuid())
- .First();
- string target = result.TARGET.Trim('.');
- ConsoleIO.WriteLineFormatted(String.Format("§8Found server {0}:{1} for domain {2}", target, result.PORT, domain));
- domain = target;
- port = result.PORT;
- return true;
+ Console.WriteLine("Resolving {0}...", domainVal);
+ Heijden.DNS.Response response = new Heijden.DNS.Resolver().Query("_minecraft._tcp." + domainVal, Heijden.DNS.QType.SRV);
+ Heijden.DNS.RecordSRV[] srvRecords = response.RecordsSRV;
+ if (srvRecords != null && srvRecords.Any())
+ {
+ //Order SRV records by priority and weight, then randomly
+ Heijden.DNS.RecordSRV result = srvRecords
+ .OrderBy(record => record.PRIORITY)
+ .ThenByDescending(record => record.WEIGHT)
+ .ThenBy(record => Guid.NewGuid())
+ .First();
+ string target = result.TARGET.Trim('.');
+ ConsoleIO.WriteLineFormatted(String.Format("§8Found server {0}:{1} for domain {2}", target, result.PORT, domainVal));
+ domainVal = target;
+ portVal = result.PORT;
+ foundService = true;
+ }
}
- }
- catch (Exception e)
- {
- ConsoleIO.WriteLineFormatted(String.Format("§8Failed to perform SRV lookup for {0}\n{1}: {2}", domain, e.GetType().FullName, e.Message));
- }
+ catch (Exception e)
+ {
+ ConsoleIO.WriteLineFormatted(String.Format("§8Failed to perform SRV lookup for {0}\n{1}: {2}", domainVal, e.GetType().FullName, e.Message));
+ }
+ }, TimeSpan.FromSeconds(Settings.ResolveSrvRecordsShortTimeout ? 10 : 30));
}
- return false;
+
+ domain = domainVal;
+ port = portVal;
+ return foundService;
}
///