@bitpoolos/edge-bacnet 1.0.6 → 1.1.0
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 +650 -233
- package/bacnet_device.js +65 -16
- package/bacnet_gateway.html +242 -99
- package/bacnet_gateway.js +211 -27
- package/bacnet_object.js +1 -1
- package/bacnet_read.html +211 -133
- package/bacnet_read.js +24 -24
- package/bacnet_server.js +321 -0
- package/bacnet_write.html +24 -15
- package/bacnet_write.js +0 -2
- package/common.js +95 -9
- package/edge-bacnet-datastore.cfg +0 -0
- package/package.json +6 -4
- package/resources/confirmationservice.min.js +1 -0
- package/resources/confirmdialog.min.js +1 -0
- package/resources/fonts/primeicons.woff2 +0 -0
- package/resources/node-bacnet/CHANGELOG.md +481 -0
- package/resources/{bacstack → node-bacnet}/LICENSE.md +3 -1
- package/resources/node-bacnet/README.md +91 -0
- package/resources/node-bacnet/docs/Client.html +4422 -0
- 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 +7032 -0
- package/resources/node-bacnet/docs/client.js.html +1759 -0
- package/resources/node-bacnet/docs/enum.js.html +2530 -0
- package/resources/node-bacnet/docs/global.html +2068 -0
- package/resources/node-bacnet/docs/images/mocha-logo.svg +65 -0
- package/resources/node-bacnet/docs/index.html +283 -0
- package/resources/node-bacnet/docs/scripts/collapse.js +11 -0
- package/resources/node-bacnet/docs/scripts/jquery-3.1.1.min.js +4 -0
- package/resources/node-bacnet/docs/scripts/linenumber.js +26 -0
- package/resources/node-bacnet/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
- package/resources/node-bacnet/docs/scripts/prettify/lang-css.js +2 -0
- package/resources/node-bacnet/docs/scripts/prettify/prettify.js +28 -0
- package/resources/node-bacnet/docs/scripts/search.js +47 -0
- package/resources/node-bacnet/docs/services_i-am.js.html +157 -0
- package/resources/node-bacnet/docs/services_time-sync.js.html +118 -0
- package/resources/node-bacnet/docs/services_who-is.js.html +138 -0
- package/resources/node-bacnet/docs/styles/jsdoc.css +683 -0
- package/resources/node-bacnet/docs/styles/prettify.css +82 -0
- package/resources/node-bacnet/examples/discover-devices.js +66 -0
- package/resources/node-bacnet/examples/read-device.js +510 -0
- package/resources/node-bacnet/examples/subscribe-cov.js +75 -0
- package/resources/{bacstack → node-bacnet}/index.js +3 -0
- package/resources/{bacstack → node-bacnet}/lib/apdu.js +56 -39
- package/resources/{bacstack → node-bacnet}/lib/asn1.js +550 -532
- package/resources/node-bacnet/lib/bvlc.js +90 -0
- package/resources/node-bacnet/lib/client.js +1695 -0
- package/resources/node-bacnet/lib/enum.js +2463 -0
- package/resources/node-bacnet/lib/npdu.js +123 -0
- package/resources/{bacstack → node-bacnet}/lib/services/add-list-element.js +12 -6
- package/resources/{bacstack → node-bacnet}/lib/services/alarm-acknowledge.js +3 -3
- package/resources/{bacstack → node-bacnet}/lib/services/alarm-summary.js +5 -4
- package/resources/{bacstack → node-bacnet}/lib/services/atomic-read-file.js +49 -26
- package/resources/{bacstack → node-bacnet}/lib/services/atomic-write-file.js +40 -23
- package/resources/{bacstack → node-bacnet}/lib/services/cov-notify.js +33 -17
- package/resources/{bacstack → node-bacnet}/lib/services/create-object.js +23 -13
- package/resources/{bacstack → node-bacnet}/lib/services/delete-object.js +7 -2
- package/resources/{bacstack → node-bacnet}/lib/services/device-communication-control.js +8 -3
- package/resources/{bacstack → node-bacnet}/lib/services/error.js +7 -0
- package/resources/{bacstack → node-bacnet}/lib/services/event-information.js +10 -9
- package/resources/{bacstack → node-bacnet}/lib/services/event-notify-data.js +38 -16
- package/resources/{bacstack → node-bacnet}/lib/services/get-enrollment-summary.js +24 -11
- package/resources/{bacstack → node-bacnet}/lib/services/get-event-information.js +28 -13
- package/resources/node-bacnet/lib/services/i-am.js +90 -0
- package/resources/{bacstack/lib/services/i-have-broadcast.js → node-bacnet/lib/services/i-have.js} +3 -2
- package/resources/{bacstack → node-bacnet}/lib/services/index.js +7 -4
- package/resources/{bacstack → node-bacnet}/lib/services/life-safety-operation.js +3 -2
- package/resources/{bacstack → node-bacnet}/lib/services/private-transfer.js +3 -2
- package/resources/{bacstack → node-bacnet}/lib/services/read-property-multiple.js +11 -6
- package/resources/{bacstack → node-bacnet}/lib/services/read-property.js +42 -24
- package/resources/{bacstack → node-bacnet}/lib/services/read-range.js +37 -27
- package/resources/node-bacnet/lib/services/register-foreign-device.js +18 -0
- package/resources/{bacstack → node-bacnet}/lib/services/reinitialize-device.js +9 -4
- package/resources/{bacstack → node-bacnet}/lib/services/subscribe-cov.js +9 -4
- package/resources/{bacstack → node-bacnet}/lib/services/subscribe-property.js +18 -8
- package/resources/{bacstack → node-bacnet}/lib/services/time-sync.js +28 -5
- package/resources/{bacstack → node-bacnet}/lib/services/who-has.js +3 -3
- package/resources/{bacstack → node-bacnet}/lib/services/who-is.js +42 -9
- package/resources/{bacstack → node-bacnet}/lib/services/write-property-multiple.js +33 -16
- package/resources/{bacstack → node-bacnet}/lib/services/write-property.js +23 -13
- package/resources/node-bacnet/lib/transport.js +82 -0
- package/resources/node-bacnet/package.json +92 -0
- package/resources/primeicons.css +90 -2
- package/resources/bacstack/.codeclimate.yml +0 -15
- package/resources/bacstack/.dockerignore +0 -5
- package/resources/bacstack/.editorconfig +0 -13
- package/resources/bacstack/.eslintrc.yml +0 -13
- package/resources/bacstack/.github/ISSUE_TEMPLATE.md +0 -26
- package/resources/bacstack/.github/PULL_REQUEST_TEMPLATE.md +0 -14
- package/resources/bacstack/.github/workflows/ci.yml +0 -39
- package/resources/bacstack/.jscsrc +0 -8
- package/resources/bacstack/.jshintrc +0 -50
- package/resources/bacstack/.travis.yml +0 -27
- package/resources/bacstack/CHANGELOG.md +0 -232
- package/resources/bacstack/CODE_OF_CONDUCT.md +0 -74
- package/resources/bacstack/CONTRIBUTING.md +0 -77
- package/resources/bacstack/Dockerfile +0 -15
- package/resources/bacstack/FAQ.md +0 -64
- package/resources/bacstack/README.md +0 -157
- package/resources/bacstack/docker-compose.yml +0 -9
- package/resources/bacstack/lib/adpu.js +0 -190
- package/resources/bacstack/lib/bvlc.js +0 -43
- package/resources/bacstack/lib/client.js +0 -1028
- package/resources/bacstack/lib/enum.js +0 -1314
- package/resources/bacstack/lib/npdu.js +0 -119
- package/resources/bacstack/lib/services/i-am-broadcast.js +0 -51
- package/resources/bacstack/lib/services.js +0 -1963
- package/resources/bacstack/lib/transport.js +0 -52
- package/resources/bacstack/package-lock.json +0 -7974
- package/resources/bacstack/package.json +0 -84
- package/resources/bacstack/test/compliance/who-is.spec.js +0 -37
- package/resources/bacstack/test/integration/acknowledge-alarm.spec.js +0 -14
- package/resources/bacstack/test/integration/add-list-element.spec.js +0 -16
- package/resources/bacstack/test/integration/confirmed-event-notification.spec.js +0 -30
- package/resources/bacstack/test/integration/confirmed-private-transfer.spec.js +0 -15
- package/resources/bacstack/test/integration/create-object.spec.js +0 -16
- package/resources/bacstack/test/integration/delete-object.spec.js +0 -14
- package/resources/bacstack/test/integration/device-communication-control.spec.js +0 -14
- package/resources/bacstack/test/integration/get-alarm-summary.spec.js +0 -14
- package/resources/bacstack/test/integration/get-enrollment-summary.spec.js +0 -15
- package/resources/bacstack/test/integration/get-event-information.spec.js +0 -14
- package/resources/bacstack/test/integration/read-file.spec.js +0 -14
- package/resources/bacstack/test/integration/read-property-multiple.spec.js +0 -110
- package/resources/bacstack/test/integration/read-property.spec.js +0 -14
- package/resources/bacstack/test/integration/read-range.spec.js +0 -14
- package/resources/bacstack/test/integration/reinitialize-sevice.spec.js +0 -14
- package/resources/bacstack/test/integration/remove-list-element.spec.js +0 -16
- package/resources/bacstack/test/integration/subscribe-cov.spec.js +0 -14
- package/resources/bacstack/test/integration/subscribe-property.spec.js +0 -14
- package/resources/bacstack/test/integration/time-sync-utc.spec.js +0 -10
- package/resources/bacstack/test/integration/time-sync.spec.js +0 -10
- package/resources/bacstack/test/integration/unconfirmed-event-notification.spec.js +0 -28
- package/resources/bacstack/test/integration/unconfirmed-private-transfer.spec.js +0 -11
- package/resources/bacstack/test/integration/utils.js +0 -30
- package/resources/bacstack/test/integration/who-is.spec.js +0 -17
- package/resources/bacstack/test/integration/write-file.spec.js +0 -14
- package/resources/bacstack/test/integration/write-property-multiple.spec.js +0 -19
- package/resources/bacstack/test/integration/write-property.spec.js +0 -14
- package/resources/bacstack/test/unit/apdu.spec.js +0 -162
- package/resources/bacstack/test/unit/asn1.spec.js +0 -39
- package/resources/bacstack/test/unit/bacnet-apdu.spec.js +0 -161
- package/resources/bacstack/test/unit/bacnet-asn1.spec.js +0 -32
- package/resources/bacstack/test/unit/bacnet-bvlc.spec.js +0 -57
- package/resources/bacstack/test/unit/bacnet-npdu.spec.js +0 -118
- package/resources/bacstack/test/unit/bacnet-services.spec.js +0 -2052
- package/resources/bacstack/test/unit/bvlc.spec.js +0 -58
- package/resources/bacstack/test/unit/npdu.spec.js +0 -119
- package/resources/bacstack/test/unit/service-add-list-element.spec.js +0 -24
- package/resources/bacstack/test/unit/service-alarm-acknowledge.spec.js +0 -71
- package/resources/bacstack/test/unit/service-alarm-summary.spec.js +0 -22
- package/resources/bacstack/test/unit/service-atomic-read-file.spec.js +0 -54
- package/resources/bacstack/test/unit/service-atomic-write-file.spec.js +0 -56
- package/resources/bacstack/test/unit/service-cov-notify.spec.js +0 -98
- package/resources/bacstack/test/unit/service-create-object.spec.js +0 -90
- package/resources/bacstack/test/unit/service-delete-object.spec.js +0 -17
- package/resources/bacstack/test/unit/service-device-communication-control.spec.js +0 -29
- package/resources/bacstack/test/unit/service-error.spec.js +0 -17
- package/resources/bacstack/test/unit/service-event-information.spec.js +0 -48
- package/resources/bacstack/test/unit/service-event-notify-data.spec.js +0 -310
- package/resources/bacstack/test/unit/service-get-enrollment-summary.spec.js +0 -45
- package/resources/bacstack/test/unit/service-get-event-information.spec.js +0 -62
- package/resources/bacstack/test/unit/service-i-am.spec.js +0 -19
- package/resources/bacstack/test/unit/service-i-have-broadcast.spec.js +0 -18
- package/resources/bacstack/test/unit/service-life-safety-operation.spec.js +0 -19
- package/resources/bacstack/test/unit/service-private-transfer.spec.js +0 -18
- package/resources/bacstack/test/unit/service-read-property-multiple.spec.js +0 -131
- package/resources/bacstack/test/unit/service-read-property.spec.js +0 -541
- package/resources/bacstack/test/unit/service-read-range.spec.js +0 -97
- package/resources/bacstack/test/unit/service-reinitialize-device.spec.js +0 -27
- package/resources/bacstack/test/unit/service-subscribe-cov.spec.js +0 -32
- package/resources/bacstack/test/unit/service-subscribe-property.spec.js +0 -50
- package/resources/bacstack/test/unit/service-time-sync.spec.js +0 -18
- package/resources/bacstack/test/unit/service-who-has.spec.js +0 -33
- package/resources/bacstack/test/unit/service-who-is.spec.js +0 -17
- package/resources/bacstack/test/unit/service-write-property-multiple.spec.js +0 -143
- package/resources/bacstack/test/unit/service-write-property.spec.js +0 -198
- package/resources/bacstack/test/unit/utils.js +0 -6
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
var expect = require('chai').expect;
|
|
2
|
-
var utils = require('./utils');
|
|
3
|
-
|
|
4
|
-
describe('bacstack - writePropertyMultiple integration', function() {
|
|
5
|
-
it('should return a timeout error if no device is available', function(next) {
|
|
6
|
-
var client = new utils.bacnetClient({adpuTimeout: 200});
|
|
7
|
-
var values = [
|
|
8
|
-
{objectId: {type: 8, instance: 44301}, values: [
|
|
9
|
-
{property: {id: 28, index: 12}, value: [{type: 1, value: true}], priority: 8}
|
|
10
|
-
]}
|
|
11
|
-
];
|
|
12
|
-
client.writePropertyMultiple('127.0.0.1', values, function(err, value) {
|
|
13
|
-
expect(err.message).to.eql('ERR_TIMEOUT');
|
|
14
|
-
expect(value).to.eql(undefined);
|
|
15
|
-
client.close();
|
|
16
|
-
next();
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
});
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
var expect = require('chai').expect;
|
|
2
|
-
var utils = require('./utils');
|
|
3
|
-
|
|
4
|
-
describe('bacstack - writeProperty integration', function() {
|
|
5
|
-
it('should return a timeout error if no device is available', function(next) {
|
|
6
|
-
var client = new utils.bacnetClient({adpuTimeout: 200});
|
|
7
|
-
client.writeProperty('127.0.0.1', {type: 8, instance: 44301}, 28, [{type: 4, value: 100}], function(err, value) {
|
|
8
|
-
expect(err.message).to.eql('ERR_TIMEOUT');
|
|
9
|
-
expect(value).to.eql(undefined);
|
|
10
|
-
client.close();
|
|
11
|
-
next();
|
|
12
|
-
});
|
|
13
|
-
});
|
|
14
|
-
});
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const utils = require('./utils');
|
|
4
|
-
const baApdu = require('../../lib/apdu');
|
|
5
|
-
|
|
6
|
-
describe('bacstack - APDU layer', () => {
|
|
7
|
-
describe('decodedType', () => {
|
|
8
|
-
it('should correctly encode and decode a package', () => {
|
|
9
|
-
const value = [0, 128, 4, 5];
|
|
10
|
-
baApdu.setDecodedType(value, 1, 48);
|
|
11
|
-
const result = baApdu.getDecodedInvokeId(value, 1);
|
|
12
|
-
expect(result).toEqual(4);
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
it('should correctly encode and decode a confirmed service package', () => {
|
|
16
|
-
const value = [0, 128, 4, 5];
|
|
17
|
-
baApdu.setDecodedType(value, 1, 0);
|
|
18
|
-
const result = baApdu.getDecodedInvokeId(value, 1);
|
|
19
|
-
expect(result).toEqual(5);
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
it('should fail if decode an invalid package', () => {
|
|
23
|
-
const value = [0, 128, 4, 5];
|
|
24
|
-
const result = baApdu.getDecodedInvokeId(value, 1);
|
|
25
|
-
expect(result).toBeUndefined();
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
describe('confirmedServiceRequest', () => {
|
|
30
|
-
it('should correctly encode and decode a package', () => {
|
|
31
|
-
const buffer = utils.getBuffer();
|
|
32
|
-
baApdu.encodeConfirmedServiceRequest(buffer, 0, 41, 176, 12, 44, 45, 46);
|
|
33
|
-
const result = baApdu.decodeConfirmedServiceRequest(buffer.buffer, 0);
|
|
34
|
-
expect(result).toEqual({
|
|
35
|
-
len: 4,
|
|
36
|
-
type: 0,
|
|
37
|
-
service: 41,
|
|
38
|
-
maxSegments: 176,
|
|
39
|
-
maxApdu: 12,
|
|
40
|
-
invokeId: 44,
|
|
41
|
-
sequencenumber: 0,
|
|
42
|
-
proposedWindowNumber: 0
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
it('should correctly encode and decode a segmented package', () => {
|
|
47
|
-
const buffer = utils.getBuffer();
|
|
48
|
-
baApdu.encodeConfirmedServiceRequest(buffer, 8, 47, 208, 14, 50, 51, 52);
|
|
49
|
-
const result = baApdu.decodeConfirmedServiceRequest(buffer.buffer, 0);
|
|
50
|
-
expect(result).toEqual({
|
|
51
|
-
len: 6,
|
|
52
|
-
type: 8,
|
|
53
|
-
service: 47,
|
|
54
|
-
maxSegments: 208,
|
|
55
|
-
maxApdu: 14,
|
|
56
|
-
invokeId: 50,
|
|
57
|
-
sequencenumber: 51,
|
|
58
|
-
proposedWindowNumber: 52
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
describe('unconfirmedServiceRequest', () => {
|
|
64
|
-
it('should correctly encode and decode a package', () => {
|
|
65
|
-
const buffer = utils.getBuffer();
|
|
66
|
-
baApdu.encodeUnconfirmedServiceRequest(buffer, 33, 34);
|
|
67
|
-
const result = baApdu.decodeUnconfirmedServiceRequest(buffer.buffer, 0);
|
|
68
|
-
expect(result).toEqual({
|
|
69
|
-
len: 2,
|
|
70
|
-
type: 33,
|
|
71
|
-
service: 34
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
describe('simpleAck', () => {
|
|
77
|
-
it('should correctly encode and decode a package', () => {
|
|
78
|
-
const buffer = utils.getBuffer();
|
|
79
|
-
baApdu.encodeSimpleAck(buffer, 11, 12, 13);
|
|
80
|
-
const result = baApdu.decodeSimpleAck(buffer.buffer, 0);
|
|
81
|
-
expect(result).toEqual({
|
|
82
|
-
len: 3,
|
|
83
|
-
type: 11,
|
|
84
|
-
service: 12,
|
|
85
|
-
invokeId: 13
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
describe('complexAck', () => {
|
|
91
|
-
it('should correctly encode and decode a package', () => {
|
|
92
|
-
const buffer = utils.getBuffer();
|
|
93
|
-
baApdu.encodeComplexAck(buffer, 0, 15, 16, 20, 21);
|
|
94
|
-
const result = baApdu.decodeComplexAck(buffer.buffer, 0);
|
|
95
|
-
expect(result).toEqual({
|
|
96
|
-
len: 3,
|
|
97
|
-
type: 0,
|
|
98
|
-
service: 15,
|
|
99
|
-
invokeId: 16,
|
|
100
|
-
sequencenumber: 0,
|
|
101
|
-
proposedWindowNumber: 0
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
it('should correctly encode and decode a segmented package', () => {
|
|
106
|
-
const buffer = utils.getBuffer();
|
|
107
|
-
baApdu.encodeComplexAck(buffer, 8, 18, 19, 20, 21);
|
|
108
|
-
const result = baApdu.decodeComplexAck(buffer.buffer, 0);
|
|
109
|
-
expect(result).toEqual({
|
|
110
|
-
len: 5,
|
|
111
|
-
type: 8,
|
|
112
|
-
service: 18,
|
|
113
|
-
invokeId: 19,
|
|
114
|
-
sequencenumber: 20,
|
|
115
|
-
proposedWindowNumber: 21
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
describe('segmentAck', () => {
|
|
121
|
-
it('should correctly encode and decode a package', () => {
|
|
122
|
-
const buffer = utils.getBuffer();
|
|
123
|
-
baApdu.encodeSegmentAck(buffer, 6, 7, 8, 9);
|
|
124
|
-
const result = baApdu.decodeSegmentAck(buffer.buffer, 0);
|
|
125
|
-
expect(result).toEqual({
|
|
126
|
-
len: 4,
|
|
127
|
-
type: 6,
|
|
128
|
-
originalInvokeId: 7,
|
|
129
|
-
sequencenumber: 8,
|
|
130
|
-
actualWindowSize: 9
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
describe('error', () => {
|
|
136
|
-
it('should correctly encode and decode a package', () => {
|
|
137
|
-
const buffer = utils.getBuffer();
|
|
138
|
-
baApdu.encodeError(buffer, 5, 6, 7);
|
|
139
|
-
const result = baApdu.decodeError(buffer.buffer, 0);
|
|
140
|
-
expect(result).toEqual({
|
|
141
|
-
len: 3,
|
|
142
|
-
type: 5,
|
|
143
|
-
service: 6,
|
|
144
|
-
invokeId: 7
|
|
145
|
-
});
|
|
146
|
-
});
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
describe('abort', () => {
|
|
150
|
-
it('should correctly encode and decode a package', () => {
|
|
151
|
-
const buffer = utils.getBuffer();
|
|
152
|
-
baApdu.encodeAbort(buffer, 4, 5, 6);
|
|
153
|
-
const result = baApdu.decodeAbort(buffer.buffer, 0);
|
|
154
|
-
expect(result).toEqual({
|
|
155
|
-
len: 3,
|
|
156
|
-
type: 4,
|
|
157
|
-
invokeId: 5,
|
|
158
|
-
reason: 6
|
|
159
|
-
});
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
|
-
});
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const baAsn1 = require('../../lib/asn1');
|
|
4
|
-
|
|
5
|
-
describe('bacstack - ASN1 layer', () => {
|
|
6
|
-
describe('decodeUnsigned', () => {
|
|
7
|
-
it('should fail if unsuport length', () => {
|
|
8
|
-
expect(() => baAsn1.decodeUnsigned(Buffer.from([0xFF, 0xFF]), 0, 5)).toThrow('outside buffer bounds');
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
it('should successfully decode 8-bit unsigned integer', () => {
|
|
12
|
-
const result = baAsn1.decodeUnsigned(Buffer.from([0x00, 0xFF, 0xFF, 0xFF, 0xFF]), 1, 1);
|
|
13
|
-
expect(result).toEqual({len: 1, value: 255});
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
it('should successfully decode 16-bit unsigned integer', () => {
|
|
17
|
-
const result = baAsn1.decodeUnsigned(Buffer.from([0x00, 0xFF, 0xFF, 0xFF, 0xFF]), 1, 2);
|
|
18
|
-
expect(result).toEqual({len: 2, value: 65535});
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
it('should successfully decode 24-bit unsigned integer', () => {
|
|
22
|
-
const result = baAsn1.decodeUnsigned(Buffer.from([0x00, 0xFF, 0xFF, 0xFF, 0xFF]), 1, 3);
|
|
23
|
-
expect(result).toEqual({len: 3, value: 16777215});
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
it('should successfully decode 32-bit unsigned integer', () => {
|
|
27
|
-
const result = baAsn1.decodeUnsigned(Buffer.from([0x00, 0xFF, 0xFF, 0xFF, 0xFF]), 1, 4);
|
|
28
|
-
expect(result).toEqual({len: 4, value: 4294967295});
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
describe('encodeBacnetObjectId', () => {
|
|
33
|
-
it('should successfully encode with object-type > 512', () => {
|
|
34
|
-
const buffer = {buffer: Buffer.alloc(4), offset: 0};
|
|
35
|
-
baAsn1.encodeBacnetObjectId(buffer, 600, 600);
|
|
36
|
-
expect(buffer).toEqual({buffer: Buffer.from([150, 0, 2, 88]), offset: 4});
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
});
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
var expect = require('chai').expect;
|
|
2
|
-
var utils = require('./utils');
|
|
3
|
-
var baApdu = require('../../lib/adpu');
|
|
4
|
-
|
|
5
|
-
describe('bacstack - APDU layer', function() {
|
|
6
|
-
describe('decodedType', function() {
|
|
7
|
-
it('should correctly encode and decode a package', function() {
|
|
8
|
-
var value = [0, 128, 4, 5];
|
|
9
|
-
baApdu.setDecodedType(value, 1, 48);
|
|
10
|
-
var result = baApdu.getDecodedInvokeId(value, 1);
|
|
11
|
-
expect(result).to.equal(4);
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
it('should correctly encode and decode a confirmed service package', function() {
|
|
15
|
-
var value = [0, 128, 4, 5];
|
|
16
|
-
baApdu.setDecodedType(value, 1, 0);
|
|
17
|
-
var result = baApdu.getDecodedInvokeId(value, 1);
|
|
18
|
-
expect(result).to.equal(5);
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
it('should fail if decode an invalid package', function() {
|
|
22
|
-
var value = [0, 128, 4, 5];
|
|
23
|
-
var result = baApdu.getDecodedInvokeId(value, 1);
|
|
24
|
-
expect(result).to.equal(undefined);
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
describe('confirmedServiceRequest', function() {
|
|
29
|
-
it('should correctly encode and decode a package', function() {
|
|
30
|
-
var buffer = utils.getBuffer();
|
|
31
|
-
baApdu.encodeConfirmedServiceRequest(buffer, 0, 41, 176, 12, 44, 45, 46);
|
|
32
|
-
var result = baApdu.decodeConfirmedServiceRequest(buffer.buffer, 0);
|
|
33
|
-
expect(result).to.deep.equal({
|
|
34
|
-
len: 4,
|
|
35
|
-
type: 0,
|
|
36
|
-
service: 41,
|
|
37
|
-
maxSegments: 176,
|
|
38
|
-
maxAdpu: 12,
|
|
39
|
-
invokeId: 44,
|
|
40
|
-
sequencenumber: 0,
|
|
41
|
-
proposedWindowNumber: 0
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
it('should correctly encode and decode a segmented package', function() {
|
|
46
|
-
var buffer = utils.getBuffer();
|
|
47
|
-
baApdu.encodeConfirmedServiceRequest(buffer, 8, 47, 208, 14, 50, 51, 52);
|
|
48
|
-
var result = baApdu.decodeConfirmedServiceRequest(buffer.buffer, 0);
|
|
49
|
-
expect(result).to.deep.equal({
|
|
50
|
-
len: 6,
|
|
51
|
-
type: 8,
|
|
52
|
-
service: 47,
|
|
53
|
-
maxSegments: 208,
|
|
54
|
-
maxAdpu: 14,
|
|
55
|
-
invokeId: 50,
|
|
56
|
-
sequencenumber: 51,
|
|
57
|
-
proposedWindowNumber: 52
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
describe('unconfirmedServiceRequest', function() {
|
|
63
|
-
it('should correctly encode and decode a package', function() {
|
|
64
|
-
var buffer = utils.getBuffer();
|
|
65
|
-
baApdu.encodeUnconfirmedServiceRequest(buffer, 33, 34);
|
|
66
|
-
var result = baApdu.decodeUnconfirmedServiceRequest(buffer.buffer, 0);
|
|
67
|
-
expect(result).to.deep.equal({
|
|
68
|
-
len: 2,
|
|
69
|
-
type: 33,
|
|
70
|
-
service: 34
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
describe('simpleAck', function() {
|
|
76
|
-
it('should correctly encode and decode a package', function() {
|
|
77
|
-
var buffer = utils.getBuffer();
|
|
78
|
-
baApdu.encodeSimpleAck(buffer, 11, 12, 13);
|
|
79
|
-
var result = baApdu.decodeSimpleAck(buffer.buffer, 0);
|
|
80
|
-
expect(result).to.deep.equal({
|
|
81
|
-
len: 3,
|
|
82
|
-
type: 11,
|
|
83
|
-
service: 12,
|
|
84
|
-
invokeId: 13
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
describe('complexAck', function() {
|
|
90
|
-
it('should correctly encode and decode a package', function() {
|
|
91
|
-
var buffer = utils.getBuffer();
|
|
92
|
-
baApdu.encodeComplexAck(buffer, 0, 15, 16, 20, 21);
|
|
93
|
-
var result = baApdu.decodeComplexAck(buffer.buffer, 0);
|
|
94
|
-
expect(result).to.deep.equal({
|
|
95
|
-
len: 3,
|
|
96
|
-
type: 0,
|
|
97
|
-
service: 15,
|
|
98
|
-
invokeId: 16,
|
|
99
|
-
sequencenumber: 0,
|
|
100
|
-
proposedWindowNumber: 0
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
it('should correctly encode and decode a segmented package', function() {
|
|
105
|
-
var buffer = utils.getBuffer();
|
|
106
|
-
baApdu.encodeComplexAck(buffer, 8, 18, 19, 20, 21);
|
|
107
|
-
var result = baApdu.decodeComplexAck(buffer.buffer, 0);
|
|
108
|
-
expect(result).to.deep.equal({
|
|
109
|
-
len: 5,
|
|
110
|
-
type: 8,
|
|
111
|
-
service: 18,
|
|
112
|
-
invokeId: 19,
|
|
113
|
-
sequencenumber: 20,
|
|
114
|
-
proposedWindowNumber: 21
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
describe('segmentAck', function() {
|
|
120
|
-
it('should correctly encode and decode a package', function() {
|
|
121
|
-
var buffer = utils.getBuffer();
|
|
122
|
-
baApdu.encodeSegmentAck(buffer, 6, 7, 8, 9);
|
|
123
|
-
var result = baApdu.decodeSegmentAck(buffer.buffer, 0);
|
|
124
|
-
expect(result).to.deep.equal({
|
|
125
|
-
len: 4,
|
|
126
|
-
type: 6,
|
|
127
|
-
originalInvokeId: 7,
|
|
128
|
-
sequencenumber: 8,
|
|
129
|
-
actualWindowSize: 9
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
describe('error', function() {
|
|
135
|
-
it('should correctly encode and decode a package', function() {
|
|
136
|
-
var buffer = utils.getBuffer();
|
|
137
|
-
baApdu.encodeError(buffer, 5, 6, 7);
|
|
138
|
-
var result = baApdu.decodeError(buffer.buffer, 0);
|
|
139
|
-
expect(result).to.deep.equal({
|
|
140
|
-
len: 3,
|
|
141
|
-
type: 5,
|
|
142
|
-
service: 6,
|
|
143
|
-
invokeId: 7
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
describe('abort', function() {
|
|
149
|
-
it('should correctly encode and decode a package', function() {
|
|
150
|
-
var buffer = utils.getBuffer();
|
|
151
|
-
baApdu.encodeAbort(buffer, 4, 5, 6);
|
|
152
|
-
var result = baApdu.decodeAbort(buffer.buffer, 0);
|
|
153
|
-
expect(result).to.deep.equal({
|
|
154
|
-
len: 3,
|
|
155
|
-
type: 4,
|
|
156
|
-
invokeId: 5,
|
|
157
|
-
reason: 6
|
|
158
|
-
});
|
|
159
|
-
});
|
|
160
|
-
});
|
|
161
|
-
});
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
var expect = require('chai').expect;
|
|
2
|
-
var utils = require('./utils');
|
|
3
|
-
var baAsn1 = require('../../lib/asn1');
|
|
4
|
-
|
|
5
|
-
describe('bacstack - ASN1 layer', function() {
|
|
6
|
-
describe('decodeUnsigned', function() {
|
|
7
|
-
it('should fail if unsuport length', function() {
|
|
8
|
-
var result = baAsn1.decodeUnsigned(Buffer.from([0xFF, 0xFF]), 0, 5);
|
|
9
|
-
expect(result).to.deep.equal({len: 5, value: NaN});
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
it('should successfully decode 8-bit unsigned integer', function() {
|
|
13
|
-
var result = baAsn1.decodeUnsigned(Buffer.from([0x00, 0xFF, 0xFF, 0xFF, 0xFF]), 1, 1);
|
|
14
|
-
expect(result).to.deep.equal({len: 1, value: 255});
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('should successfully decode 16-bit unsigned integer', function() {
|
|
18
|
-
var result = baAsn1.decodeUnsigned(Buffer.from([0x00, 0xFF, 0xFF, 0xFF, 0xFF]), 1, 2);
|
|
19
|
-
expect(result).to.deep.equal({len: 2, value: 65535});
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
it('should successfully decode 24-bit unsigned integer', function() {
|
|
23
|
-
var result = baAsn1.decodeUnsigned(Buffer.from([0x00, 0xFF, 0xFF, 0xFF, 0xFF]), 1, 3);
|
|
24
|
-
expect(result).to.deep.equal({len: 3, value: 16777215});
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
it('should successfully decode 32-bit unsigned integer', function() {
|
|
28
|
-
var result = baAsn1.decodeUnsigned(Buffer.from([0x00, 0xFF, 0xFF, 0xFF, 0xFF]), 1, 4);
|
|
29
|
-
expect(result).to.deep.equal({len: 4, value: 4294967295});
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
});
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
var expect = require('chai').expect;
|
|
2
|
-
var utils = require('./utils');
|
|
3
|
-
var baBvlc = require('../../lib/bvlc');
|
|
4
|
-
|
|
5
|
-
describe('bacstack - BVLC layer', function() {
|
|
6
|
-
it('should successfuly encode and decode a package', function() {
|
|
7
|
-
var buffer = utils.getBuffer();
|
|
8
|
-
baBvlc.encode(buffer.buffer, 10, 1482);
|
|
9
|
-
var result = baBvlc.decode(buffer.buffer, 0);
|
|
10
|
-
expect(result).to.deep.equal({
|
|
11
|
-
len: 4,
|
|
12
|
-
func: 10,
|
|
13
|
-
msgLength: 1482
|
|
14
|
-
});
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('should successfuly encode and decode a forwarded package', function() {
|
|
18
|
-
var buffer = utils.getBuffer();
|
|
19
|
-
baBvlc.encode(buffer.buffer, 4, 1482);
|
|
20
|
-
var result = baBvlc.decode(buffer.buffer, 0);
|
|
21
|
-
expect(result).to.deep.equal({
|
|
22
|
-
len: 10,
|
|
23
|
-
func: 4,
|
|
24
|
-
msgLength: 1482
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
it('should fail if invalid BVLC type', function() {
|
|
29
|
-
var buffer = utils.getBuffer();
|
|
30
|
-
baBvlc.encode(buffer.buffer, 10, 1482);
|
|
31
|
-
buffer.buffer[0] = 8;
|
|
32
|
-
var result = baBvlc.decode(buffer.buffer, 0);
|
|
33
|
-
expect(result).to.equal(undefined);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it('should fail if invalid length', function() {
|
|
37
|
-
var buffer = utils.getBuffer();
|
|
38
|
-
baBvlc.encode(buffer.buffer, 10, 1481);
|
|
39
|
-
buffer.buffer[0] = 8;
|
|
40
|
-
var result = baBvlc.decode(buffer.buffer, 0);
|
|
41
|
-
expect(result).to.equal(undefined);
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
it('should fail if invalid function', function() {
|
|
45
|
-
var buffer = utils.getBuffer();
|
|
46
|
-
baBvlc.encode(buffer.buffer, 100, 1482);
|
|
47
|
-
var result = baBvlc.decode(buffer.buffer, 0);
|
|
48
|
-
expect(result).to.equal(undefined);
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
it('should fail if unsuported function', function() {
|
|
52
|
-
var buffer = utils.getBuffer();
|
|
53
|
-
baBvlc.encode(buffer.buffer, 5, 1482);
|
|
54
|
-
var result = baBvlc.decode(buffer.buffer, 0);
|
|
55
|
-
expect(result).to.equal(undefined);
|
|
56
|
-
});
|
|
57
|
-
});
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
var expect = require('chai').expect;
|
|
2
|
-
var utils = require('./utils');
|
|
3
|
-
var baNpdu = require('../../lib/npdu');
|
|
4
|
-
|
|
5
|
-
describe('bacstack - NPDU layer', function() {
|
|
6
|
-
it('should successfully decode the NPDU function', function() {
|
|
7
|
-
var result = baNpdu.decodeFunction([0, 1, 12], 1);
|
|
8
|
-
expect(result).to.equal(12);
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
it('should fail decoding the NPDU function if invalid version', function() {
|
|
12
|
-
var result = baNpdu.decodeFunction([0, 2, 12], 1);
|
|
13
|
-
expect(result).to.equal(undefined);
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
it('should successfully encode and decode a basic NPDU package', function() {
|
|
17
|
-
var buffer = utils.getBuffer();
|
|
18
|
-
baNpdu.encode(buffer, 1);
|
|
19
|
-
var result = baNpdu.decode(buffer.buffer, 0);
|
|
20
|
-
expect(result).to.deep.equal({
|
|
21
|
-
len: 2,
|
|
22
|
-
funct: 1,
|
|
23
|
-
destination: undefined,
|
|
24
|
-
source: undefined,
|
|
25
|
-
hopCount: 0,
|
|
26
|
-
networkMsgType: 0,
|
|
27
|
-
vendorId: 0
|
|
28
|
-
});
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it('should successfully encode and decode a NPDU package with destination', function() {
|
|
32
|
-
var buffer = utils.getBuffer();
|
|
33
|
-
var destination = {net: 1000, adr: [1, 2, 3]};
|
|
34
|
-
baNpdu.encode(buffer, 1, destination, undefined, 11, 5, 7);
|
|
35
|
-
var result = baNpdu.decode(buffer.buffer, 0);
|
|
36
|
-
expect(result).to.deep.equal({
|
|
37
|
-
len: 9,
|
|
38
|
-
funct: 33,
|
|
39
|
-
destination: {type: 0, net: 1000, adr: [1, 2, 3]},
|
|
40
|
-
source: undefined,
|
|
41
|
-
hopCount: 11,
|
|
42
|
-
networkMsgType: 0,
|
|
43
|
-
vendorId: 0
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
it('should successfully encode and decode a NPDU package with destination and source', function() {
|
|
48
|
-
var buffer = utils.getBuffer();
|
|
49
|
-
var destination = {net: 1000, adr: [1, 2, 3]};
|
|
50
|
-
var source = {net: 1000, adr: [1, 2, 3]};
|
|
51
|
-
baNpdu.encode(buffer, 1, destination, source, 13, 10, 11);
|
|
52
|
-
var result = baNpdu.decode(buffer.buffer, 0);
|
|
53
|
-
expect(result).to.deep.equal({
|
|
54
|
-
len: 15,
|
|
55
|
-
funct: 41,
|
|
56
|
-
destination: {type: 0, net: 1000, adr: [1, 2, 3]},
|
|
57
|
-
source: {type: 0, net: 1000, adr: [1, 2, 3]},
|
|
58
|
-
hopCount: 13,
|
|
59
|
-
networkMsgType: 0,
|
|
60
|
-
vendorId: 0
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
it('should successfully encode and decode a NPDU package with broadcast destination and source', function() {
|
|
65
|
-
var buffer = utils.getBuffer();
|
|
66
|
-
var destination = {net: 65535};
|
|
67
|
-
var source = {net: 1000};
|
|
68
|
-
baNpdu.encode(buffer, 1, destination, source, 12, 8, 9);
|
|
69
|
-
var result = baNpdu.decode(buffer.buffer, 0);
|
|
70
|
-
expect(result).to.deep.equal({
|
|
71
|
-
len: 9,
|
|
72
|
-
funct: 41,
|
|
73
|
-
destination: {type: 0, net: 65535},
|
|
74
|
-
source: {type: 0, net: 1000},
|
|
75
|
-
hopCount: 12,
|
|
76
|
-
networkMsgType: 0,
|
|
77
|
-
vendorId: 0
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
it('should successfully encode and decode a network layer NPDU package', function() {
|
|
82
|
-
var buffer = utils.getBuffer();
|
|
83
|
-
baNpdu.encode(buffer, 128, undefined, undefined, 1, 128, 7777);
|
|
84
|
-
var result = baNpdu.decode(buffer.buffer, 0);
|
|
85
|
-
expect(result).to.deep.equal({
|
|
86
|
-
len: 5,
|
|
87
|
-
funct: 128,
|
|
88
|
-
destination: undefined,
|
|
89
|
-
source: undefined,
|
|
90
|
-
hopCount: 0,
|
|
91
|
-
networkMsgType: 128,
|
|
92
|
-
vendorId: 7777
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
it('should successfully encode and decode a who is router to network layer NPDU package', function() {
|
|
97
|
-
var buffer = utils.getBuffer();
|
|
98
|
-
baNpdu.encode(buffer, 128, undefined, undefined, 1, 0, 7777);
|
|
99
|
-
var result = baNpdu.decode(buffer.buffer, 0);
|
|
100
|
-
expect(result).to.deep.equal({
|
|
101
|
-
len: 5,
|
|
102
|
-
funct: 128,
|
|
103
|
-
destination: undefined,
|
|
104
|
-
source: undefined,
|
|
105
|
-
hopCount: 0,
|
|
106
|
-
networkMsgType: 0,
|
|
107
|
-
vendorId: 0
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
it('should fail if invalid BACNET version', function() {
|
|
112
|
-
var buffer = utils.getBuffer();
|
|
113
|
-
baNpdu.encode(buffer, 12, undefined, undefined, 1, 2, 3);
|
|
114
|
-
buffer.buffer[0] = 2;
|
|
115
|
-
var result = baNpdu.decode(buffer.buffer, 0);
|
|
116
|
-
expect(result).to.equal(undefined);
|
|
117
|
-
});
|
|
118
|
-
});
|