|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- var assert = require('assert-plus');
- var util = require('util');
-
- var asn1 = require('asn1');
-
- var Control = require('./control');
-
-
- ///--- Globals
-
- var BerReader = asn1.BerReader;
- var BerWriter = asn1.BerWriter;
-
-
- ///--- API
-
- function EntryChangeNotificationControl(options) {
- assert.optionalObject(options);
- options = options || {};
- options.type = EntryChangeNotificationControl.OID;
- if (options.value) {
- if (Buffer.isBuffer(options.value)) {
- this.parse(options.value);
- } else if (typeof (options.value) === 'object') {
- this._value = options.value;
- } else {
- throw new TypeError('options.value must be a Buffer or Object');
- }
- options.value = null;
- }
- Control.call(this, options);
- }
- util.inherits(EntryChangeNotificationControl, Control);
- Object.defineProperties(EntryChangeNotificationControl.prototype, {
- value: {
- get: function () { return this._value || {}; },
- configurable: false
- }
- });
-
- EntryChangeNotificationControl.prototype.parse = function parse(buffer) {
- assert.ok(buffer);
-
- var ber = new BerReader(buffer);
- if (ber.readSequence()) {
- this._value = {
- changeType: ber.readInt()
- };
-
- // if the operation was moddn, then parse the optional previousDN attr
- if (this._value.changeType === 8)
- this._value.previousDN = ber.readString();
-
- this._value.changeNumber = ber.readInt();
-
- return true;
- }
-
- return false;
- };
-
- EntryChangeNotificationControl.prototype._toBer = function (ber) {
- assert.ok(ber);
-
- if (!this._value)
- return;
-
- var writer = new BerWriter();
- writer.startSequence();
- writer.writeInt(this.value.changeType);
- if (this.value.previousDN)
- writer.writeString(this.value.previousDN);
-
- writer.writeInt(parseInt(this.value.changeNumber, 10));
- writer.endSequence();
-
- ber.writeBuffer(writer.buffer, 0x04);
- };
-
- EntryChangeNotificationControl.prototype._json = function (obj) {
- obj.controlValue = this.value;
- return obj;
- };
-
- EntryChangeNotificationControl.OID = '2.16.840.1.113730.3.4.7';
-
-
- ///--- Exports
- module.exports = EntryChangeNotificationControl;
|