1 |
|
2 |
|
3 | const assert = require('assert-plus')
|
4 | const util = require('util')
|
5 |
|
6 | const LDAPMessage = require('./message')
|
7 | const Protocol = require('../protocol')
|
8 |
|
9 |
|
10 |
|
11 | function 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 | }
|
21 | util.inherits(AbandonRequest, LDAPMessage)
|
22 | Object.defineProperties(AbandonRequest.prototype, {
|
23 | type: {
|
24 | get: function getType () { return 'AbandonRequest' },
|
25 | configurable: false
|
26 | }
|
27 | })
|
28 |
|
29 | AbandonRequest.prototype._parse = function (ber, length) {
|
30 | assert.ok(ber)
|
31 | assert.ok(length)
|
32 |
|
33 |
|
34 |
|
35 |
|
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 |
|
56 | AbandonRequest.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 |
|
77 | AbandonRequest.prototype._json = function (j) {
|
78 | assert.ok(j)
|
79 |
|
80 | j.abandonID = this.abandonID
|
81 |
|
82 | return j
|
83 | }
|
84 |
|
85 |
|
86 |
|
87 | module.exports = AbandonRequest
|