@bitpoolos/edge-bacnet 1.1.8 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bacnet_client.js +336 -168
- package/bacnet_device.js +50 -16
- package/bacnet_gateway.html +119 -15
- package/bacnet_gateway.js +388 -395
- package/bacnet_read.html +32 -11
- package/bacnet_read.js +1 -1
- package/bacnet_server.js +16 -12
- package/common.js +26 -19
- package/examples/1-Discover-Read.json +1 -1
- package/examples/2-Discover-Write.json +1 -1
- package/examples/3-Discover-Read-Write.json +1 -1
- package/package.json +3 -3
- package/resources/{node-bacnet/LICENSE.md → node-bacstack-ts/LICENSE} +3 -4
- package/resources/node-bacstack-ts/README.md +75 -0
- package/resources/{node-bacnet → node-bacstack-ts/dist}/index.js +0 -2
- package/resources/node-bacstack-ts/dist/lib/apdu.js +193 -0
- package/resources/node-bacstack-ts/dist/lib/asn1.js +1660 -0
- package/resources/node-bacstack-ts/dist/lib/bvlc.js +47 -0
- package/resources/node-bacstack-ts/dist/lib/client.js +1454 -0
- package/resources/node-bacstack-ts/dist/lib/enum.js +2114 -0
- package/resources/node-bacstack-ts/dist/lib/npdu.js +112 -0
- package/resources/node-bacstack-ts/dist/lib/services/add-list-element.js +58 -0
- package/resources/node-bacstack-ts/dist/lib/services/alarm-acknowledge.js +93 -0
- package/resources/node-bacstack-ts/dist/lib/services/alarm-summary.js +42 -0
- package/resources/node-bacstack-ts/dist/lib/services/atomic-read-file.js +157 -0
- package/resources/node-bacstack-ts/dist/lib/services/atomic-write-file.js +136 -0
- package/resources/node-bacstack-ts/dist/lib/services/cov-notify.js +119 -0
- package/resources/node-bacstack-ts/dist/lib/services/create-object.js +104 -0
- package/resources/node-bacstack-ts/dist/lib/services/delete-object.js +21 -0
- package/resources/node-bacstack-ts/dist/lib/services/device-communication-control.js +46 -0
- package/resources/node-bacstack-ts/dist/lib/services/error.js +27 -0
- package/resources/node-bacstack-ts/dist/lib/services/event-information.js +100 -0
- package/resources/node-bacstack-ts/dist/lib/services/event-notify-data.js +219 -0
- package/resources/node-bacstack-ts/dist/lib/services/get-enrollment-summary.js +172 -0
- package/resources/node-bacstack-ts/dist/lib/services/get-event-information.js +135 -0
- package/resources/node-bacstack-ts/dist/lib/services/i-am-broadcast.js +59 -0
- package/resources/node-bacstack-ts/dist/lib/services/i-have-broadcast.js +34 -0
- package/resources/node-bacstack-ts/dist/lib/services/index.js +32 -0
- package/resources/node-bacstack-ts/dist/lib/services/life-safety-operation.js +40 -0
- package/resources/node-bacstack-ts/dist/lib/services/private-transfer.js +43 -0
- package/resources/node-bacstack-ts/dist/lib/services/read-property-multiple.js +44 -0
- package/resources/node-bacstack-ts/dist/lib/services/read-property.js +122 -0
- package/resources/node-bacstack-ts/dist/lib/services/read-range.js +201 -0
- package/resources/node-bacstack-ts/dist/lib/services/reinitialize-device.js +35 -0
- package/resources/node-bacstack-ts/dist/lib/services/subscribe-cov.js +55 -0
- package/resources/node-bacstack-ts/dist/lib/services/subscribe-property.js +93 -0
- package/resources/node-bacstack-ts/dist/lib/services/time-sync.js +31 -0
- package/resources/node-bacstack-ts/dist/lib/services/who-has.js +56 -0
- package/resources/node-bacstack-ts/dist/lib/services/who-is.js +45 -0
- package/resources/node-bacstack-ts/dist/lib/services/write-property-multiple.js +105 -0
- package/resources/node-bacstack-ts/dist/lib/services/write-property.js +90 -0
- package/resources/node-bacstack-ts/dist/lib/transport.js +49 -0
- package/resources/node-bacstack-ts/dist/lib/types.js +2 -0
- package/resources/node-bacstack-ts/package.json +94 -0
- package/resources/node-bacnet/CHANGELOG.md +0 -481
- package/resources/node-bacnet/README.md +0 -91
- package/resources/node-bacnet/docs/Client.html +0 -4422
- package/resources/node-bacnet/docs/bacnet-icon-quad.png +0 -0
- package/resources/node-bacnet/docs/bacnet-icon-quad128.png +0 -0
- package/resources/node-bacnet/docs/bacnet-icon-quad64.png +0 -0
- package/resources/node-bacnet/docs/bacnet-icon-small.xcf +0 -0
- package/resources/node-bacnet/docs/bacnet-icon.xcf +0 -0
- package/resources/node-bacnet/docs/bacnet.html +0 -7032
- package/resources/node-bacnet/docs/client.js.html +0 -1759
- package/resources/node-bacnet/docs/enum.js.html +0 -2530
- package/resources/node-bacnet/docs/global.html +0 -2068
- package/resources/node-bacnet/docs/images/mocha-logo.svg +0 -65
- package/resources/node-bacnet/docs/index.html +0 -283
- package/resources/node-bacnet/docs/scripts/collapse.js +0 -11
- package/resources/node-bacnet/docs/scripts/jquery-3.1.1.min.js +0 -4
- package/resources/node-bacnet/docs/scripts/linenumber.js +0 -26
- package/resources/node-bacnet/docs/scripts/prettify/Apache-License-2.0.txt +0 -202
- package/resources/node-bacnet/docs/scripts/prettify/lang-css.js +0 -2
- package/resources/node-bacnet/docs/scripts/prettify/prettify.js +0 -28
- package/resources/node-bacnet/docs/scripts/search.js +0 -47
- package/resources/node-bacnet/docs/services_i-am.js.html +0 -157
- package/resources/node-bacnet/docs/services_time-sync.js.html +0 -118
- package/resources/node-bacnet/docs/services_who-is.js.html +0 -138
- package/resources/node-bacnet/docs/styles/jsdoc.css +0 -683
- package/resources/node-bacnet/docs/styles/prettify.css +0 -82
- package/resources/node-bacnet/examples/discover-devices.js +0 -66
- package/resources/node-bacnet/examples/read-device.js +0 -510
- package/resources/node-bacnet/examples/subscribe-cov.js +0 -75
- package/resources/node-bacnet/lib/apdu.js +0 -209
- package/resources/node-bacnet/lib/asn1.js +0 -1733
- package/resources/node-bacnet/lib/bvlc.js +0 -90
- package/resources/node-bacnet/lib/client.js +0 -1695
- package/resources/node-bacnet/lib/enum.js +0 -2463
- package/resources/node-bacnet/lib/npdu.js +0 -123
- package/resources/node-bacnet/lib/services/add-list-element.js +0 -64
- package/resources/node-bacnet/lib/services/alarm-acknowledge.js +0 -90
- package/resources/node-bacnet/lib/services/alarm-summary.js +0 -42
- package/resources/node-bacnet/lib/services/atomic-read-file.js +0 -162
- package/resources/node-bacnet/lib/services/atomic-write-file.js +0 -138
- package/resources/node-bacnet/lib/services/cov-notify.js +0 -126
- package/resources/node-bacnet/lib/services/create-object.js +0 -106
- package/resources/node-bacnet/lib/services/delete-object.js +0 -23
- package/resources/node-bacnet/lib/services/device-communication-control.js +0 -48
- package/resources/node-bacnet/lib/services/error.js +0 -33
- package/resources/node-bacnet/lib/services/event-information.js +0 -99
- package/resources/node-bacnet/lib/services/event-notify-data.js +0 -229
- package/resources/node-bacnet/lib/services/get-enrollment-summary.js +0 -178
- package/resources/node-bacnet/lib/services/get-event-information.js +0 -144
- package/resources/node-bacnet/lib/services/i-am.js +0 -90
- package/resources/node-bacnet/lib/services/i-have.js +0 -34
- package/resources/node-bacnet/lib/services/index.js +0 -34
- package/resources/node-bacnet/lib/services/life-safety-operation.js +0 -40
- package/resources/node-bacnet/lib/services/private-transfer.js +0 -43
- package/resources/node-bacnet/lib/services/read-property-multiple.js +0 -50
- package/resources/node-bacnet/lib/services/read-property.js +0 -130
- package/resources/node-bacnet/lib/services/read-range.js +0 -201
- package/resources/node-bacnet/lib/services/register-foreign-device.js +0 -18
- package/resources/node-bacnet/lib/services/reinitialize-device.js +0 -37
- package/resources/node-bacnet/lib/services/subscribe-cov.js +0 -57
- package/resources/node-bacnet/lib/services/subscribe-property.js +0 -97
- package/resources/node-bacnet/lib/services/time-sync.js +0 -51
- package/resources/node-bacnet/lib/services/who-has.js +0 -54
- package/resources/node-bacnet/lib/services/who-is.js +0 -71
- package/resources/node-bacnet/lib/services/write-property-multiple.js +0 -117
- package/resources/node-bacnet/lib/services/write-property.js +0 -94
- package/resources/node-bacnet/lib/transport.js +0 -82
- package/resources/node-bacnet/package.json +0 -92
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* This script will discover tze devices and tries to register a COV for ANALOG_INPUT 0
|
|
5
|
-
* The script works very well when the Yabe Room Simulator exe is running
|
|
6
|
-
*
|
|
7
|
-
* After 20s the subscription is cancelled by updating it with a lifetime of 1s
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
const Bacnet = require('../index');
|
|
11
|
-
|
|
12
|
-
// you need to run the Weather2 Station of the YABE BACnet package
|
|
13
|
-
// https://sourceforge.net/projects/yetanotherbacnetexplorer/
|
|
14
|
-
|
|
15
|
-
// create instance of Bacnet
|
|
16
|
-
const bacnetClient = new Bacnet({apduTimeout: 10000, interface: '0.0.0.0'});
|
|
17
|
-
|
|
18
|
-
// emitted for each new message
|
|
19
|
-
bacnetClient.on('message', (msg, rinfo) => {
|
|
20
|
-
console.log(msg);
|
|
21
|
-
if (rinfo) console.log(rinfo);
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
// emitted on errors
|
|
25
|
-
bacnetClient.on('error', (err) => {
|
|
26
|
-
console.error(err);
|
|
27
|
-
bacnetClient.close();
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
// emmitted when Bacnet server listens for incoming UDP packages
|
|
31
|
-
bacnetClient.on('listening', () => {
|
|
32
|
-
console.log('sent whoIs ' + Date.now());
|
|
33
|
-
// discover devices once we are listening
|
|
34
|
-
bacnetClient.whoIs();
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
// emitted when "Change of object" Messages are coming in
|
|
38
|
-
bacnetClient.on('covNotifyUnconfirmed', (data) => {
|
|
39
|
-
console.log('Received COV: ' + JSON.stringify(data));
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
// emitted when a new device is discovered in the network
|
|
43
|
-
bacnetClient.on('iAm', (device) => {
|
|
44
|
-
console.log('Received iAm: ' + JSON.stringify(device, null, 4));
|
|
45
|
-
// address object of discovered device,
|
|
46
|
-
// just use in subsequent calls that are directed to this device
|
|
47
|
-
const address = device.header.sender;
|
|
48
|
-
|
|
49
|
-
//discovered device ID
|
|
50
|
-
const deviceId = device.payload.deviceId;
|
|
51
|
-
console.log('Found Device ' + deviceId + ' on ' + JSON.stringify(address));
|
|
52
|
-
|
|
53
|
-
// Subscribe changes for RESENT_VALUE of ANALOG_INPUT,0 object
|
|
54
|
-
// lifetime 0 means "for ever"
|
|
55
|
-
bacnetClient.subscribeCov(address, {type: 0, instance: 0}, 85, false, false, 0, (err) => {
|
|
56
|
-
console.log('subscribeCOV' + err);
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
// after 20s re-subscribe but with 1s lifetime to stop it
|
|
60
|
-
// I had issues with "cancel" call with the simulated device
|
|
61
|
-
setTimeout(() => {
|
|
62
|
-
bacnetClient.subscribeCov(address, {type: 0, instance: 0}, 85, false, false, 1, (err) => {
|
|
63
|
-
console.log('UnsubscribeCOV' + err);
|
|
64
|
-
});
|
|
65
|
-
}, 20000);
|
|
66
|
-
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
// after 30s end the connection
|
|
70
|
-
setTimeout(() => {
|
|
71
|
-
|
|
72
|
-
bacnetClient.close();
|
|
73
|
-
console.log('closed transport ' + Date.now());
|
|
74
|
-
|
|
75
|
-
}, 30000); // do not close to fast
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const baAsn1 = require('./asn1');
|
|
4
|
-
const baEnum = require('./enum');
|
|
5
|
-
const debug = require('debug')('bacnet:apdu:debug');
|
|
6
|
-
const trace = require('debug')('bacnet:apdu:trace');
|
|
7
|
-
|
|
8
|
-
const getDecodedType = module.exports.getDecodedType = (buffer, offset) => {
|
|
9
|
-
return buffer[offset];
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
module.exports.setDecodedType = (buffer, offset, type) => {
|
|
13
|
-
buffer[offset] = type;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
module.exports.getDecodedInvokeId = (buffer, offset) => {
|
|
17
|
-
const type = getDecodedType(buffer, offset);
|
|
18
|
-
switch (type & baEnum.PDU_TYPE_MASK) {
|
|
19
|
-
case baEnum.PduType.SIMPLE_ACK:
|
|
20
|
-
case baEnum.PduType.COMPLEX_ACK:
|
|
21
|
-
case baEnum.PduType.ERROR:
|
|
22
|
-
case baEnum.PduType.REJECT:
|
|
23
|
-
case baEnum.PduType.ABORT:
|
|
24
|
-
return buffer[offset + 1];
|
|
25
|
-
case baEnum.PduType.CONFIRMED_REQUEST:
|
|
26
|
-
return buffer[offset + 2];
|
|
27
|
-
default:
|
|
28
|
-
return undefined;
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
module.exports.encodeConfirmedServiceRequest = (buffer, type, service, maxSegments, maxApdu, invokeId, sequencenumber, proposedWindowSize) => {
|
|
33
|
-
buffer.buffer[buffer.offset++] = type;
|
|
34
|
-
buffer.buffer[buffer.offset++] = maxSegments | maxApdu;
|
|
35
|
-
buffer.buffer[buffer.offset++] = invokeId;
|
|
36
|
-
if ((type & baEnum.PduConReqBit.SEGMENTED_MESSAGE) > 0) {
|
|
37
|
-
buffer.buffer[buffer.offset++] = sequencenumber;
|
|
38
|
-
buffer.buffer[buffer.offset++] = proposedWindowSize;
|
|
39
|
-
}
|
|
40
|
-
buffer.buffer[buffer.offset++] = service;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
module.exports.decodeConfirmedServiceRequest = (buffer, offset) => {
|
|
44
|
-
const orgOffset = offset;
|
|
45
|
-
const type = buffer[offset++];
|
|
46
|
-
const maxSegments = buffer[offset] & 0xF0;
|
|
47
|
-
const maxApdu = buffer[offset++] & 0x0F;
|
|
48
|
-
const invokeId = buffer[offset++];
|
|
49
|
-
let sequencenumber = 0;
|
|
50
|
-
let proposedWindowNumber = 0;
|
|
51
|
-
if ((type & baEnum.PduConReqBit.SEGMENTED_MESSAGE) > 0) {
|
|
52
|
-
sequencenumber = buffer[offset++];
|
|
53
|
-
proposedWindowNumber = buffer[offset++];
|
|
54
|
-
}
|
|
55
|
-
const service = buffer[offset++];
|
|
56
|
-
return {
|
|
57
|
-
len: offset - orgOffset,
|
|
58
|
-
type,
|
|
59
|
-
service,
|
|
60
|
-
maxSegments,
|
|
61
|
-
maxApdu,
|
|
62
|
-
invokeId,
|
|
63
|
-
sequencenumber,
|
|
64
|
-
proposedWindowNumber
|
|
65
|
-
};
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
module.exports.encodeUnconfirmedServiceRequest = (buffer, type, service) => {
|
|
69
|
-
buffer.buffer[buffer.offset++] = type;
|
|
70
|
-
buffer.buffer[buffer.offset++] = service;
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
module.exports.decodeUnconfirmedServiceRequest = (buffer, offset) => {
|
|
74
|
-
const orgOffset = offset;
|
|
75
|
-
const type = buffer[offset++];
|
|
76
|
-
const service = buffer[offset++];
|
|
77
|
-
return {
|
|
78
|
-
len: offset - orgOffset,
|
|
79
|
-
type,
|
|
80
|
-
service
|
|
81
|
-
};
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
module.exports.encodeSimpleAck = (buffer, type, service, invokeId) => {
|
|
85
|
-
buffer.buffer[buffer.offset++] = type;
|
|
86
|
-
buffer.buffer[buffer.offset++] = invokeId;
|
|
87
|
-
buffer.buffer[buffer.offset++] = service;
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
module.exports.decodeSimpleAck = (buffer, offset) => {
|
|
91
|
-
const orgOffset = offset;
|
|
92
|
-
const type = buffer[offset++];
|
|
93
|
-
const invokeId = buffer[offset++];
|
|
94
|
-
const service = buffer[offset++];
|
|
95
|
-
return {
|
|
96
|
-
len: offset - orgOffset,
|
|
97
|
-
type,
|
|
98
|
-
service,
|
|
99
|
-
invokeId
|
|
100
|
-
};
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
module.exports.encodeComplexAck = (buffer, type, service, invokeId, sequencenumber, proposedWindowNumber) => {
|
|
104
|
-
let len = 3;
|
|
105
|
-
buffer.buffer[buffer.offset++] = type;
|
|
106
|
-
buffer.buffer[buffer.offset++] = invokeId;
|
|
107
|
-
if ((type & baEnum.PduConReqBit.SEGMENTED_MESSAGE) > 0) {
|
|
108
|
-
buffer.buffer[buffer.offset++] = sequencenumber;
|
|
109
|
-
buffer.buffer[buffer.offset++] = proposedWindowNumber;
|
|
110
|
-
len += 2;
|
|
111
|
-
}
|
|
112
|
-
buffer.buffer[buffer.offset++] = service;
|
|
113
|
-
return len;
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
module.exports.decodeComplexAck = (buffer, offset) => {
|
|
117
|
-
const orgOffset = offset;
|
|
118
|
-
const type = buffer[offset++];
|
|
119
|
-
const invokeId = buffer[offset++];
|
|
120
|
-
let sequencenumber = 0;
|
|
121
|
-
let proposedWindowNumber = 0;
|
|
122
|
-
if ((type & baEnum.PduConReqBit.SEGMENTED_MESSAGE) > 0) {
|
|
123
|
-
sequencenumber = buffer[offset++];
|
|
124
|
-
proposedWindowNumber = buffer[offset++];
|
|
125
|
-
}
|
|
126
|
-
const service = buffer[offset++];
|
|
127
|
-
return {
|
|
128
|
-
len: offset - orgOffset,
|
|
129
|
-
type,
|
|
130
|
-
service,
|
|
131
|
-
invokeId,
|
|
132
|
-
sequencenumber,
|
|
133
|
-
proposedWindowNumber
|
|
134
|
-
};
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
module.exports.encodeSegmentAck = (buffer, type, originalInvokeId, sequencenumber, actualWindowSize) => {
|
|
138
|
-
buffer.buffer[buffer.offset++] = type;
|
|
139
|
-
buffer.buffer[buffer.offset++] = originalInvokeId;
|
|
140
|
-
buffer.buffer[buffer.offset++] = sequencenumber;
|
|
141
|
-
buffer.buffer[buffer.offset++] = actualWindowSize;
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
module.exports.decodeSegmentAck = (buffer, offset) => {
|
|
145
|
-
const orgOffset = offset;
|
|
146
|
-
const type = buffer[offset++];
|
|
147
|
-
const originalInvokeId = buffer[offset++];
|
|
148
|
-
const sequencenumber = buffer[offset++];
|
|
149
|
-
const actualWindowSize = buffer[offset++];
|
|
150
|
-
return {
|
|
151
|
-
len: offset - orgOffset,
|
|
152
|
-
type,
|
|
153
|
-
originalInvokeId,
|
|
154
|
-
sequencenumber,
|
|
155
|
-
actualWindowSize
|
|
156
|
-
};
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
module.exports.encodeResult = (buffer, /* BvlcResultFormat */ resultCode) => {
|
|
160
|
-
baAsn1.encodeUnsigned(buffer, resultCode, 2);
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
module.exports.decodeResult = (buffer, offset) => {
|
|
164
|
-
const orgOffset = offset;
|
|
165
|
-
const decode = baAsn1.decodeUnsigned(buffer, offset, 2);
|
|
166
|
-
offset += decode.len;
|
|
167
|
-
return {
|
|
168
|
-
len: offset - orgOffset,
|
|
169
|
-
resultCode: decode.value, // BvlcResultFormat
|
|
170
|
-
};
|
|
171
|
-
};
|
|
172
|
-
|
|
173
|
-
module.exports.encodeError = (buffer, type, service, invokeId) => {
|
|
174
|
-
buffer.buffer[buffer.offset++] = type;
|
|
175
|
-
buffer.buffer[buffer.offset++] = invokeId;
|
|
176
|
-
buffer.buffer[buffer.offset++] = service;
|
|
177
|
-
};
|
|
178
|
-
|
|
179
|
-
module.exports.decodeError = (buffer, offset) => {
|
|
180
|
-
const orgOffset = offset;
|
|
181
|
-
const type = buffer[offset++];
|
|
182
|
-
const invokeId = buffer[offset++];
|
|
183
|
-
const service = buffer[offset++];
|
|
184
|
-
return {
|
|
185
|
-
len: offset - orgOffset,
|
|
186
|
-
type,
|
|
187
|
-
service,
|
|
188
|
-
invokeId
|
|
189
|
-
};
|
|
190
|
-
};
|
|
191
|
-
|
|
192
|
-
module.exports.encodeAbort = (buffer, type, invokeId, reason) => {
|
|
193
|
-
buffer.buffer[buffer.offset++] = type;
|
|
194
|
-
buffer.buffer[buffer.offset++] = invokeId;
|
|
195
|
-
buffer.buffer[buffer.offset++] = reason;
|
|
196
|
-
};
|
|
197
|
-
|
|
198
|
-
module.exports.decodeAbort = (buffer, offset) => {
|
|
199
|
-
const orgOffset = offset;
|
|
200
|
-
const type = buffer[offset++];
|
|
201
|
-
const invokeId = buffer[offset++];
|
|
202
|
-
const reason = buffer[offset++];
|
|
203
|
-
return {
|
|
204
|
-
len: offset - orgOffset,
|
|
205
|
-
type,
|
|
206
|
-
invokeId,
|
|
207
|
-
reason
|
|
208
|
-
};
|
|
209
|
-
};
|