minecraft-protocol
Advanced tools
Comparing version 0.13.3 to 0.13.4
module.exports = { | ||
Client: require('./dist/client'), | ||
protocol: require('./dist/protocol') | ||
}; |
"use strict"; | ||
var net = require("net"), | ||
EventEmitter = require("events").EventEmitter, | ||
var EventEmitter = require("events").EventEmitter, | ||
util = require("util"), | ||
protocol = require("./protocol"), | ||
dns = require("dns"), | ||
createPacketBuffer = protocol.createPacketBuffer, | ||
@@ -155,17 +153,2 @@ compressPacketBuffer = protocol.compressPacketBuffer, | ||
Client.prototype.connect = function (port, host) { | ||
var self = this; | ||
if (port == 25565 && net.isIP(host) === 0) { | ||
dns.resolveSrv("_minecraft._tcp." + host, function (err, addresses) { | ||
if (addresses && addresses.length > 0) { | ||
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) { | ||
@@ -172,0 +155,0 @@ this._endReason = reason; |
@@ -11,2 +11,4 @@ "use strict"; | ||
Client = require("./client"), | ||
dns = require("dns"), | ||
net = require("net"), | ||
Server = require("./server"), | ||
@@ -44,2 +46,5 @@ Yggdrasil = require("./yggdrasil.js"), | ||
var onlineMode = options["online-mode"] == null ? true : options["online-mode"]; | ||
// a function receiving the default status object and the client | ||
// and returning a modified response object. | ||
var beforePing = options.beforePing || null; | ||
@@ -117,2 +122,6 @@ var serverKey = ursa.generatePrivateKey(1024); | ||
if (beforePing) { | ||
response = beforePing(response, client) || response; | ||
} | ||
client.once([states.STATUS, 1], function (packet) { | ||
@@ -152,2 +161,5 @@ client.write(1, { time: packet.time }); | ||
function onHandshake(packet) { | ||
client.serverHost = packet.serverHost; | ||
client.serverPort = packet.serverPort; | ||
client.protocolVersion = packet.protocolVersion; | ||
if (packet.nextState == 1) { | ||
@@ -161,8 +173,13 @@ client.state = states.STATUS; | ||
function onEncryptionKeyResponse(packet) { | ||
var verifyToken = serverKey.decrypt(packet.verifyToken, undefined, undefined, ursa.RSA_PKCS1_PADDING); | ||
if (!bufferEqual(client.verifyToken, verifyToken)) { | ||
try { | ||
var verifyToken = serverKey.decrypt(packet.verifyToken, undefined, undefined, ursa.RSA_PKCS1_PADDING); | ||
if (!bufferEqual(client.verifyToken, verifyToken)) { | ||
client.end("DidNotEncryptVerifyTokenProperly"); | ||
return; | ||
} | ||
var sharedSecret = serverKey.decrypt(packet.sharedSecret, undefined, undefined, ursa.RSA_PKCS1_PADDING); | ||
} catch (e) { | ||
client.end("DidNotEncryptVerifyTokenProperly"); | ||
return; | ||
} | ||
var sharedSecret = serverKey.decrypt(packet.sharedSecret, undefined, undefined, ursa.RSA_PKCS1_PADDING); | ||
client.cipher = crypto.createCipheriv("aes-128-cfb8", sharedSecret, sharedSecret); | ||
@@ -221,2 +238,17 @@ client.decipher = crypto.createDecipheriv("aes-128-cfb8", sharedSecret, sharedSecret); | ||
Client.prototype.connect = function (port, host) { | ||
var self = this; | ||
if (port == 25565 && net.isIP(host) === 0) { | ||
dns.resolveSrv("_minecraft._tcp." + host, function (err, addresses) { | ||
if (addresses && addresses.length > 0) { | ||
self.setSocket(net.connect(addresses[0].port, addresses[0].name)); | ||
} else { | ||
self.setSocket(net.connect(port, host)); | ||
} | ||
}); | ||
} else { | ||
self.setSocket(net.connect(port, host)); | ||
} | ||
}; | ||
function createClient(options) { | ||
@@ -223,0 +255,0 @@ assert.ok(options, "options is required"); |
@@ -552,9 +552,6 @@ "use strict"; | ||
function readPosition(buffer, offset) { | ||
var longVal = readLong(buffer, offset).value; // I wish I could do destructuring... | ||
var x = longVal[0] >> 6; | ||
if (x > 33554432) x -= 67108864; | ||
var y = (longVal[0] & 63) << 6 | longVal[1] >> 26 & 63; | ||
if (y > 2048) y -= 4096; | ||
var z = longVal[1] & 67108863; | ||
if (z > 33554432) z -= 67108864; | ||
var longVal = readLong(buffer, offset).value; | ||
var x = signExtend26(longVal[0] >> 6); | ||
var y = signExtend12((longVal[0] & 63) << 6 | longVal[1] >> 26 & 63); | ||
var z = signExtend26(longVal[1] & 67108863); | ||
return { | ||
@@ -565,2 +562,10 @@ value: { x: x, y: y, z: z }, | ||
} | ||
function signExtend26(value) { | ||
if (value > 33554432) value -= 67108864; | ||
return value; | ||
} | ||
function signExtend12(value) { | ||
if (value > 2048) value -= 4096; | ||
return value; | ||
} | ||
@@ -1040,3 +1045,3 @@ function readSlot(buffer, offset) { | ||
} | ||
if (buffer.length > cursor) console.log("DID NOT PARSE THE WHOLE THING!"); | ||
if (buffer.length > cursor) debug("Too much data to read for packetId: " + packetId + " (0x" + packetId.toString(16) + ")"); | ||
debug(results); | ||
@@ -1043,0 +1048,0 @@ return { |
var readline = require('readline'); | ||
var color = require("ansi-color").set; | ||
var mc = require('../'); | ||
var mc = require('../../'); | ||
var states = mc.protocol.states; | ||
@@ -5,0 +5,0 @@ var util = require('util'); |
@@ -1,2 +0,2 @@ | ||
var mc = require('../') | ||
var mc = require('../../') | ||
, states = mc.protocol.states | ||
@@ -19,2 +19,2 @@ | ||
} | ||
}); | ||
}); |
@@ -1,2 +0,2 @@ | ||
var mc = require('../'); | ||
var mc = require('../../'); | ||
@@ -3,0 +3,0 @@ var states = mc.protocol.states; |
@@ -1,2 +0,2 @@ | ||
var mc = require('../'); | ||
var mc = require('../../'); | ||
@@ -3,0 +3,0 @@ var options = { |
@@ -1,2 +0,2 @@ | ||
var mc = require('../'); | ||
var mc = require('../../'); | ||
var states = mc.protocol.states; | ||
@@ -3,0 +3,0 @@ |
{ | ||
"name": "minecraft-protocol", | ||
"version": "0.13.3", | ||
"version": "0.13.4", | ||
"description": "Parse and serialize minecraft packets, plus authentication and encryption.", | ||
@@ -46,3 +46,3 @@ "main": "index.js", | ||
"superagent": "~0.10.0", | ||
"ursa-purejs": "0.0.1" | ||
"ursa-purejs": "0.0.3" | ||
}, | ||
@@ -49,0 +49,0 @@ "optionalDependencies": { |
@@ -384,2 +384,10 @@ # minecraft protocol [![NPM version](https://badge.fury.io/js/minecraft-protocol.svg)](http://badge.fury.io/js/minecraft-protocol) | ||
### 0.13.4 | ||
* Added hook to modify server ping (thanks [Brian Schlenker](https://github.com/bschlenk)) | ||
* Exposed the Client class to the browser, after removing node-specific details | ||
* Fixed the examples | ||
* Silenced the "DID NOT PARSE THE WHOLE THING" debug message, and made it print more useful info | ||
* Updated ursa-purejs dependency, which in turned fixed windows version of node-minecraft-protocol. | ||
### 0.13.3 | ||
@@ -386,0 +394,0 @@ |
@@ -1,6 +0,4 @@ | ||
var net = require('net') | ||
, EventEmitter = require('events').EventEmitter | ||
var EventEmitter = require('events').EventEmitter | ||
, util = require('util') | ||
, protocol = require('./protocol') | ||
, dns = require('dns') | ||
, createPacketBuffer = protocol.createPacketBuffer | ||
@@ -155,17 +153,2 @@ , compressPacketBuffer = protocol.compressPacketBuffer | ||
Client.prototype.connect = function(port, host) { | ||
var self = this; | ||
if (port == 25565 && net.isIP(host) === 0) { | ||
dns.resolveSrv("_minecraft._tcp." + host, function(err, addresses) { | ||
if (addresses && addresses.length > 0) { | ||
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) { | ||
@@ -172,0 +155,0 @@ this._endReason = reason; |
@@ -9,2 +9,4 @@ var EventEmitter = require('events').EventEmitter | ||
, Client = require('./client') | ||
, dns = require('dns') | ||
, net = require('net') | ||
, Server = require('./server') | ||
@@ -48,2 +50,5 @@ , Yggdrasil = require('./yggdrasil.js') | ||
var onlineMode = options['online-mode'] == null ? true : options['online-mode']; | ||
// a function receiving the default status object and the client | ||
// and returning a modified response object. | ||
var beforePing = options.beforePing || null; | ||
@@ -122,2 +127,6 @@ var serverKey = ursa.generatePrivateKey(1024); | ||
if (beforePing) { | ||
response = beforePing(response, client) || response; | ||
} | ||
client.once([states.STATUS, 0x01], function(packet) { | ||
@@ -157,2 +166,5 @@ client.write(0x01, { time: packet.time }); | ||
function onHandshake(packet) { | ||
client.serverHost = packet.serverHost; | ||
client.serverPort = packet.serverPort; | ||
client.protocolVersion = packet.protocolVersion; | ||
if (packet.nextState == 1) { | ||
@@ -166,8 +178,13 @@ client.state = states.STATUS; | ||
function onEncryptionKeyResponse(packet) { | ||
var verifyToken = serverKey.decrypt(packet.verifyToken, undefined, undefined, ursa.RSA_PKCS1_PADDING); | ||
if (!bufferEqual(client.verifyToken, verifyToken)) { | ||
try { | ||
var verifyToken = serverKey.decrypt(packet.verifyToken, undefined, undefined, ursa.RSA_PKCS1_PADDING); | ||
if (!bufferEqual(client.verifyToken, verifyToken)) { | ||
client.end('DidNotEncryptVerifyTokenProperly'); | ||
return; | ||
} | ||
var sharedSecret = serverKey.decrypt(packet.sharedSecret, undefined, undefined, ursa.RSA_PKCS1_PADDING); | ||
} catch (e) { | ||
client.end('DidNotEncryptVerifyTokenProperly'); | ||
return; | ||
} | ||
var sharedSecret = serverKey.decrypt(packet.sharedSecret, undefined, undefined, ursa.RSA_PKCS1_PADDING); | ||
client.cipher = crypto.createCipheriv('aes-128-cfb8', sharedSecret, sharedSecret); | ||
@@ -226,2 +243,17 @@ client.decipher = crypto.createDecipheriv('aes-128-cfb8', sharedSecret, sharedSecret); | ||
Client.prototype.connect = function(port, host) { | ||
var self = this; | ||
if (port == 25565 && net.isIP(host) === 0) { | ||
dns.resolveSrv("_minecraft._tcp." + host, function(err, addresses) { | ||
if (addresses && addresses.length > 0) { | ||
self.setSocket(net.connect(addresses[0].port, addresses[0].name)); | ||
} else { | ||
self.setSocket(net.connect(port, host)); | ||
} | ||
}); | ||
} else { | ||
self.setSocket(net.connect(port, host)); | ||
} | ||
}; | ||
function createClient(options) { | ||
@@ -228,0 +260,0 @@ assert.ok(options, "options is required"); |
@@ -1098,9 +1098,6 @@ var assert = require('assert'); | ||
function readPosition(buffer, offset) { | ||
var longVal = readLong(buffer, offset).value; // I wish I could do destructuring... | ||
var x = longVal[0] >> 6; | ||
if(x>33554432) x-=67108864; | ||
var y = ((longVal[0] & 0x3F) << 6) | ((longVal[1] >> 26) & 0x3f); | ||
if(y>2048) y-=4096; | ||
var z = longVal[1] & 0x3FFFFFF; | ||
if(z>33554432) z-=67108864; | ||
var longVal = readLong(buffer, offset).value; | ||
var x = signExtend26(longVal[0] >> 6); | ||
var y = signExtend12(((longVal[0] & 0x3f) << 6) | ((longVal[1] >> 26) & 0x3f)); | ||
var z = signExtend26(longVal[1] & 0x3FFFFFF); | ||
return { | ||
@@ -1111,2 +1108,10 @@ value: { x: x, y: y, z: z }, | ||
} | ||
function signExtend26(value) { | ||
if (value > 0x2000000) value -= 0x4000000; | ||
return value; | ||
} | ||
function signExtend12(value) { | ||
if (value > 0x800) value -= 0x1000; | ||
return value; | ||
} | ||
@@ -1592,3 +1597,3 @@ function readSlot(buffer, offset) { | ||
if (buffer.length > cursor) | ||
console.log("DID NOT PARSE THE WHOLE THING!"); | ||
debug("Too much data to read for packetId: " + packetId + " (0x" + packetId.toString(16) + ")"); | ||
debug(results); | ||
@@ -1595,0 +1600,0 @@ return { |
@@ -252,3 +252,6 @@ var mc = require('../') | ||
if (err) return done(err); | ||
//console.log(MC_SERVER_JAR); | ||
if (!fs.existsSync(MC_SERVER_JAR)) { | ||
return done(new Error("The file "+MC_SERVER_JAR+" doesn't exist.")); | ||
} | ||
mcServer = spawn('java', [ '-Dlog4j.configurationFile=server/server_debug.xml', '-jar', MC_SERVER_JAR, 'nogui'], { | ||
@@ -255,0 +258,0 @@ stdio: 'pipe', |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
410246
5298
576
+ Addedursa-purejs@0.0.3(transitive)
- Removedursa-purejs@0.0.1(transitive)
Updatedursa-purejs@0.0.3