Support SRV record unfurling for PC networks

This commit is contained in:
theminecoder 2016-06-09 13:26:32 +10:00
parent 41a6a25854
commit 0034d7fc03
2 changed files with 22 additions and 1 deletions

@ -48,7 +48,10 @@ function pingMinecraftPE(host, port, timeout, callback) {
exports.ping = function(host, port, type, timeout, callback, version) { exports.ping = function(host, port, type, timeout, callback, version) {
if (type === 'PC') { 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') { } else if (type === 'PE') {
pingMinecraftPE(host, port || 19132, timeout, callback); pingMinecraftPE(host, port || 19132, timeout, callback);
} else { } else {

@ -1,4 +1,5 @@
var logger = require('./logger'); var logger = require('./logger');
var dns = require('dns');
var config = require('../config.json'); var config = require('../config.json');
var servers = require('../servers.json'); var servers = require('../servers.json');
@ -149,3 +150,20 @@ exports.getBootTime = function() {
return bootTime; 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);
})
};