From d0664f37b4a1fee30459af014adf6f10e097bc11 Mon Sep 17 00:00:00 2001 From: Matt Stith Date: Sat, 13 Apr 2013 17:23:31 -0300 Subject: [PATCH 1/2] Connect to a server's SRV record if they specify one --- lib/client.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/client.js b/lib/client.js index 2131496..40a37a7 100644 --- a/lib/client.js +++ b/lib/client.js @@ -2,6 +2,7 @@ var net = require('net') , EventEmitter = require('events').EventEmitter , util = require('util') , protocol = require('./protocol') + , dns = require('dns') , createPacketBuffer = protocol.createPacketBuffer , parsePacket = protocol.parsePacket , debug = protocol.debug @@ -69,7 +70,13 @@ Client.prototype.setSocket = function(socket) { Client.prototype.connect = function(port, host) { var self = this; - self.setSocket(net.connect(port, host)); + dns.resolveSrv("_minecraft._tcp." + host, function(err, addresses) { + if (addresses) { + self.setSocket(net.connect(addresses[0].port, addresses[0].name)); + } else { + self.setSocket(net.connect(port, host)); + } + }); }; Client.prototype.end = function(reason) { From 88255413ce4333c38d685628418ebcdbc0ca9ef9 Mon Sep 17 00:00:00 2001 From: Matt Stith Date: Mon, 15 Apr 2013 00:09:04 -0300 Subject: [PATCH 2/2] Only look for SRV records if necessary Vanilla client implementation only looks for SRV records when the server port isn't specified, so let's mirror that behavior. --- lib/client.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/client.js b/lib/client.js index 40a37a7..5bf0b29 100644 --- a/lib/client.js +++ b/lib/client.js @@ -70,13 +70,17 @@ Client.prototype.setSocket = function(socket) { Client.prototype.connect = function(port, host) { var self = this; - dns.resolveSrv("_minecraft._tcp." + host, function(err, addresses) { - if (addresses) { - self.setSocket(net.connect(addresses[0].port, addresses[0].name)); - } else { - self.setSocket(net.connect(port, host)); - } - }); + if (port == 25565) { + dns.resolveSrv("_minecraft._tcp." + host, function(err, addresses) { + if (addresses) { + self.setSocket(net.connect(addresses[0].port, addresses[0].name)); + } else { + self.setSocket(net.connect(port, host)); + } + }); + } else { + self.setSocket(net.connect(port, host)); + } }; Client.prototype.end = function(reason) {