UNPKG

2.05 kBJavaScriptView Raw
1var assert = require('assert-plus');
2var util = require('util');
3
4var asn1 = require('asn1');
5
6var Control = require('./control');
7
8
9///--- Globals
10
11var BerReader = asn1.BerReader;
12var BerWriter = asn1.BerWriter;
13
14
15///--- API
16
17function PagedResultsControl(options) {
18 assert.optionalObject(options);
19 options = options || {};
20 options.type = PagedResultsControl.OID;
21 if (options.value) {
22 if (Buffer.isBuffer(options.value)) {
23 this.parse(options.value);
24 } else if (typeof (options.value) === 'object') {
25 this._value = options.value;
26 } else {
27 throw new TypeError('options.value must be a Buffer or Object');
28 }
29 options.value = null;
30 }
31 Control.call(this, options);
32}
33util.inherits(PagedResultsControl, Control);
34Object.defineProperties(PagedResultsControl.prototype, {
35 value: {
36 get: function () { return this._value || {}; },
37 configurable: false
38 }
39});
40
41PagedResultsControl.prototype.parse = function parse(buffer) {
42 assert.ok(buffer);
43
44 var ber = new BerReader(buffer);
45 if (ber.readSequence()) {
46 this._value = {};
47 this._value.size = ber.readInt();
48 this._value.cookie = ber.readString(asn1.Ber.OctetString, true);
49 //readString returns '' instead of a zero-length buffer
50 if (!this._value.cookie)
51 this._value.cookie = new Buffer(0);
52
53 return true;
54 }
55
56 return false;
57};
58
59PagedResultsControl.prototype._toBer = function (ber) {
60 assert.ok(ber);
61
62 if (!this._value)
63 return;
64
65 var writer = new BerWriter();
66 writer.startSequence();
67 writer.writeInt(this.value.size);
68 if (this.value.cookie && this.value.cookie.length > 0) {
69 writer.writeBuffer(this.value.cookie, asn1.Ber.OctetString);
70 } else {
71 writer.writeString(''); //writeBuffer rejects zero-length buffers
72 }
73 writer.endSequence();
74
75 ber.writeBuffer(writer.buffer, 0x04);
76};
77
78PagedResultsControl.prototype._json = function (obj) {
79 obj.controlValue = this.value;
80 return obj;
81};
82
83PagedResultsControl.OID = '1.2.840.113556.1.4.319';
84
85
86///--- Exports
87module.exports = PagedResultsControl;