From d2435c8dcdf6de9441a38cf7f605fbda691359be Mon Sep 17 00:00:00 2001 From: Romain Beaumont Date: Thu, 30 Jul 2015 04:42:07 +0200 Subject: [PATCH] Add some debug information (useful to update to an updated protocol) --- examples/proxy/proxy.js | 2 ++ src/datatypes/numeric.js | 9 ++++++++- src/datatypes/structures.js | 11 ++++++++++- src/protocol.js | 8 ++------ src/transforms/serializer.js | 37 ++++++++++++++++++++++++++++-------- 5 files changed, 51 insertions(+), 16 deletions(-) diff --git a/examples/proxy/proxy.js b/examples/proxy/proxy.js index d9f6cf1..ed628a8 100644 --- a/examples/proxy/proxy.js +++ b/examples/proxy/proxy.js @@ -140,6 +140,8 @@ srv.on('login', function(client) { console.log("client<-server: Error in packetId " + state + ".0x" + packetId.value.toString(16)); console.log(buffer.toString('hex')); console.log(packetBuff.toString('hex')); + console.log(buffer.length); + console.log(packetBuff.length); } /*if (client.state == states.PLAY && brokenPackets.indexOf(packetId.value) !== -1) { diff --git a/src/datatypes/numeric.js b/src/datatypes/numeric.js index 045cb64..77ddcc4 100644 --- a/src/datatypes/numeric.js +++ b/src/datatypes/numeric.js @@ -24,7 +24,14 @@ function generateFunctions(bufferReader,bufferWriter,size) }; }; var writer=function(value, buffer, offset) { - buffer[bufferWriter](value, offset); + try { + buffer[bufferWriter](value, offset); + } + catch(err) + { + console.log("value:"+ value); + throw err; + } return offset + size; }; return [reader, writer, size]; diff --git a/src/datatypes/structures.js b/src/datatypes/structures.js index 4c6f695..50a939c 100644 --- a/src/datatypes/structures.js +++ b/src/datatypes/structures.js @@ -84,7 +84,16 @@ function writeContainer(value, buffer, offset, typeArgs, rootNode) { debug(new Error("Missing Property " + typeArgs.fields[index].name).stack); console.log(context); } - offset = this.write(context[typeArgs.fields[index].name], buffer, offset, typeArgs.fields[index], rootNode); + try { + offset = this.write(context[typeArgs.fields[index].name], buffer, offset, typeArgs.fields[index], rootNode); + } + catch(err) + { + console.log("typeArgs : " + JSON.stringify(typeArgs.fields[index])); + console.log("context : "+JSON.stringify(context)); + console.log("value : " + JSON.stringify(context[typeArgs.fields[index].name])); + throw err; + } } rootNode.this = backupThis;; return offset; diff --git a/src/protocol.js b/src/protocol.js index d254f4e..fa02c65 100644 --- a/src/protocol.js +++ b/src/protocol.js @@ -16,9 +16,7 @@ NMProtocols.prototype.addTypes = function(types) { NMProtocols.prototype.read = function(buffer, cursor, fieldInfo, rootNodes) { var type = this.types[fieldInfo.type]; if(!type) { - return { - error: new Error("missing data type: " + fieldInfo.type) - }; + throw new Error("missing data type: " + fieldInfo.type); } var readResults = type[0].call(this, buffer, cursor, fieldInfo.typeArgs, rootNodes); if(readResults == null) { @@ -31,9 +29,7 @@ NMProtocols.prototype.read = function(buffer, cursor, fieldInfo, rootNodes) { NMProtocols.prototype.write = function(value, buffer, offset, fieldInfo, rootNode) { var type = this.types[fieldInfo.type]; if(!type) { - return { - error: new Error("missing data type: " + fieldInfo.type) - }; + throw new Error("missing data type: " + fieldInfo.type); } return type[1].call(this, value, buffer, offset, fieldInfo.typeArgs, rootNode); }; diff --git a/src/transforms/serializer.js b/src/transforms/serializer.js index d85883c..c7d6e5b 100644 --- a/src/transforms/serializer.js +++ b/src/transforms/serializer.js @@ -84,13 +84,25 @@ function createPacketBuffer(packetId, state, params, isServer) { var buffer = new Buffer(size); var offset = 0;//utils.varint[1](length, buffer, 0); offset = utils.varint[1](packetId, buffer, offset); - packet.forEach(function(fieldInfo) { - var value = params[fieldInfo.name]; - // TODO : A better check is probably needed - if(typeof value === "undefined" && fieldInfo.type != "count" && (fieldInfo.type != "condition" || evalCondition(fieldInfo.typeArgs, params))) - debug(new Error("Missing Property " + fieldInfo.name).stack); - offset = proto.write(value, buffer, offset, fieldInfo, params); - }); + packet.forEach(function(fieldInfo) { + var value = params[fieldInfo.name]; + // TODO : A better check is probably needed + if(typeof value === "undefined" && fieldInfo.type != "count" && (fieldInfo.type != "condition" || evalCondition(fieldInfo.typeArgs, params))) + debug(new Error("Missing Property " + fieldInfo.name).stack); + + try { + offset = proto.write(value, buffer, offset, fieldInfo, params); + } + catch(err) + { + console.log("Error in creating packet 0x"+packetId.toString(16)+" with params "+JSON.stringify(params)); + console.log("In particular :"); + + console.log("fieldInfo : " + JSON.stringify(fieldInfo)); + console.log("value : " + JSON.stringify(value)); + throw err; + } + }); return buffer; } @@ -139,7 +151,16 @@ function parsePacketData(buffer, state, isServer, packetsToParse = {"packet": tr var i, fieldInfo, readResults; for(i = 0; i < packetInfo.length; ++i) { fieldInfo = packetInfo[i]; - readResults = proto.read(buffer, cursor, fieldInfo, results); + try { + readResults = proto.read(buffer, cursor, fieldInfo, results); + } + catch(err) { + console.log("Error in parsing packet 0x" + packetId.toString(16)); + console.log("In particular :"); + + console.log("fieldInfo : " + JSON.stringify(fieldInfo)); + throw err; + } /* A deserializer cannot return null anymore. Besides, proto.read() returns * null when the condition is not fulfilled. if (!!!readResults) {