You've already forked node-redis
mirror of
https://github.com/redis/node-redis.git
synced 2025-08-07 13:22:56 +03:00
Improve the parser
This commit is contained in:
@@ -2,11 +2,6 @@
|
|||||||
|
|
||||||
var util = require('util');
|
var util = require('util');
|
||||||
|
|
||||||
function Packet(type, size) {
|
|
||||||
this.type = type;
|
|
||||||
this.size = +size;
|
|
||||||
}
|
|
||||||
|
|
||||||
function ReplyParser(return_buffers) {
|
function ReplyParser(return_buffers) {
|
||||||
this.name = exports.name;
|
this.name = exports.name;
|
||||||
this.return_buffers = return_buffers;
|
this.return_buffers = return_buffers;
|
||||||
@@ -23,7 +18,10 @@ function IncompleteReadBuffer(message) {
|
|||||||
util.inherits(IncompleteReadBuffer, Error);
|
util.inherits(IncompleteReadBuffer, Error);
|
||||||
|
|
||||||
ReplyParser.prototype._parseResult = function (type) {
|
ReplyParser.prototype._parseResult = function (type) {
|
||||||
var start, end, offset, packetHeader;
|
var start = 0,
|
||||||
|
end = 0,
|
||||||
|
offset = 0,
|
||||||
|
packetHeader = 0;
|
||||||
|
|
||||||
if (type === 43 || type === 45) { // + or -
|
if (type === 43 || type === 45) { // + or -
|
||||||
// up to the delimiter
|
// up to the delimiter
|
||||||
@@ -62,14 +60,14 @@ ReplyParser.prototype._parseResult = function (type) {
|
|||||||
// buffer in memory
|
// buffer in memory
|
||||||
offset = this._offset - 1;
|
offset = this._offset - 1;
|
||||||
|
|
||||||
packetHeader = new Packet(type, this.parseHeader());
|
packetHeader = this.parseHeader();
|
||||||
|
|
||||||
// packets with a size of -1 are considered null
|
// packets with a size of -1 are considered null
|
||||||
if (packetHeader.size === -1) {
|
if (packetHeader === -1) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
end = this._offset + packetHeader.size;
|
end = this._offset + packetHeader;
|
||||||
start = this._offset;
|
start = this._offset;
|
||||||
|
|
||||||
if (end > this._buffer.length) {
|
if (end > this._buffer.length) {
|
||||||
@@ -85,13 +83,13 @@ ReplyParser.prototype._parseResult = function (type) {
|
|||||||
return this._buffer.toString(this._encoding, start, end);
|
return this._buffer.toString(this._encoding, start, end);
|
||||||
} else { // *
|
} else { // *
|
||||||
offset = this._offset;
|
offset = this._offset;
|
||||||
packetHeader = new Packet(type, this.parseHeader());
|
packetHeader = this.parseHeader();
|
||||||
|
|
||||||
if (packetHeader.size < 0) {
|
if (packetHeader < 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (packetHeader.size > this._bytesRemaining()) {
|
if (packetHeader > this._bytesRemaining()) {
|
||||||
this._offset = offset - 1;
|
this._offset = offset - 1;
|
||||||
throw new IncompleteReadBuffer('Wait for more data.');
|
throw new IncompleteReadBuffer('Wait for more data.');
|
||||||
}
|
}
|
||||||
@@ -101,7 +99,7 @@ ReplyParser.prototype._parseResult = function (type) {
|
|||||||
|
|
||||||
offset = this._offset - 1;
|
offset = this._offset - 1;
|
||||||
|
|
||||||
for (i = 0; i < packetHeader.size; i++) {
|
for (i = 0; i < packetHeader; i++) {
|
||||||
ntype = this._buffer[this._offset++];
|
ntype = this._buffer[this._offset++];
|
||||||
|
|
||||||
if (this._offset > this._buffer.length) {
|
if (this._offset > this._buffer.length) {
|
||||||
@@ -184,7 +182,7 @@ ReplyParser.prototype.append = function (newBuffer) {
|
|||||||
|
|
||||||
ReplyParser.prototype.parseHeader = function () {
|
ReplyParser.prototype.parseHeader = function () {
|
||||||
var end = this._packetEndOffset(),
|
var end = this._packetEndOffset(),
|
||||||
value = this._buffer.toString('ascii', this._offset, end - 1);
|
value = this._buffer.toString('ascii', this._offset, end - 1) | 0;
|
||||||
|
|
||||||
this._offset = end + 1;
|
this._offset = end + 1;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user