From 778752f09734a4f129e01b4d289de1b7a052f7a1 Mon Sep 17 00:00:00 2001 From: Romain Beaumont Date: Wed, 13 May 2015 15:15:16 +0200 Subject: [PATCH] move packets reading to packets.js, remove some dead code --- src/client.js | 1 - src/datatypes/structures.js | 1 + src/index.js | 7 ++--- src/packets.js | 44 ++++++++++++++++++++++++++ src/protocol.js | 63 ++----------------------------------- 5 files changed, 50 insertions(+), 66 deletions(-) create mode 100644 src/packets.js diff --git a/src/client.js b/src/client.js index 1627309..59baf65 100644 --- a/src/client.js +++ b/src/client.js @@ -5,7 +5,6 @@ var EventEmitter = require('events').EventEmitter , compressPacketBuffer = protocol.compressPacketBuffer , oldStylePacket = protocol.oldStylePacket , newStylePacket = protocol.newStylePacket - , parsePacket = protocol.parsePacket , parsePacketData = protocol.parsePacketData , parseNewStylePacket = protocol.parseNewStylePacket , packetIds = protocol.packetIds diff --git a/src/datatypes/structures.js b/src/datatypes/structures.js index 4a0620c..a008808 100644 --- a/src/datatypes/structures.js +++ b/src/datatypes/structures.js @@ -1,4 +1,5 @@ var getField= require("../utils").getField; +var debug = require("../debug"); module.exports = { 'array':[readArray,writeArray,sizeOfArray], diff --git a/src/index.js b/src/index.js index 8fb415a..3f35d54 100644 --- a/src/index.js +++ b/src/index.js @@ -1,9 +1,6 @@ -var EventEmitter = require('events').EventEmitter - , util = require('util') - , assert = require('assert') +var assert = require('assert') , crypto = require('crypto') , bufferEqual = require('buffer-equal') - , superagent = require('superagent') , protocol = require('./protocol') , Client = require('./client') , dns = require('dns') @@ -14,7 +11,7 @@ var EventEmitter = require('events').EventEmitter , validateSession = Yggdrasil.validateSession , joinServer = Yggdrasil.joinServer , states = protocol.states - , debug = protocol.debug + , debug = require("./debug") ; var ursa; try { diff --git a/src/packets.js b/src/packets.js new file mode 100644 index 0000000..17c8aa9 --- /dev/null +++ b/src/packets.js @@ -0,0 +1,44 @@ +var assert=require("assert"); + +module.exports={readPackets:readPackets}; + +function readPackets(packets,states) +{ + var packetFields = {}; + var packetNames = {}; + var packetIds = {}; + var packetStates = {toClient: {}, toServer: {}}; + for (var stateName in states) { + var state = states[stateName]; + + packetFields[state] = {toClient: [], toServer: []}; + packetNames[state] = {toClient: [], toServer: []}; + packetIds[state] = {toClient: [], toServer: []}; + + ['toClient', 'toServer'].forEach(function(direction) { + for (var name in packets[state][direction]) { + var info = packets[state][direction][name]; + var id = parseInt(info.id); + var fields = info.fields; + + assert(id !== undefined, 'missing id for packet '+name); + assert(fields !== undefined, 'missing fields for packet '+name); + assert(!packetNames[state][direction].hasOwnProperty(id), 'duplicate packet id '+id+' for '+name); + assert(!packetIds[state][direction].hasOwnProperty(name), 'duplicate packet name '+name+' for '+id); + assert(!packetFields[state][direction].hasOwnProperty(id), 'duplicate packet id '+id+' for '+name); + assert(!packetStates[direction].hasOwnProperty(name), 'duplicate packet name '+name+' for '+id+', must be unique across all states'); + + packetNames[state][direction][id] = name; + packetIds[state][direction][name] = id; + packetFields[state][direction][id] = fields; + packetStates[direction][name] = state; + } + }); + } + return { + packetFields:packetFields, + packetNames:packetNames, + packetIds:packetIds, + packetStates:packetStates + }; +} diff --git a/src/protocol.js b/src/protocol.js index 51b6ad7..84519c9 100644 --- a/src/protocol.js +++ b/src/protocol.js @@ -1,51 +1,10 @@ var assert = require('assert'); var zlib = require('zlib'); -var evalCondition= require("./utils").evalCondition; +var evalCondition = require("./utils").evalCondition; +var readPackets = require("./packets").readPackets; +var debug = require("./debug"); -var STRING_MAX_LENGTH = 240; - - -function readPackets(packets,states) -{ - var packetFields = {}; - var packetNames = {}; - var packetIds = {}; - var packetStates = {toClient: {}, toServer: {}}; - for (var stateName in states) { - var state = states[stateName]; - - packetFields[state] = {toClient: [], toServer: []}; - packetNames[state] = {toClient: [], toServer: []}; - packetIds[state] = {toClient: [], toServer: []}; - - ['toClient', 'toServer'].forEach(function(direction) { - for (var name in packets[state][direction]) { - var info = packets[state][direction][name]; - var id = parseInt(info.id); - var fields = info.fields; - - assert(id !== undefined, 'missing id for packet '+name); - assert(fields !== undefined, 'missing fields for packet '+name); - assert(!packetNames[state][direction].hasOwnProperty(id), 'duplicate packet id '+id+' for '+name); - assert(!packetIds[state][direction].hasOwnProperty(name), 'duplicate packet name '+name+' for '+id); - assert(!packetFields[state][direction].hasOwnProperty(id), 'duplicate packet id '+id+' for '+name); - assert(!packetStates[direction].hasOwnProperty(name), 'duplicate packet name '+name+' for '+id+', must be unique across all states'); - - packetNames[state][direction][id] = name; - packetIds[state][direction][name] = id; - packetFields[state][direction][id] = fields; - packetStates[direction][name] = state; - } - }); - } - return { - packetFields:packetFields, - packetNames:packetNames, - packetIds:packetIds, - packetStates:packetStates - }; -} // This is really just for the client. var states = { @@ -80,7 +39,6 @@ NMProtocols.prototype.addTypes = function(types) }); }; - NMProtocols.prototype.read = function(buffer, cursor, fieldInfo, rootNodes) { var type = this.types[fieldInfo.type]; if (!type) { @@ -268,19 +226,6 @@ function parsePacketData(buffer, state, isServer, packetsToParse) { }; } -function parsePacket(buffer, state, isServer, packetsToParse) { - if (state == null) state = states.PLAY; - var cursor = 0; - var lengthField = utils.varint[0](buffer, 0); - if (!lengthField) return null; - var length = lengthField.value; - cursor += lengthField.size; - if (length + lengthField.size > buffer.length) return null; // fail early - var result = parsePacketData(buffer.slice(cursor, length + cursor), state, isServer, packetsToParse); - result.size = lengthField.size + length; - return result; -} - function parseNewStylePacket(buffer, state, isServer, packetsToParse, cb) { var dataLengthField = utils.varint[0](buffer, 0); var buf = buffer.slice(dataLengthField.size); @@ -302,14 +247,12 @@ module.exports = { version: 47, minecraftVersion: '1.8.1', sessionVersion: 13, - parsePacket: parsePacket, parsePacketData: parsePacketData, parseNewStylePacket: parseNewStylePacket, createPacketBuffer: createPacketBuffer, compressPacketBuffer: compressPacketBuffer, oldStylePacket: oldStylePacket, newStylePacket: newStylePacket, - STRING_MAX_LENGTH: STRING_MAX_LENGTH, packetIds: packetIds, packetNames: packetNames, packetFields: packetFields,