diff --git a/lib/ping.js b/lib/ping.js index bc1bd1e..3da75a3 100644 --- a/lib/ping.js +++ b/lib/ping.js @@ -48,7 +48,10 @@ function pingMinecraftPE(host, port, timeout, callback) { exports.ping = function(host, port, type, timeout, callback, version) { if (type === 'PC') { - pingMinecraftPC(host, port || 25565, timeout, callback, version); + util.unfurlSRV(host, port, function(host, port){ + console.log('Pinging '+host+":"+port+"...") + pingMinecraftPC(host, port || 25565, timeout, callback, version); + }) } else if (type === 'PE') { pingMinecraftPE(host, port || 19132, timeout, callback); } else { diff --git a/lib/util.js b/lib/util.js index 0844c6f..7299cdd 100644 --- a/lib/util.js +++ b/lib/util.js @@ -1,4 +1,5 @@ var logger = require('./logger'); +var dns = require('dns'); var config = require('../config.json'); var servers = require('../servers.json'); @@ -148,4 +149,21 @@ exports.getBootTime = function() { } return bootTime; +}; + +/** + * Attempts to resolve Minecraft PC SRV records from DNS, otherwise falling back to the old hostname. + * + * @param hostname hostname to check + * @param port port to pass to callback if required + * @param callback function with a hostname and port parameter + */ +exports.unfurlSRV = function(hostname, port, callback) { + dns.resolveSrv("_minecraft._tcp."+hostname, function (err, records) { + if(!records||records.length<=0) { + callback(hostname, port); + return; + } + callback(records[0].name, records[0].port); + }) }; \ No newline at end of file