123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- // Copyright 2011 Mark Cavage, Inc. All rights reserved.
-
- var assert = require('assert-plus');
- var util = require('util');
-
- var LDAPMessage = require('./message');
- var Protocol = require('../protocol');
-
-
- ///--- API
-
- function AbandonRequest(options) {
- options = options || {};
- assert.object(options);
- assert.optionalNumber(options.abandonID);
-
- options.protocolOp = Protocol.LDAP_REQ_ABANDON;
- LDAPMessage.call(this, options);
-
- this.abandonID = options.abandonID || 0;
- }
- util.inherits(AbandonRequest, LDAPMessage);
- Object.defineProperties(AbandonRequest.prototype, {
- type: {
- get: function getType() { return 'AbandonRequest'; },
- configurable: false
- }
- });
-
- AbandonRequest.prototype._parse = function (ber, length) {
- assert.ok(ber);
- assert.ok(length);
-
- // What a PITA - have to replicate ASN.1 integer logic to work around the
- // way abandon is encoded and the way ldapjs framework handles "normal"
- // messages
-
- var buf = ber.buffer;
- var offset = 0;
- var value = 0;
-
- var fb = buf[offset++];
- value = fb & 0x7F;
- for (var i = 1; i < length; i++) {
- value <<= 8;
- value |= (buf[offset++] & 0xff);
- }
- if ((fb & 0x80) == 0x80)
- value = -value;
-
- ber._offset += length;
-
- this.abandonID = value;
-
- return true;
- };
-
- AbandonRequest.prototype._toBer = function (ber) {
- assert.ok(ber);
-
- var i = this.abandonID;
- var sz = 4;
-
- while ((((i & 0xff800000) === 0) || ((i & 0xff800000) === 0xff800000)) &&
- (sz > 1)) {
- sz--;
- i <<= 8;
- }
- assert.ok(sz <= 4);
-
- while (sz-- > 0) {
- ber.writeByte((i & 0xff000000) >> 24);
- i <<= 8;
- }
-
- return ber;
- };
-
- AbandonRequest.prototype._json = function (j) {
- assert.ok(j);
-
- j.abandonID = this.abandonID;
-
- return j;
- };
-
-
- ///--- Exports
-
- module.exports = AbandonRequest;
|