store buffer on extended request
This commit is contained in:
parent
e4264f7940
commit
b87e4bb288
|
@ -24,6 +24,12 @@ function ExtendedRequest(options) {
|
||||||
|
|
||||||
this.requestName = options.requestName || '';
|
this.requestName = options.requestName || '';
|
||||||
this.requestValue = options.requestValue;
|
this.requestValue = options.requestValue;
|
||||||
|
|
||||||
|
if(Buffer.isBuffer(this.requestValue)) {
|
||||||
|
this.requestValueBuffer = this.requestValue;
|
||||||
|
} else {
|
||||||
|
this.requestValueBuffer = new Buffer(this.requestValue || '', 'utf8');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
util.inherits(ExtendedRequest, LDAPMessage);
|
util.inherits(ExtendedRequest, LDAPMessage);
|
||||||
Object.defineProperties(ExtendedRequest.prototype, {
|
Object.defineProperties(ExtendedRequest.prototype, {
|
||||||
|
@ -49,9 +55,27 @@ Object.defineProperties(ExtendedRequest.prototype, {
|
||||||
if (!(Buffer.isBuffer(val) || typeof (val) === 'string'))
|
if (!(Buffer.isBuffer(val) || typeof (val) === 'string'))
|
||||||
throw new TypeError('value must be a buffer or a string');
|
throw new TypeError('value must be a buffer or a string');
|
||||||
|
|
||||||
|
if(Buffer.isBuffer(val)) {
|
||||||
|
this.requestValueBuffer = val;
|
||||||
|
} else {
|
||||||
|
this.requestValueBuffer = new Buffer(val, 'utf8');
|
||||||
|
}
|
||||||
|
|
||||||
this.requestValue = val;
|
this.requestValue = val;
|
||||||
},
|
},
|
||||||
configurable: false
|
configurable: false
|
||||||
|
},
|
||||||
|
valueBuffer: {
|
||||||
|
get: function getValueBuffer() {
|
||||||
|
return this.requestValueBuffer;
|
||||||
|
},
|
||||||
|
set: function setValueBuffer(val) {
|
||||||
|
if(!Buffer.isBuffer(val))
|
||||||
|
throw new TypeError('valueBuffer must be a buffer');
|
||||||
|
|
||||||
|
this.value = val;
|
||||||
|
},
|
||||||
|
configurable: false
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -59,12 +83,10 @@ ExtendedRequest.prototype._parse = function (ber) {
|
||||||
assert.ok(ber);
|
assert.ok(ber);
|
||||||
|
|
||||||
this.requestName = ber.readString(0x80);
|
this.requestName = ber.readString(0x80);
|
||||||
if (ber.peek() === 0x81)
|
if (ber.peek() === 0x81) {
|
||||||
try {
|
this.requestValueBuffer = ber.readString(0x81, true);
|
||||||
this.requestValue = ber.readString(0x81);
|
this.requestValue = this.requestValueBuffer.toString('utf8');
|
||||||
} catch (e) {
|
}
|
||||||
this.requestValue = ber.readBuffer(0x81);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
|
@ -4,6 +4,30 @@ var test = require('tape').test;
|
||||||
|
|
||||||
var asn1 = require('asn1');
|
var asn1 = require('asn1');
|
||||||
|
|
||||||
|
var Buffer = require('buffer').Buffer;
|
||||||
|
|
||||||
|
// Buffer.compare was only added on node 0.11.13
|
||||||
|
var areBuffersEqual = function areBuffersEqual(bufA, bufB) {
|
||||||
|
if(!(Buffer.isBuffer(bufA) && Buffer.isBuffer(bufB))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(typeof Buffer.compare === 'function') {
|
||||||
|
return Buffer.compare(bufA, bufB) === 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
var len = bufA.length;
|
||||||
|
if (len !== bufB.length) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (var i = 0; i < len; i++) {
|
||||||
|
if (bufA.readUInt8(i) !== bufB.readUInt8(i)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
///--- Globals
|
///--- Globals
|
||||||
|
|
||||||
|
@ -37,6 +61,58 @@ test('new with args', function (t) {
|
||||||
t.ok(req);
|
t.ok(req);
|
||||||
t.equal(req.requestName, '1.2.3.4');
|
t.equal(req.requestName, '1.2.3.4');
|
||||||
t.equal(req.requestValue, 'test');
|
t.equal(req.requestValue, 'test');
|
||||||
|
t.ok(areBuffersEqual(req.requestValueBuffer, new Buffer('test', 'utf8')));
|
||||||
|
t.equal(req.value, 'test');
|
||||||
|
t.ok(areBuffersEqual(req.valueBuffer, new Buffer('test', 'utf8')));
|
||||||
|
t.end();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
test('new with buffer args', function (t) {
|
||||||
|
var req = new ExtendedRequest({
|
||||||
|
requestName: '1.2.3.4',
|
||||||
|
requestValue: new Buffer('test', 'utf8')
|
||||||
|
});
|
||||||
|
t.ok(req);
|
||||||
|
t.equal(req.requestName, '1.2.3.4');
|
||||||
|
t.equal(req.requestValue, req.requestValueBuffer);
|
||||||
|
t.ok(areBuffersEqual(req.requestValueBuffer, new Buffer('test', 'utf8')));
|
||||||
|
t.equal(req.value, req.valueBuffer);
|
||||||
|
t.ok(areBuffersEqual(req.valueBuffer, new Buffer('test', 'utf8')));
|
||||||
|
t.end();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
test('new no args set args', function (t) {
|
||||||
|
var req = new ExtendedRequest();
|
||||||
|
t.ok(req);
|
||||||
|
|
||||||
|
req.name = '1.2.3.4';
|
||||||
|
t.equal(req.requestName, '1.2.3.4');
|
||||||
|
|
||||||
|
req.value = 'test';
|
||||||
|
t.equal(req.requestValue, 'test');
|
||||||
|
t.ok(areBuffersEqual(req.requestValueBuffer, new Buffer('test', 'utf8')));
|
||||||
|
t.equal(req.value, 'test');
|
||||||
|
t.ok(areBuffersEqual(req.valueBuffer, new Buffer('test', 'utf8')));
|
||||||
|
|
||||||
|
t.end();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
test('new no args set args buffer', function (t) {
|
||||||
|
var req = new ExtendedRequest();
|
||||||
|
t.ok(req);
|
||||||
|
|
||||||
|
req.name = '1.2.3.4';
|
||||||
|
t.equal(req.requestName, '1.2.3.4');
|
||||||
|
|
||||||
|
req.value = new Buffer('test', 'utf8');
|
||||||
|
t.equal(req.requestValue, req.requestValueBuffer);
|
||||||
|
t.ok(areBuffersEqual(req.requestValueBuffer, new Buffer('test', 'utf8')));
|
||||||
|
t.equal(req.value, req.valueBuffer);
|
||||||
|
t.ok(areBuffersEqual(req.valueBuffer, new Buffer('test', 'utf8')));
|
||||||
|
|
||||||
t.end();
|
t.end();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -51,6 +127,9 @@ test('parse', function (t) {
|
||||||
t.ok(req._parse(new BerReader(ber.buffer)));
|
t.ok(req._parse(new BerReader(ber.buffer)));
|
||||||
t.equal(req.requestName, '1.2.3.4');
|
t.equal(req.requestName, '1.2.3.4');
|
||||||
t.equal(req.requestValue, 'test');
|
t.equal(req.requestValue, 'test');
|
||||||
|
t.ok(areBuffersEqual(req.requestValueBuffer, new Buffer('test', 'utf8')));
|
||||||
|
t.equal(req.value, 'test');
|
||||||
|
t.ok(areBuffersEqual(req.valueBuffer, new Buffer('test', 'utf8')));
|
||||||
t.end();
|
t.end();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -74,3 +153,24 @@ test('toBer', function (t) {
|
||||||
|
|
||||||
t.end();
|
t.end();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
test('toBer from buffer', function (t) {
|
||||||
|
var req = new ExtendedRequest({
|
||||||
|
messageID: 123,
|
||||||
|
requestName: '1.2.3.4',
|
||||||
|
requestValue: new Buffer('test', 'utf8')
|
||||||
|
});
|
||||||
|
|
||||||
|
t.ok(req);
|
||||||
|
|
||||||
|
var ber = new BerReader(req.toBer());
|
||||||
|
t.ok(ber);
|
||||||
|
t.equal(ber.readSequence(), 0x30);
|
||||||
|
t.equal(ber.readInt(), 123);
|
||||||
|
t.equal(ber.readSequence(), 0x77);
|
||||||
|
t.equal(ber.readString(0x80), '1.2.3.4');
|
||||||
|
t.equal(ber.readString(0x81), 'test');
|
||||||
|
|
||||||
|
t.end();
|
||||||
|
});
|
||||||
|
|
Loading…
Reference in New Issue