node-opcua-transport 2.97.0 → 2.98.1

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.
Files changed (50) hide show
  1. package/dist/source/AcknowledgeMessage.d.ts +27 -27
  2. package/dist/source/AcknowledgeMessage.js +78 -78
  3. package/dist/source/AcknowledgeMessage.js.map +1 -1
  4. package/dist/source/HelloMessage.d.ts +27 -27
  5. package/dist/source/HelloMessage.js +94 -94
  6. package/dist/source/HelloMessage.js.map +1 -1
  7. package/dist/source/TCPErrorMessage.d.ts +18 -18
  8. package/dist/source/TCPErrorMessage.js +46 -46
  9. package/dist/source/TCPErrorMessage.js.map +1 -1
  10. package/dist/source/client_tcp_transport.d.ts +87 -87
  11. package/dist/source/client_tcp_transport.js +334 -334
  12. package/dist/source/client_tcp_transport.js.map +1 -1
  13. package/dist/source/index.d.ts +13 -13
  14. package/dist/source/index.js +29 -29
  15. package/dist/source/message_builder_base.d.ts +112 -112
  16. package/dist/source/message_builder_base.js +244 -244
  17. package/dist/source/message_builder_base.js.map +1 -1
  18. package/dist/source/server_tcp_transport.d.ts +44 -44
  19. package/dist/source/server_tcp_transport.js +232 -232
  20. package/dist/source/server_tcp_transport.js.map +1 -1
  21. package/dist/source/status_codes.d.ts +100 -100
  22. package/dist/source/status_codes.js +110 -110
  23. package/dist/source/tcp_transport.d.ts +136 -136
  24. package/dist/source/tcp_transport.js +378 -378
  25. package/dist/source/tcp_transport.js.map +1 -1
  26. package/dist/source/tools.d.ts +14 -14
  27. package/dist/source/tools.js +103 -103
  28. package/dist/source/utils.d.ts +3 -3
  29. package/dist/source/utils.js +9 -9
  30. package/dist/test-fixtures/fixture_full_tcp_packets.d.ts +21 -21
  31. package/dist/test-fixtures/fixture_full_tcp_packets.js +41 -41
  32. package/dist/test-fixtures/index.d.ts +1 -1
  33. package/dist/test-fixtures/index.js +17 -17
  34. package/dist/test_helpers/direct_transport.d.ts +18 -18
  35. package/dist/test_helpers/direct_transport.js +62 -62
  36. package/dist/test_helpers/fake_server.d.ts +19 -19
  37. package/dist/test_helpers/fake_server.js +54 -54
  38. package/dist/test_helpers/half_com_channel.d.ts +17 -17
  39. package/dist/test_helpers/half_com_channel.js +31 -31
  40. package/dist/test_helpers/index.d.ts +4 -4
  41. package/dist/test_helpers/index.js +20 -20
  42. package/dist/test_helpers/socket_transport.d.ts +10 -10
  43. package/dist/test_helpers/socket_transport.js +30 -30
  44. package/dist/tsconfig.tsbuildinfo +1 -0
  45. package/package.json +19 -15
  46. package/test_helpers/direct_transport.ts +0 -76
  47. package/test_helpers/fake_server.ts +0 -67
  48. package/test_helpers/half_com_channel.ts +0 -41
  49. package/test_helpers/index.ts +0 -4
  50. package/test_helpers/socket_transport.ts +0 -33
@@ -1,233 +1,233 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ServerTCP_transport = void 0;
4
- const chalk = require("chalk");
5
- const node_opcua_assert_1 = require("node-opcua-assert");
6
- // opcua requires
7
- const debug = require("node-opcua-debug");
8
- const node_opcua_binary_stream_1 = require("node-opcua-binary-stream");
9
- const node_opcua_chunkmanager_1 = require("node-opcua-chunkmanager");
10
- const node_opcua_status_code_1 = require("node-opcua-status-code");
11
- // this package requires
12
- const AcknowledgeMessage_1 = require("./AcknowledgeMessage");
13
- const HelloMessage_1 = require("./HelloMessage");
14
- const tcp_transport_1 = require("./tcp_transport");
15
- const tools_1 = require("./tools");
16
- const utils_1 = require("./utils");
17
- const hexDump = debug.hexDump;
18
- const debugLog = debug.make_debugLog(__filename);
19
- const errorLog = debug.make_errorLog(__filename);
20
- const doDebug = debug.checkDebugFlag(__filename);
21
- function clamp_value(value, minVal, maxVal) {
22
- (0, node_opcua_assert_1.assert)(minVal < maxVal);
23
- if (value === 0) {
24
- return maxVal;
25
- }
26
- if (value < minVal) {
27
- return minVal;
28
- }
29
- /* istanbul ignore next*/
30
- if (value >= maxVal) {
31
- return maxVal;
32
- }
33
- return value;
34
- }
35
- const minimumBufferSize = 8192;
36
- /**
37
- * @class ServerTCP_transport
38
- * @extends TCP_transport
39
- * @constructor
40
- *
41
- */
42
- class ServerTCP_transport extends tcp_transport_1.TCP_transport {
43
- constructor() {
44
- super();
45
- this._aborted = 0;
46
- this._helloReceived = false;
47
- // before HEL/ACK
48
- this.maxChunkCount = 1;
49
- this.maxMessageSize = 4 * 1024;
50
- this.receiveBufferSize = 4 * 1024;
51
- }
52
- _write_chunk(messageChunk) {
53
- // istanbul ignore next
54
- if (this.sendBufferSize > 0 && messageChunk.length > this.sendBufferSize) {
55
- errorLog("write chunk exceed sendBufferSize messageChunk length = ", messageChunk.length, "sendBufferSize = ", this.sendBufferSize);
56
- }
57
- super._write_chunk(messageChunk);
58
- }
59
- /**
60
- * Initialize the server transport.
61
- *
62
- *
63
- * The ServerTCP_transport initialization process starts by waiting for the client to send a "HEL" message.
64
- *
65
- * The ServerTCP_transport replies with a "ACK" message and then start waiting for further messages of any size.
66
- *
67
- * The callback function received an error:
68
- * - if no message from the client is received within the ```self.timeout``` period,
69
- * - or, if the connection has dropped within the same interval.
70
- * - if the protocol version specified within the HEL message is invalid or is greater
71
- * than ```self.protocolVersion```
72
- *
73
- *
74
- */
75
- init(socket, callback) {
76
- if (debugLog) {
77
- debugLog(chalk.cyan("init socket"));
78
- }
79
- (0, node_opcua_assert_1.assert)(!this._socket, "init already called!");
80
- (0, node_opcua_assert_1.assert)(typeof callback === "function", "expecting a valid callback ");
81
- this._install_socket(socket);
82
- this._install_HEL_message_receiver(callback);
83
- }
84
- abortWithError(statusCode, extraErrorDescription, callback) {
85
- return this._abortWithError(statusCode, extraErrorDescription, callback);
86
- }
87
- _abortWithError(statusCode, extraErrorDescription, callback) {
88
- // When a fatal error occurs, the Server shall send an Error Message to the Client and
89
- // closes the TransportConnection gracefully.
90
- doDebug && debugLog(chalk.cyan("_abortWithError"));
91
- /* istanbul ignore next */
92
- if (this._aborted) {
93
- // already called
94
- return callback(new Error(statusCode.name));
95
- }
96
- this._aborted = 1;
97
- setTimeout(() => {
98
- // send the error message and close the connection
99
- this.sendErrorMessage(statusCode, statusCode.description);
100
- this.disconnect(() => {
101
- this._aborted = 2;
102
- callback(new Error(extraErrorDescription + " StatusCode = " + statusCode.name));
103
- });
104
- }, ServerTCP_transport.throttleTime);
105
- }
106
- _send_ACK_response(helloMessage) {
107
- (0, node_opcua_assert_1.assert)(helloMessage.receiveBufferSize >= minimumBufferSize);
108
- (0, node_opcua_assert_1.assert)(helloMessage.sendBufferSize >= minimumBufferSize);
109
- const minBufferSize = 8192;
110
- const maxBufferSize = 8 * 64 * 1024;
111
- const minMaxMessageSize = 128 * 1024;
112
- const defaultMaxMessageSize = 16 * 1024 * 1024;
113
- const maxMaxMessageSize = 128 * 1024 * 1024;
114
- const minMaxChunkCount = 1;
115
- const defaultMaxChunkCount = defaultMaxMessageSize / maxBufferSize;
116
- const maxMaxChunkCount = 9000;
117
- const defaultReceiveBufferSize = 64 * 1024;
118
- const defaultSendBufferSize = 64 * 1024;
119
- const receiveBufferSize = clamp_value(helloMessage.receiveBufferSize || defaultReceiveBufferSize, minBufferSize, maxBufferSize);
120
- const sendBufferSize = clamp_value(helloMessage.sendBufferSize || defaultSendBufferSize, minBufferSize, maxBufferSize);
121
- const maxMessageSize = clamp_value(helloMessage.maxMessageSize || defaultMaxMessageSize, minMaxMessageSize, maxMaxMessageSize);
122
- if (!helloMessage.maxChunkCount && sendBufferSize) {
123
- helloMessage.maxChunkCount = Math.ceil(helloMessage.maxMessageSize / Math.min(sendBufferSize, receiveBufferSize));
124
- }
125
- const maxChunkCount = clamp_value(helloMessage.maxChunkCount || defaultMaxChunkCount, minMaxChunkCount, maxMaxChunkCount);
126
- this.setLimits({
127
- receiveBufferSize,
128
- sendBufferSize,
129
- maxMessageSize,
130
- maxChunkCount
131
- });
132
- // istanbul ignore next
133
- if (utils_1.doTraceHelloAck) {
134
- console.log(`received Hello \n${helloMessage.toString()}`);
135
- console.log("Client accepts only message of size => ", this.maxMessageSize);
136
- }
137
- debugLog("Client accepts only message of size => ", this.maxMessageSize);
138
- const acknowledgeMessage = new AcknowledgeMessage_1.AcknowledgeMessage({
139
- maxChunkCount: this.maxChunkCount,
140
- maxMessageSize: this.maxMessageSize,
141
- protocolVersion: this.protocolVersion,
142
- receiveBufferSize: this.receiveBufferSize,
143
- sendBufferSize: this.sendBufferSize
144
- });
145
- // istanbul ignore next
146
- if (utils_1.doTraceHelloAck) {
147
- console.log(`sending Ack \n${acknowledgeMessage.toString()}`);
148
- }
149
- const messageChunk = (0, tools_1.packTcpMessage)("ACK", acknowledgeMessage);
150
- /* istanbul ignore next*/
151
- if (doDebug) {
152
- (0, node_opcua_chunkmanager_1.verify_message_chunk)(messageChunk);
153
- debugLog("server send: " + chalk.yellow("ACK"));
154
- debugLog("server send: " + hexDump(messageChunk));
155
- debugLog("acknowledgeMessage=", acknowledgeMessage);
156
- }
157
- // send the ACK reply
158
- this.write(messageChunk);
159
- }
160
- _install_HEL_message_receiver(callback) {
161
- if (debugLog) {
162
- debugLog(chalk.cyan("_install_HEL_message_receiver "));
163
- }
164
- this._install_one_time_message_receiver((err, data) => {
165
- if (err) {
166
- this._abortWithError(node_opcua_status_code_1.StatusCodes.BadConnectionRejected, err.message, callback);
167
- }
168
- else {
169
- // handle the HEL message
170
- this._on_HEL_message(data, callback);
171
- }
172
- });
173
- }
174
- _on_HEL_message(data, callback) {
175
- if (debugLog) {
176
- debugLog(chalk.cyan("_on_HEL_message"));
177
- }
178
- (0, node_opcua_assert_1.assert)(!this._helloReceived);
179
- const stream = new node_opcua_binary_stream_1.BinaryStream(data);
180
- const msgType = data.subarray(0, 3).toString("utf-8");
181
- /* istanbul ignore next*/
182
- if (doDebug) {
183
- debugLog("SERVER received " + chalk.yellow(msgType));
184
- debugLog("SERVER received " + hexDump(data));
185
- }
186
- if (msgType === "HEL") {
187
- try {
188
- (0, node_opcua_assert_1.assert)(data.length >= 24);
189
- const helloMessage = (0, tools_1.decodeMessage)(stream, HelloMessage_1.HelloMessage);
190
- (0, node_opcua_assert_1.assert)(isFinite(this.protocolVersion));
191
- // OPCUA Spec 1.03 part 6 - page 41
192
- // The Server shall always accept versions greater than what it supports.
193
- if (helloMessage.protocolVersion !== this.protocolVersion) {
194
- debugLog(`warning ! client sent helloMessage.protocolVersion = ` +
195
- ` 0x${helloMessage.protocolVersion.toString(16)} ` +
196
- `whereas server protocolVersion is 0x${this.protocolVersion.toString(16)}`);
197
- }
198
- if (helloMessage.protocolVersion === 0xdeadbeef || helloMessage.protocolVersion < this.protocolVersion) {
199
- // Note: 0xDEADBEEF is our special version number to simulate BadProtocolVersionUnsupported in tests
200
- // invalid protocol version requested by client
201
- return this._abortWithError(node_opcua_status_code_1.StatusCodes.BadProtocolVersionUnsupported, "Protocol Version Error" + this.protocolVersion, callback);
202
- }
203
- // OPCUA Spec 1.04 part 6 - page 45
204
- // UASC is designed to operate with different TransportProtocols that may have limited buffer
205
- // sizes. For this reason, OPC UA Secure Conversation will break OPC UA Messages into several
206
- // pieces (called ‘MessageChunks’) that are smaller than the buffer size allowed by the
207
- // TransportProtocol. UASC requires a TransportProtocol buffer size that is at least 8 192 bytes
208
- if (helloMessage.receiveBufferSize < minimumBufferSize || helloMessage.sendBufferSize < minimumBufferSize) {
209
- return this._abortWithError(node_opcua_status_code_1.StatusCodes.BadConnectionRejected, "Buffer size too small (should be at least " + minimumBufferSize, callback);
210
- }
211
- // the helloMessage shall only be received once.
212
- this._helloReceived = true;
213
- this._send_ACK_response(helloMessage);
214
- }
215
- catch (err) {
216
- // connection rejected because of malformed message
217
- return this._abortWithError(node_opcua_status_code_1.StatusCodes.BadConnectionRejected, err instanceof Error ? err.message : "", callback);
218
- }
219
- callback(); // no Error
220
- }
221
- else {
222
- // invalid packet , expecting HEL
223
- /* istanbul ignore next*/
224
- if (doDebug) {
225
- debugLog(chalk.red("BadCommunicationError ") + "Expecting 'HEL' message to initiate communication");
226
- }
227
- this._abortWithError(node_opcua_status_code_1.StatusCodes.BadCommunicationError, "Expecting 'HEL' message to initiate communication", callback);
228
- }
229
- }
230
- }
231
- exports.ServerTCP_transport = ServerTCP_transport;
232
- ServerTCP_transport.throttleTime = 1000;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ServerTCP_transport = void 0;
4
+ const chalk = require("chalk");
5
+ const node_opcua_assert_1 = require("node-opcua-assert");
6
+ // opcua requires
7
+ const debug = require("node-opcua-debug");
8
+ const node_opcua_binary_stream_1 = require("node-opcua-binary-stream");
9
+ const node_opcua_chunkmanager_1 = require("node-opcua-chunkmanager");
10
+ const node_opcua_status_code_1 = require("node-opcua-status-code");
11
+ // this package requires
12
+ const AcknowledgeMessage_1 = require("./AcknowledgeMessage");
13
+ const HelloMessage_1 = require("./HelloMessage");
14
+ const tcp_transport_1 = require("./tcp_transport");
15
+ const tools_1 = require("./tools");
16
+ const utils_1 = require("./utils");
17
+ const hexDump = debug.hexDump;
18
+ const debugLog = debug.make_debugLog(__filename);
19
+ const errorLog = debug.make_errorLog(__filename);
20
+ const doDebug = debug.checkDebugFlag(__filename);
21
+ function clamp_value(value, minVal, maxVal) {
22
+ (0, node_opcua_assert_1.assert)(minVal < maxVal);
23
+ if (value === 0) {
24
+ return maxVal;
25
+ }
26
+ if (value < minVal) {
27
+ return minVal;
28
+ }
29
+ /* istanbul ignore next*/
30
+ if (value >= maxVal) {
31
+ return maxVal;
32
+ }
33
+ return value;
34
+ }
35
+ const minimumBufferSize = 8192;
36
+ /**
37
+ * @class ServerTCP_transport
38
+ * @extends TCP_transport
39
+ * @constructor
40
+ *
41
+ */
42
+ class ServerTCP_transport extends tcp_transport_1.TCP_transport {
43
+ constructor() {
44
+ super();
45
+ this._aborted = 0;
46
+ this._helloReceived = false;
47
+ // before HEL/ACK
48
+ this.maxChunkCount = 1;
49
+ this.maxMessageSize = 4 * 1024;
50
+ this.receiveBufferSize = 4 * 1024;
51
+ }
52
+ _write_chunk(messageChunk) {
53
+ // istanbul ignore next
54
+ if (this.sendBufferSize > 0 && messageChunk.length > this.sendBufferSize) {
55
+ errorLog("write chunk exceed sendBufferSize messageChunk length = ", messageChunk.length, "sendBufferSize = ", this.sendBufferSize);
56
+ }
57
+ super._write_chunk(messageChunk);
58
+ }
59
+ /**
60
+ * Initialize the server transport.
61
+ *
62
+ *
63
+ * The ServerTCP_transport initialization process starts by waiting for the client to send a "HEL" message.
64
+ *
65
+ * The ServerTCP_transport replies with a "ACK" message and then start waiting for further messages of any size.
66
+ *
67
+ * The callback function received an error:
68
+ * - if no message from the client is received within the ```self.timeout``` period,
69
+ * - or, if the connection has dropped within the same interval.
70
+ * - if the protocol version specified within the HEL message is invalid or is greater
71
+ * than ```self.protocolVersion```
72
+ *
73
+ *
74
+ */
75
+ init(socket, callback) {
76
+ if (debugLog) {
77
+ debugLog(chalk.cyan("init socket"));
78
+ }
79
+ (0, node_opcua_assert_1.assert)(!this._socket, "init already called!");
80
+ (0, node_opcua_assert_1.assert)(typeof callback === "function", "expecting a valid callback ");
81
+ this._install_socket(socket);
82
+ this._install_HEL_message_receiver(callback);
83
+ }
84
+ abortWithError(statusCode, extraErrorDescription, callback) {
85
+ return this._abortWithError(statusCode, extraErrorDescription, callback);
86
+ }
87
+ _abortWithError(statusCode, extraErrorDescription, callback) {
88
+ // When a fatal error occurs, the Server shall send an Error Message to the Client and
89
+ // closes the TransportConnection gracefully.
90
+ doDebug && debugLog(chalk.cyan("_abortWithError"));
91
+ /* istanbul ignore next */
92
+ if (this._aborted) {
93
+ // already called
94
+ return callback(new Error(statusCode.name));
95
+ }
96
+ this._aborted = 1;
97
+ setTimeout(() => {
98
+ // send the error message and close the connection
99
+ this.sendErrorMessage(statusCode, statusCode.description);
100
+ this.disconnect(() => {
101
+ this._aborted = 2;
102
+ callback(new Error(extraErrorDescription + " StatusCode = " + statusCode.name));
103
+ });
104
+ }, ServerTCP_transport.throttleTime);
105
+ }
106
+ _send_ACK_response(helloMessage) {
107
+ (0, node_opcua_assert_1.assert)(helloMessage.receiveBufferSize >= minimumBufferSize);
108
+ (0, node_opcua_assert_1.assert)(helloMessage.sendBufferSize >= minimumBufferSize);
109
+ const minBufferSize = 8192;
110
+ const maxBufferSize = 8 * 64 * 1024;
111
+ const minMaxMessageSize = 128 * 1024;
112
+ const defaultMaxMessageSize = 16 * 1024 * 1024;
113
+ const maxMaxMessageSize = 128 * 1024 * 1024;
114
+ const minMaxChunkCount = 1;
115
+ const defaultMaxChunkCount = defaultMaxMessageSize / maxBufferSize;
116
+ const maxMaxChunkCount = 9000;
117
+ const defaultReceiveBufferSize = 64 * 1024;
118
+ const defaultSendBufferSize = 64 * 1024;
119
+ const receiveBufferSize = clamp_value(helloMessage.receiveBufferSize || defaultReceiveBufferSize, minBufferSize, maxBufferSize);
120
+ const sendBufferSize = clamp_value(helloMessage.sendBufferSize || defaultSendBufferSize, minBufferSize, maxBufferSize);
121
+ const maxMessageSize = clamp_value(helloMessage.maxMessageSize || defaultMaxMessageSize, minMaxMessageSize, maxMaxMessageSize);
122
+ if (!helloMessage.maxChunkCount && sendBufferSize) {
123
+ helloMessage.maxChunkCount = Math.ceil(helloMessage.maxMessageSize / Math.min(sendBufferSize, receiveBufferSize));
124
+ }
125
+ const maxChunkCount = clamp_value(helloMessage.maxChunkCount || defaultMaxChunkCount, minMaxChunkCount, maxMaxChunkCount);
126
+ this.setLimits({
127
+ receiveBufferSize,
128
+ sendBufferSize,
129
+ maxMessageSize,
130
+ maxChunkCount
131
+ });
132
+ // istanbul ignore next
133
+ if (utils_1.doTraceHelloAck) {
134
+ console.log(`received Hello \n${helloMessage.toString()}`);
135
+ console.log("Client accepts only message of size => ", this.maxMessageSize);
136
+ }
137
+ debugLog("Client accepts only message of size => ", this.maxMessageSize);
138
+ const acknowledgeMessage = new AcknowledgeMessage_1.AcknowledgeMessage({
139
+ maxChunkCount: this.maxChunkCount,
140
+ maxMessageSize: this.maxMessageSize,
141
+ protocolVersion: this.protocolVersion,
142
+ receiveBufferSize: this.receiveBufferSize,
143
+ sendBufferSize: this.sendBufferSize
144
+ });
145
+ // istanbul ignore next
146
+ if (utils_1.doTraceHelloAck) {
147
+ console.log(`sending Ack \n${acknowledgeMessage.toString()}`);
148
+ }
149
+ const messageChunk = (0, tools_1.packTcpMessage)("ACK", acknowledgeMessage);
150
+ /* istanbul ignore next*/
151
+ if (doDebug) {
152
+ (0, node_opcua_chunkmanager_1.verify_message_chunk)(messageChunk);
153
+ debugLog("server send: " + chalk.yellow("ACK"));
154
+ debugLog("server send: " + hexDump(messageChunk));
155
+ debugLog("acknowledgeMessage=", acknowledgeMessage);
156
+ }
157
+ // send the ACK reply
158
+ this.write(messageChunk);
159
+ }
160
+ _install_HEL_message_receiver(callback) {
161
+ if (debugLog) {
162
+ debugLog(chalk.cyan("_install_HEL_message_receiver "));
163
+ }
164
+ this._install_one_time_message_receiver((err, data) => {
165
+ if (err) {
166
+ this._abortWithError(node_opcua_status_code_1.StatusCodes.BadConnectionRejected, err.message, callback);
167
+ }
168
+ else {
169
+ // handle the HEL message
170
+ this._on_HEL_message(data, callback);
171
+ }
172
+ });
173
+ }
174
+ _on_HEL_message(data, callback) {
175
+ if (debugLog) {
176
+ debugLog(chalk.cyan("_on_HEL_message"));
177
+ }
178
+ (0, node_opcua_assert_1.assert)(!this._helloReceived);
179
+ const stream = new node_opcua_binary_stream_1.BinaryStream(data);
180
+ const msgType = data.subarray(0, 3).toString("utf-8");
181
+ /* istanbul ignore next*/
182
+ if (doDebug) {
183
+ debugLog("SERVER received " + chalk.yellow(msgType));
184
+ debugLog("SERVER received " + hexDump(data));
185
+ }
186
+ if (msgType === "HEL") {
187
+ try {
188
+ (0, node_opcua_assert_1.assert)(data.length >= 24);
189
+ const helloMessage = (0, tools_1.decodeMessage)(stream, HelloMessage_1.HelloMessage);
190
+ (0, node_opcua_assert_1.assert)(isFinite(this.protocolVersion));
191
+ // OPCUA Spec 1.03 part 6 - page 41
192
+ // The Server shall always accept versions greater than what it supports.
193
+ if (helloMessage.protocolVersion !== this.protocolVersion) {
194
+ debugLog(`warning ! client sent helloMessage.protocolVersion = ` +
195
+ ` 0x${helloMessage.protocolVersion.toString(16)} ` +
196
+ `whereas server protocolVersion is 0x${this.protocolVersion.toString(16)}`);
197
+ }
198
+ if (helloMessage.protocolVersion === 0xdeadbeef || helloMessage.protocolVersion < this.protocolVersion) {
199
+ // Note: 0xDEADBEEF is our special version number to simulate BadProtocolVersionUnsupported in tests
200
+ // invalid protocol version requested by client
201
+ return this._abortWithError(node_opcua_status_code_1.StatusCodes.BadProtocolVersionUnsupported, "Protocol Version Error" + this.protocolVersion, callback);
202
+ }
203
+ // OPCUA Spec 1.04 part 6 - page 45
204
+ // UASC is designed to operate with different TransportProtocols that may have limited buffer
205
+ // sizes. For this reason, OPC UA Secure Conversation will break OPC UA Messages into several
206
+ // pieces (called ‘MessageChunks’) that are smaller than the buffer size allowed by the
207
+ // TransportProtocol. UASC requires a TransportProtocol buffer size that is at least 8 192 bytes
208
+ if (helloMessage.receiveBufferSize < minimumBufferSize || helloMessage.sendBufferSize < minimumBufferSize) {
209
+ return this._abortWithError(node_opcua_status_code_1.StatusCodes.BadConnectionRejected, "Buffer size too small (should be at least " + minimumBufferSize, callback);
210
+ }
211
+ // the helloMessage shall only be received once.
212
+ this._helloReceived = true;
213
+ this._send_ACK_response(helloMessage);
214
+ }
215
+ catch (err) {
216
+ // connection rejected because of malformed message
217
+ return this._abortWithError(node_opcua_status_code_1.StatusCodes.BadConnectionRejected, err instanceof Error ? err.message : "", callback);
218
+ }
219
+ callback(); // no Error
220
+ }
221
+ else {
222
+ // invalid packet , expecting HEL
223
+ /* istanbul ignore next*/
224
+ if (doDebug) {
225
+ debugLog(chalk.red("BadCommunicationError ") + "Expecting 'HEL' message to initiate communication");
226
+ }
227
+ this._abortWithError(node_opcua_status_code_1.StatusCodes.BadCommunicationError, "Expecting 'HEL' message to initiate communication", callback);
228
+ }
229
+ }
230
+ }
231
+ ServerTCP_transport.throttleTime = 1000;
232
+ exports.ServerTCP_transport = ServerTCP_transport;
233
233
  //# sourceMappingURL=server_tcp_transport.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server_tcp_transport.js","sourceRoot":"","sources":["../../source/server_tcp_transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server_tcp_transport.js","sourceRoot":"","sources":["../../source/server_tcp_transport.ts"],"names":[],"mappings":"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"}