diff --git a/games/minecraft.js b/games/minecraft.js index 61083b1..5e76ef6 100644 --- a/games/minecraft.js +++ b/games/minecraft.js @@ -1,5 +1,3 @@ -var dns = require('dns'); - module.exports = require('./protocols/gamespy3').extend({ init: function() { this._super(); diff --git a/games/protocols/gamespy3.js b/games/protocols/gamespy3.js index c77ce43..1add0b8 100644 --- a/games/protocols/gamespy3.js +++ b/games/protocols/gamespy3.js @@ -119,27 +119,32 @@ module.exports = require('./core').extend({ var numPackets = 0; var packets = {}; this.udpSend(b,function(buffer) { - var iType = buffer.readUInt8(0); + var reader = self.reader(buffer); + var iType = reader.uint(1); if(iType != type) return; - var iSessionId = buffer.readUInt32BE(1); + var iSessionId = reader.uint(4); if(iSessionId != self.sessionId) return; if(!assemble) { - c(buffer.slice(5)); + c(reader.rest()); return true; } if(self.useOnlySingleSplit) { // has split headers, but they are worthless and only one packet is used - c([buffer.slice(16)]); + reader.skip(11); + c([buffer.rest()]); return true; } - var id = buffer.readUInt16LE(14); + reader.skip(9); // filler data -- usually set to 'splitnum\0' + var id = reader.uint(1); var last = (id & 0x80); id = id & 0x7f; if(last) numPackets = id+1; + + reader.skip(1); // "another 'packet number' byte, but isn't understood." - packets[id] = buffer.slice(16); + packets[id] = reader.rest(); if(self.debug) { console.log("Received packet #"+id); if(last) console.log("(last)"); diff --git a/games/protocols/unreal2.js b/games/protocols/unreal2.js index cfe9f8c..8acf4c5 100644 --- a/games/protocols/unreal2.js +++ b/games/protocols/unreal2.js @@ -119,13 +119,16 @@ module.exports = require('./core').extend({ return out; }, sendPacket: function(type,required,callback) { + var self = this; var outbuffer = new Buffer([0x79,0,0,0,type]); var packets = []; this.udpSend(outbuffer,function(buffer) { - var iType = buffer.readUInt8(4); + var reader = self.reader(buffer); + var header = reader.uint(4); + var iType = reader.uint(1); if(iType != type) return; - packets.push(buffer.slice(5)); + packets.push(reader.rest()); },function() { if(!packets.length && required) return; callback(Buffer.concat(packets)); diff --git a/lib/index.js b/lib/index.js index 7641bcb..ee198ae 100644 --- a/lib/index.js +++ b/lib/index.js @@ -22,6 +22,9 @@ udpSocket.on('message', function(buffer, rinfo) { break; } }); +udpSocket.on('error', function(e) { + if(Gamedig.debug) console.log("UDP ERROR: "+e); +}); Gamedig = {