UNPKG

1.76 kBJavaScriptView Raw
1// Copyright 2011 Mark Cavage, Inc. All rights reserved.
2
3const assert = require('assert-plus')
4const util = require('util')
5
6const LDAPMessage = require('./message')
7const Protocol = require('../protocol')
8
9/// --- API
10
11function AbandonRequest (options) {
12 options = options || {}
13 assert.object(options)
14 assert.optionalNumber(options.abandonID)
15
16 options.protocolOp = Protocol.LDAP_REQ_ABANDON
17 LDAPMessage.call(this, options)
18
19 this.abandonID = options.abandonID || 0
20}
21util.inherits(AbandonRequest, LDAPMessage)
22Object.defineProperties(AbandonRequest.prototype, {
23 type: {
24 get: function getType () { return 'AbandonRequest' },
25 configurable: false
26 }
27})
28
29AbandonRequest.prototype._parse = function (ber, length) {
30 assert.ok(ber)
31 assert.ok(length)
32
33 // What a PITA - have to replicate ASN.1 integer logic to work around the
34 // way abandon is encoded and the way ldapjs framework handles "normal"
35 // messages
36
37 const buf = ber.buffer
38 let offset = 0
39 let value = 0
40
41 const fb = buf[offset++]
42 value = fb & 0x7F
43 for (let i = 1; i < length; i++) {
44 value <<= 8
45 value |= (buf[offset++] & 0xff)
46 }
47 if ((fb & 0x80) === 0x80) { value = -value }
48
49 ber._offset += length
50
51 this.abandonID = value
52
53 return true
54}
55
56AbandonRequest.prototype._toBer = function (ber) {
57 assert.ok(ber)
58
59 let i = this.abandonID
60 let sz = 4
61
62 while ((((i & 0xff800000) === 0) || ((i & 0xff800000) === 0xff800000)) &&
63 (sz > 1)) {
64 sz--
65 i <<= 8
66 }
67 assert.ok(sz <= 4)
68
69 while (sz-- > 0) {
70 ber.writeByte((i & 0xff000000) >> 24)
71 i <<= 8
72 }
73
74 return ber
75}
76
77AbandonRequest.prototype._json = function (j) {
78 assert.ok(j)
79
80 j.abandonID = this.abandonID
81
82 return j
83}
84
85/// --- Exports
86
87module.exports = AbandonRequest