node-opcua-transport 2.67.1 → 2.69.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/dist/source/client_tcp_transport.d.ts +8 -4
- package/dist/source/client_tcp_transport.js +15 -6
- package/dist/source/client_tcp_transport.js.map +1 -1
- package/dist/source/index.d.ts +5 -3
- package/dist/source/index.js +10 -4
- package/dist/source/index.js.map +1 -1
- package/dist/source/message_builder_base.d.ts +27 -7
- package/dist/source/message_builder_base.js +36 -13
- package/dist/source/message_builder_base.js.map +1 -1
- package/dist/source/server_tcp_transport.d.ts +1 -5
- package/dist/source/server_tcp_transport.js +42 -40
- package/dist/source/server_tcp_transport.js.map +1 -1
- package/dist/source/status_codes.d.ts +100 -0
- package/dist/source/status_codes.js +111 -0
- package/dist/source/status_codes.js.map +1 -0
- package/dist/source/tcp_transport.d.ts +21 -28
- package/dist/source/tcp_transport.js +86 -57
- package/dist/source/tcp_transport.js.map +1 -1
- package/dist/source/tools.d.ts +1 -0
- package/dist/source/utils.d.ts +3 -2
- package/dist/source/utils.js +4 -3
- package/dist/source/utils.js.map +1 -1
- package/dist/test-fixtures/index.js +5 -1
- package/dist/test-fixtures/index.js.map +1 -1
- package/dist/test_helpers/direct_transport.d.ts +4 -0
- package/dist/test_helpers/direct_transport.js.map +1 -1
- package/dist/test_helpers/fake_server.d.ts +2 -0
- package/dist/test_helpers/half_com_channel.d.ts +7 -0
- package/dist/test_helpers/half_com_channel.js.map +1 -1
- package/dist/test_helpers/index.js +5 -1
- package/dist/test_helpers/index.js.map +1 -1
- package/package.json +16 -16
- package/source/client_tcp_transport.ts +21 -9
- package/source/index.ts +5 -3
- package/source/message_builder_base.ts +68 -16
- package/source/server_tcp_transport.ts +51 -48
- package/source/status_codes.ts +109 -0
- package/source/tcp_transport.ts +118 -73
- package/source/utils.ts +3 -2
- package/test_helpers/direct_transport.ts +4 -1
- package/test_helpers/half_com_channel.ts +7 -0
|
@@ -3,11 +3,11 @@ import { ErrorCallback } from "node-opcua-status-code";
|
|
|
3
3
|
import { TCP_transport } from "./tcp_transport";
|
|
4
4
|
import { AcknowledgeMessage } from "./AcknowledgeMessage";
|
|
5
5
|
export interface ClientTCP_transport {
|
|
6
|
-
on(eventName: "
|
|
6
|
+
on(eventName: "chunk", eventHandler: (messageChunk: Buffer) => void): this;
|
|
7
7
|
on(eventName: "socket_closed", eventHandler: (err: Error | null) => void): this;
|
|
8
8
|
on(eventName: "close", eventHandler: (err: Error | null) => void): this;
|
|
9
9
|
on(eventName: "connection_break", eventHandler: () => void): this;
|
|
10
|
-
once(eventName: "
|
|
10
|
+
once(eventName: "chunk", eventHandler: (messageChunk: Buffer) => void): this;
|
|
11
11
|
once(eventName: "socket_closed", eventHandler: (err: Error | null) => void): this;
|
|
12
12
|
once(eventName: "close", eventHandler: (err: Error | null) => void): this;
|
|
13
13
|
once(eventName: "connection_break", eventHandler: () => void): this;
|
|
@@ -41,8 +41,8 @@ export interface ClientTCP_transport {
|
|
|
41
41
|
*
|
|
42
42
|
* ....
|
|
43
43
|
*
|
|
44
|
-
* transport.on("
|
|
45
|
-
* // do something with
|
|
44
|
+
* transport.on("chunk",function(message_chunk) {
|
|
45
|
+
* // do something with chunk from server...
|
|
46
46
|
* });
|
|
47
47
|
*
|
|
48
48
|
*
|
|
@@ -51,6 +51,10 @@ export interface ClientTCP_transport {
|
|
|
51
51
|
*
|
|
52
52
|
*/
|
|
53
53
|
export declare class ClientTCP_transport extends TCP_transport {
|
|
54
|
+
static defaultMaxChunk: number;
|
|
55
|
+
static defaultMaxMessageSize: number;
|
|
56
|
+
static defaultReceiveBufferSize: number;
|
|
57
|
+
static defaultSendBufferSize: number;
|
|
54
58
|
endpointUrl: string;
|
|
55
59
|
serverUri: string;
|
|
56
60
|
numberOfRetry: number;
|
|
@@ -78,8 +78,8 @@ function createClientSocket(endpointUrl) {
|
|
|
78
78
|
*
|
|
79
79
|
* ....
|
|
80
80
|
*
|
|
81
|
-
* transport.on("
|
|
82
|
-
* // do something with
|
|
81
|
+
* transport.on("chunk",function(message_chunk) {
|
|
82
|
+
* // do something with chunk from server...
|
|
83
83
|
* });
|
|
84
84
|
*
|
|
85
85
|
*
|
|
@@ -95,6 +95,10 @@ class ClientTCP_transport extends tcp_transport_1.TCP_transport {
|
|
|
95
95
|
this.serverUri = "";
|
|
96
96
|
this._counter = 0;
|
|
97
97
|
this.numberOfRetry = 0;
|
|
98
|
+
// initially before HEL/ACK
|
|
99
|
+
this.maxChunkCount = 1;
|
|
100
|
+
this.maxMessageSize = 4 * 1024;
|
|
101
|
+
this.receiveBufferSize = 4 * 1024;
|
|
98
102
|
}
|
|
99
103
|
dispose() {
|
|
100
104
|
/* istanbul ignore next */
|
|
@@ -237,6 +241,7 @@ class ClientTCP_transport extends tcp_transport_1.TCP_transport {
|
|
|
237
241
|
_stream.rewind();
|
|
238
242
|
response = (0, tools_1.decodeMessage)(_stream, responseClass);
|
|
239
243
|
this.parameters = response;
|
|
244
|
+
this.setLimits(response);
|
|
240
245
|
// istanbul ignore next
|
|
241
246
|
if (utils_1.doTraceHelloAck) {
|
|
242
247
|
warningLog("receiving Ack\n", response.toString());
|
|
@@ -256,11 +261,11 @@ class ClientTCP_transport extends tcp_transport_1.TCP_transport {
|
|
|
256
261
|
// the server will receive it as message from the client
|
|
257
262
|
const helloMessage = new HelloMessage_1.HelloMessage({
|
|
258
263
|
endpointUrl: this.endpointUrl,
|
|
259
|
-
maxChunkCount: 0,
|
|
260
|
-
maxMessageSize: 0,
|
|
261
264
|
protocolVersion: this.protocolVersion,
|
|
262
|
-
|
|
263
|
-
|
|
265
|
+
maxChunkCount: ClientTCP_transport.defaultMaxChunk,
|
|
266
|
+
maxMessageSize: ClientTCP_transport.defaultMaxMessageSize,
|
|
267
|
+
receiveBufferSize: ClientTCP_transport.defaultReceiveBufferSize,
|
|
268
|
+
sendBufferSize: ClientTCP_transport.defaultSendBufferSize
|
|
264
269
|
});
|
|
265
270
|
// istanbul ignore next
|
|
266
271
|
if (utils_1.doTraceHelloAck) {
|
|
@@ -311,4 +316,8 @@ class ClientTCP_transport extends tcp_transport_1.TCP_transport {
|
|
|
311
316
|
}
|
|
312
317
|
}
|
|
313
318
|
exports.ClientTCP_transport = ClientTCP_transport;
|
|
319
|
+
ClientTCP_transport.defaultMaxChunk = 0; // 0 - no limits
|
|
320
|
+
ClientTCP_transport.defaultMaxMessageSize = 0; // 0 - no limits
|
|
321
|
+
ClientTCP_transport.defaultReceiveBufferSize = 1024 * 64 * 10;
|
|
322
|
+
ClientTCP_transport.defaultSendBufferSize = 1024 * 64 * 10; // 8192 min,
|
|
314
323
|
//# sourceMappingURL=client_tcp_transport.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client_tcp_transport.js","sourceRoot":"","sources":["../../source/client_tcp_transport.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,yBAAyB;AACzB,6BAA+C;AAC/C,+BAA+B;AAE/B,yDAA2C;AAC3C,uEAAwD;AACxD,qEAA4D;AAG5D,0CAA0C;AAC1C,mDAAkE;AAClE,mCAA0E;AAE1E,6DAA0D;AAC1D,iDAA8C;AAC9C,uDAAoD;AACpD,mCAA0C;AAE1C,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;AACjD,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;AACjD,MAAM,UAAU,GAAG,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;AACjD,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;AAEhC,SAAS,kBAAkB,CAAC,WAAmB;IAC3C,+BAA+B;IAC/B,MAAM,EAAE,GAAG,IAAA,wBAAgB,EAAC,WAAW,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAK,EAAE,EAAE,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAS,CAAC;IAC9B,IAAI,MAAc,CAAC;IACnB,QAAQ,EAAE,CAAC,QAAQ,EAAE;QACjB,KAAK,UAAU;YACX,MAAM,GAAG,IAAA,sBAAgB,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAEpD,wGAAwG;YACxG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAExB,OAAO,MAAM,CAAC;QAClB,KAAK,OAAO;YACR,MAAM,GAAG,IAAA,gCAAgB,GAAE,CAAC;YAC5B,IAAA,0BAAM,EAAC,EAAE,CAAC,QAAQ,KAAK,OAAO,EAAE,iCAAiC,CAAC,CAAC;YACnE,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YAC/C,OAAO,MAAM,CAAC;QAElB,KAAK,YAAY,CAAC;QAClB,KAAK,OAAO,CAAC;QACb,KAAK,UAAU,CAAC;QAChB,OAAO,CAAC,CAAC;YACL,MAAM,GAAG,GAAG,6DAA6D,GAAG,EAAE,CAAC,QAAQ,CAAC;YACxF,QAAQ,CAAC,GAAG,CAAC,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;SACxB;KACJ;AACL,CAAC;AAaD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAa,mBAAoB,SAAQ,6BAAa;
|
|
1
|
+
{"version":3,"file":"client_tcp_transport.js","sourceRoot":"","sources":["../../source/client_tcp_transport.ts"],"names":[],"mappings":"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"}
|
package/dist/source/index.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module node-opcua-transport
|
|
3
3
|
*/
|
|
4
|
-
export * from "./HelloMessage";
|
|
5
4
|
export * from "./AcknowledgeMessage";
|
|
6
|
-
export * from "./TCPErrorMessage";
|
|
7
5
|
export * from "./client_tcp_transport";
|
|
6
|
+
export * from "./HelloMessage";
|
|
7
|
+
export * from "./message_builder_base";
|
|
8
8
|
export * from "./server_tcp_transport";
|
|
9
|
+
export * from "./status_codes";
|
|
9
10
|
export * from "./tcp_transport";
|
|
11
|
+
export * from "./TCPErrorMessage";
|
|
10
12
|
export * from "./tools";
|
|
11
|
-
export * from "./
|
|
13
|
+
export * from "./utils";
|
package/dist/source/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -13,12 +17,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
13
17
|
/**
|
|
14
18
|
* @module node-opcua-transport
|
|
15
19
|
*/
|
|
16
|
-
__exportStar(require("./HelloMessage"), exports);
|
|
17
20
|
__exportStar(require("./AcknowledgeMessage"), exports);
|
|
18
|
-
__exportStar(require("./TCPErrorMessage"), exports);
|
|
19
21
|
__exportStar(require("./client_tcp_transport"), exports);
|
|
22
|
+
__exportStar(require("./HelloMessage"), exports);
|
|
23
|
+
__exportStar(require("./message_builder_base"), exports);
|
|
20
24
|
__exportStar(require("./server_tcp_transport"), exports);
|
|
25
|
+
__exportStar(require("./status_codes"), exports);
|
|
21
26
|
__exportStar(require("./tcp_transport"), exports);
|
|
27
|
+
__exportStar(require("./TCPErrorMessage"), exports);
|
|
22
28
|
__exportStar(require("./tools"), exports);
|
|
23
|
-
__exportStar(require("./
|
|
29
|
+
__exportStar(require("./utils"), exports);
|
|
24
30
|
//# sourceMappingURL=index.js.map
|
package/dist/source/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../source/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../source/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;GAEG;AACH,uDAAqC;AACrC,yDAAuC;AACvC,iDAA+B;AAC/B,yDAAuC;AACvC,yDAAuC;AACvC,iDAA+B;AAC/B,kDAAgC;AAChC,oDAAkC;AAClC,0CAAwB;AACxB,0CAAwB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
2
3
|
/**
|
|
3
4
|
* @module node-opcua-transport
|
|
4
5
|
*/
|
|
@@ -6,7 +7,24 @@ import { EventEmitter } from "events";
|
|
|
6
7
|
import { BinaryStream } from "node-opcua-binary-stream";
|
|
7
8
|
import { SequenceHeader } from "node-opcua-chunkmanager";
|
|
8
9
|
import { MessageHeader, PacketAssembler, PacketInfo } from "node-opcua-packet-assembler";
|
|
10
|
+
import { StatusCode } from "node-opcua-status-code";
|
|
9
11
|
export declare function readRawMessageHeader(data: Buffer): PacketInfo;
|
|
12
|
+
export interface MessageBuilderBaseOptions {
|
|
13
|
+
signatureLength?: number;
|
|
14
|
+
maxMessageSize?: number;
|
|
15
|
+
maxChunkCount?: number;
|
|
16
|
+
maxChunkSize?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface MessageBuilderBase {
|
|
19
|
+
on(eventName: "startChunk", eventHandler: (info: PacketInfo, data: Buffer) => void): this;
|
|
20
|
+
on(eventName: "chunk", eventHandler: (chunk: Buffer) => void): this;
|
|
21
|
+
on(eventName: "error", eventHandler: (err: Error, statusCode: StatusCode, requestId: number | null) => void): this;
|
|
22
|
+
on(eventName: "full_message_body", eventHandler: (fullMessageBody: Buffer) => void): this;
|
|
23
|
+
emit(eventName: "startChunk", info: PacketInfo, data: Buffer): boolean;
|
|
24
|
+
emit(eventName: "chunk", chunk: Buffer): boolean;
|
|
25
|
+
emit(eventName: "error", err: Error, statusCode: StatusCode, requestId: number | null): boolean;
|
|
26
|
+
emit(eventName: "full_message_body", fullMessageBody: Buffer): boolean;
|
|
27
|
+
}
|
|
10
28
|
/**
|
|
11
29
|
* @class MessageBuilderBase
|
|
12
30
|
* @extends EventEmitter
|
|
@@ -17,10 +35,14 @@ export declare function readRawMessageHeader(data: Buffer): PacketInfo;
|
|
|
17
35
|
*
|
|
18
36
|
*/
|
|
19
37
|
export declare class MessageBuilderBase extends EventEmitter {
|
|
38
|
+
static defaultMaxChunkCount: number;
|
|
39
|
+
static defaultMaxMessageSize: number;
|
|
40
|
+
static defaultMaxChunkSize: number;
|
|
20
41
|
readonly signatureLength: number;
|
|
21
|
-
readonly
|
|
22
|
-
|
|
23
|
-
|
|
42
|
+
readonly maxMessageSize: number;
|
|
43
|
+
readonly maxChunkCount: number;
|
|
44
|
+
readonly maxChunkSize: number;
|
|
45
|
+
readonly options: MessageBuilderBaseOptions;
|
|
24
46
|
readonly _packetAssembler: PacketAssembler;
|
|
25
47
|
channelId: number;
|
|
26
48
|
totalMessageSize: number;
|
|
@@ -36,9 +58,7 @@ export declare class MessageBuilderBase extends EventEmitter {
|
|
|
36
58
|
private blocks;
|
|
37
59
|
private readonly _expectedChannelId;
|
|
38
60
|
private offsetBodyStart;
|
|
39
|
-
constructor(options?:
|
|
40
|
-
signatureLength?: number;
|
|
41
|
-
});
|
|
61
|
+
constructor(options?: MessageBuilderBaseOptions);
|
|
42
62
|
dispose(): void;
|
|
43
63
|
/**
|
|
44
64
|
* Feed message builder with some data
|
|
@@ -48,7 +68,7 @@ export declare class MessageBuilderBase extends EventEmitter {
|
|
|
48
68
|
feed(data: Buffer): void;
|
|
49
69
|
protected _decodeMessageBody(fullMessageBody: Buffer): boolean;
|
|
50
70
|
protected _read_headers(binaryStream: BinaryStream): boolean;
|
|
51
|
-
protected _report_error(errorMessage: string): false;
|
|
71
|
+
protected _report_error(statusCode: StatusCode, errorMessage: string): false;
|
|
52
72
|
private _init_new;
|
|
53
73
|
/**
|
|
54
74
|
* append a message chunk
|
|
@@ -12,9 +12,11 @@ const node_opcua_chunkmanager_1 = require("node-opcua-chunkmanager");
|
|
|
12
12
|
const node_opcua_debug_1 = require("node-opcua-debug");
|
|
13
13
|
const node_opcua_packet_assembler_1 = require("node-opcua-packet-assembler");
|
|
14
14
|
const node_opcua_utils_1 = require("node-opcua-utils");
|
|
15
|
+
const status_codes_1 = require("./status_codes");
|
|
15
16
|
const doPerfMonitoring = process.env.NODEOPCUADEBUG && process.env.NODEOPCUADEBUG.indexOf("PERF") >= 0;
|
|
16
17
|
const errorLog = (0, node_opcua_debug_1.make_errorLog)("MessageBuilder");
|
|
17
18
|
const debugLog = (0, node_opcua_debug_1.make_debugLog)("MessageBuilder");
|
|
19
|
+
const warningLog = (0, node_opcua_debug_1.make_warningLog)("MessageBuilder");
|
|
18
20
|
function readRawMessageHeader(data) {
|
|
19
21
|
const messageHeader = (0, node_opcua_chunkmanager_1.readMessageHeader)(new node_opcua_binary_stream_1.BinaryStream(data));
|
|
20
22
|
return {
|
|
@@ -43,15 +45,23 @@ class MessageBuilderBase extends events_1.EventEmitter {
|
|
|
43
45
|
this.blocks = [];
|
|
44
46
|
this.messageChunks = [];
|
|
45
47
|
this._expectedChannelId = 0;
|
|
46
|
-
options = options || {
|
|
48
|
+
options = options || {
|
|
49
|
+
maxMessageSize: 0,
|
|
50
|
+
maxChunkCount: 0,
|
|
51
|
+
maxChunkSize: 0
|
|
52
|
+
};
|
|
47
53
|
this.signatureLength = options.signatureLength || 0;
|
|
54
|
+
this.maxMessageSize = options.maxMessageSize || MessageBuilderBase.defaultMaxMessageSize;
|
|
55
|
+
this.maxChunkCount = options.maxChunkCount || MessageBuilderBase.defaultMaxChunkCount;
|
|
56
|
+
this.maxChunkSize = options.maxChunkSize || MessageBuilderBase.defaultMaxChunkSize;
|
|
48
57
|
this.options = options;
|
|
49
58
|
this._packetAssembler = new node_opcua_packet_assembler_1.PacketAssembler({
|
|
50
|
-
minimumSizeInBytes:
|
|
51
|
-
|
|
59
|
+
minimumSizeInBytes: 8,
|
|
60
|
+
maxChunkSize: this.maxChunkSize,
|
|
61
|
+
readChunkFunc: readRawMessageHeader
|
|
52
62
|
});
|
|
53
|
-
this._packetAssembler.on("
|
|
54
|
-
this._packetAssembler.on("
|
|
63
|
+
this._packetAssembler.on("chunk", (messageChunk) => this._feed_messageChunk(messageChunk));
|
|
64
|
+
this._packetAssembler.on("startChunk", (info, data) => {
|
|
55
65
|
if (doPerfMonitoring) {
|
|
56
66
|
// record tick 0: when the first data is received
|
|
57
67
|
this._tick0 = (0, node_opcua_utils_1.get_clock_tick)();
|
|
@@ -63,7 +73,11 @@ class MessageBuilderBase extends events_1.EventEmitter {
|
|
|
63
73
|
* @param info
|
|
64
74
|
* @param data
|
|
65
75
|
*/
|
|
66
|
-
this.emit("
|
|
76
|
+
this.emit("startChunk", info, data);
|
|
77
|
+
});
|
|
78
|
+
this._packetAssembler.on("error", (err) => {
|
|
79
|
+
warningLog("packet assembler ", err.message);
|
|
80
|
+
return this._report_error(status_codes_1.StatusCodes2.BadTcpMessageTooLarge, "packet assembler: " + err.message);
|
|
67
81
|
});
|
|
68
82
|
this._securityDefeated = false;
|
|
69
83
|
this.totalBodySize = 0;
|
|
@@ -97,15 +111,15 @@ class MessageBuilderBase extends events_1.EventEmitter {
|
|
|
97
111
|
(0, node_opcua_assert_1.assert)(binaryStream.length === 12);
|
|
98
112
|
// verifying secure ChannelId
|
|
99
113
|
if (this._expectedChannelId && this.channelId !== this._expectedChannelId) {
|
|
100
|
-
return this._report_error("Invalid secure channel Id");
|
|
114
|
+
return this._report_error(status_codes_1.StatusCodes2.BadTcpSecureChannelUnknown, "Invalid secure channel Id");
|
|
101
115
|
}
|
|
102
116
|
return true;
|
|
103
117
|
}
|
|
104
118
|
catch (err) {
|
|
105
|
-
return
|
|
119
|
+
return this._report_error(status_codes_1.StatusCodes2.BadTcpInternalError, "_read_headers error " + err.message);
|
|
106
120
|
}
|
|
107
121
|
}
|
|
108
|
-
_report_error(errorMessage) {
|
|
122
|
+
_report_error(statusCode, errorMessage) {
|
|
109
123
|
this._hasReceivedError = true;
|
|
110
124
|
/**
|
|
111
125
|
* notify the observers that an error has occurred
|
|
@@ -114,7 +128,7 @@ class MessageBuilderBase extends events_1.EventEmitter {
|
|
|
114
128
|
*/
|
|
115
129
|
debugLog("Error ", this.id, errorMessage);
|
|
116
130
|
// xx errorLog(new Error());
|
|
117
|
-
this.emit("error", new Error(errorMessage), this.sequenceHeader ? this.sequenceHeader.requestId : null);
|
|
131
|
+
this.emit("error", new Error(errorMessage), statusCode, this.sequenceHeader ? this.sequenceHeader.requestId : null);
|
|
118
132
|
return false;
|
|
119
133
|
}
|
|
120
134
|
_init_new() {
|
|
@@ -136,17 +150,23 @@ class MessageBuilderBase extends events_1.EventEmitter {
|
|
|
136
150
|
// the message builder is in error mode and further message chunks should be discarded.
|
|
137
151
|
return false;
|
|
138
152
|
}
|
|
153
|
+
if (this.messageChunks.length + 1 > this.maxChunkCount) {
|
|
154
|
+
return this._report_error(status_codes_1.StatusCodes2.BadTcpMessageTooLarge, `max chunk count exceeded: ${this.maxChunkCount}`);
|
|
155
|
+
}
|
|
139
156
|
this.messageChunks.push(chunk);
|
|
140
157
|
this.totalMessageSize += chunk.length;
|
|
158
|
+
if (this.totalMessageSize > this.maxMessageSize) {
|
|
159
|
+
return this._report_error(status_codes_1.StatusCodes2.BadTcpMessageTooLarge, `max message size exceeded: ${this.maxMessageSize}`);
|
|
160
|
+
}
|
|
141
161
|
const binaryStream = new node_opcua_binary_stream_1.BinaryStream(chunk);
|
|
142
162
|
if (!this._read_headers(binaryStream)) {
|
|
143
|
-
return this._report_error(`Invalid message header detected`);
|
|
163
|
+
return this._report_error(status_codes_1.StatusCodes2.BadTcpInternalError, `Invalid message header detected`);
|
|
144
164
|
}
|
|
145
165
|
(0, node_opcua_assert_1.assert)(binaryStream.length >= 12);
|
|
146
166
|
// verify message chunk length
|
|
147
167
|
if (this.messageHeader.length !== chunk.length) {
|
|
148
168
|
// tslint:disable:max-line-length
|
|
149
|
-
return this._report_error(`Invalid messageChunk size: the provided chunk is ${chunk.length} bytes long but header specifies ${this.messageHeader.length}`);
|
|
169
|
+
return this._report_error(status_codes_1.StatusCodes2.BadTcpInternalError, `Invalid messageChunk size: the provided chunk is ${chunk.length} bytes long but header specifies ${this.messageHeader.length}`);
|
|
150
170
|
}
|
|
151
171
|
// the start of the message body block
|
|
152
172
|
const offsetBodyStart = binaryStream.length;
|
|
@@ -195,7 +215,7 @@ class MessageBuilderBase extends events_1.EventEmitter {
|
|
|
195
215
|
return true;
|
|
196
216
|
}
|
|
197
217
|
else if (messageHeader.isFinal === "A") {
|
|
198
|
-
return this._report_error("received and Abort Message");
|
|
218
|
+
return this._report_error(status_codes_1.StatusCodes2.BadRequestInterrupted, "received and Abort Message");
|
|
199
219
|
}
|
|
200
220
|
else if (messageHeader.isFinal === "C") {
|
|
201
221
|
return this._append(chunk);
|
|
@@ -204,4 +224,7 @@ class MessageBuilderBase extends events_1.EventEmitter {
|
|
|
204
224
|
}
|
|
205
225
|
}
|
|
206
226
|
exports.MessageBuilderBase = MessageBuilderBase;
|
|
227
|
+
MessageBuilderBase.defaultMaxChunkCount = 1000;
|
|
228
|
+
MessageBuilderBase.defaultMaxMessageSize = 1024 * 64;
|
|
229
|
+
MessageBuilderBase.defaultMaxChunkSize = 1024 * 8;
|
|
207
230
|
//# sourceMappingURL=message_builder_base.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message_builder_base.js","sourceRoot":"","sources":["../../source/message_builder_base.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,mCAAsC;AACtC,yDAA2C;AAE3C,uEAAwD;AACxD,qEAAwE;AACxE,qEAA4E;AAC5E,
|
|
1
|
+
{"version":3,"file":"message_builder_base.js","sourceRoot":"","sources":["../../source/message_builder_base.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
2
3
|
/**
|
|
3
4
|
* @module node-opcua-transport
|
|
4
5
|
*/
|
|
@@ -14,11 +15,6 @@ import { TCP_transport } from "./tcp_transport";
|
|
|
14
15
|
*/
|
|
15
16
|
export declare class ServerTCP_transport extends TCP_transport {
|
|
16
17
|
static throttleTime: number;
|
|
17
|
-
receiveBufferSize: number;
|
|
18
|
-
sendBufferSize: number;
|
|
19
|
-
maxMessageSize: number;
|
|
20
|
-
maxChunkCount: number;
|
|
21
|
-
protocolVersion: number;
|
|
22
18
|
private _aborted;
|
|
23
19
|
private _helloReceived;
|
|
24
20
|
constructor();
|
|
@@ -12,7 +12,6 @@ const node_opcua_status_code_1 = require("node-opcua-status-code");
|
|
|
12
12
|
const AcknowledgeMessage_1 = require("./AcknowledgeMessage");
|
|
13
13
|
const HelloMessage_1 = require("./HelloMessage");
|
|
14
14
|
const tcp_transport_1 = require("./tcp_transport");
|
|
15
|
-
const TCPErrorMessage_1 = require("./TCPErrorMessage");
|
|
16
15
|
const tools_1 = require("./tools");
|
|
17
16
|
const utils_1 = require("./utils");
|
|
18
17
|
const hexDump = debug.hexDump;
|
|
@@ -45,13 +44,13 @@ class ServerTCP_transport extends tcp_transport_1.TCP_transport {
|
|
|
45
44
|
super();
|
|
46
45
|
this._aborted = 0;
|
|
47
46
|
this._helloReceived = false;
|
|
48
|
-
|
|
49
|
-
this.
|
|
50
|
-
this.maxMessageSize =
|
|
51
|
-
this.
|
|
52
|
-
this.protocolVersion = 0;
|
|
47
|
+
// before HEL/ACK
|
|
48
|
+
this.maxChunkCount = 1;
|
|
49
|
+
this.maxMessageSize = 4 * 1024;
|
|
50
|
+
this.receiveBufferSize = 4 * 1024;
|
|
53
51
|
}
|
|
54
52
|
_write_chunk(messageChunk) {
|
|
53
|
+
// istanbul ignore next
|
|
55
54
|
if (this.sendBufferSize > 0 && messageChunk.length > this.sendBufferSize) {
|
|
56
55
|
errorLog("write chunk exceed sendBufferSize messageChunk length = ", messageChunk.length, "sendBufferSize = ", this.sendBufferSize);
|
|
57
56
|
}
|
|
@@ -86,47 +85,50 @@ class ServerTCP_transport extends tcp_transport_1.TCP_transport {
|
|
|
86
85
|
return this._abortWithError(statusCode, extraErrorDescription, callback);
|
|
87
86
|
}
|
|
88
87
|
_abortWithError(statusCode, extraErrorDescription, callback) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
setTimeout(() => {
|
|
97
|
-
// send the error message and close the connection
|
|
98
|
-
(0, node_opcua_assert_1.assert)(Object.prototype.hasOwnProperty.call(node_opcua_status_code_1.StatusCodes, statusCode.name));
|
|
99
|
-
/* istanbul ignore next*/
|
|
100
|
-
if (doDebug) {
|
|
101
|
-
debugLog(chalk.red(" Server aborting because ") + chalk.cyan(statusCode.name));
|
|
102
|
-
debugLog(chalk.red(" extraErrorDescription ") + chalk.cyan(extraErrorDescription));
|
|
103
|
-
}
|
|
104
|
-
const errorResponse = new TCPErrorMessage_1.TCPErrorMessage({
|
|
105
|
-
reason: statusCode.description,
|
|
106
|
-
statusCode
|
|
107
|
-
});
|
|
108
|
-
const messageChunk = (0, tools_1.packTcpMessage)("ERR", errorResponse);
|
|
109
|
-
this.write(messageChunk);
|
|
110
|
-
this.disconnect(() => {
|
|
111
|
-
this._aborted = 2;
|
|
112
|
-
callback(new Error(extraErrorDescription + " StatusCode = " + statusCode.name));
|
|
113
|
-
});
|
|
114
|
-
}, ServerTCP_transport.throttleTime);
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
callback(new Error(statusCode.name));
|
|
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));
|
|
118
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);
|
|
119
105
|
}
|
|
120
106
|
_send_ACK_response(helloMessage) {
|
|
121
107
|
(0, node_opcua_assert_1.assert)(helloMessage.receiveBufferSize >= minimumBufferSize);
|
|
122
108
|
(0, node_opcua_assert_1.assert)(helloMessage.sendBufferSize >= minimumBufferSize);
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
109
|
+
const minBufferSize = 8192;
|
|
110
|
+
const maxBufferSize = 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 receiveBufferSize = 32 * 1024;
|
|
118
|
+
const sendBufferSize = 32 * 1024;
|
|
119
|
+
if (!helloMessage.maxChunkCount && helloMessage.sendBufferSize) {
|
|
120
|
+
helloMessage.maxChunkCount = helloMessage.maxMessageSize / helloMessage.sendBufferSize;
|
|
121
|
+
}
|
|
122
|
+
this.setLimits({
|
|
123
|
+
receiveBufferSize: clamp_value(helloMessage.receiveBufferSize || receiveBufferSize, minBufferSize, maxBufferSize),
|
|
124
|
+
sendBufferSize: clamp_value(helloMessage.sendBufferSize || sendBufferSize, minBufferSize, maxBufferSize),
|
|
125
|
+
maxMessageSize: clamp_value(helloMessage.maxMessageSize || defaultMaxMessageSize, minMaxMessageSize, maxMaxMessageSize),
|
|
126
|
+
maxChunkCount: clamp_value(helloMessage.maxChunkCount || defaultMaxChunkCount, minMaxChunkCount, maxMaxChunkCount)
|
|
127
|
+
});
|
|
127
128
|
// istanbul ignore next
|
|
128
129
|
if (utils_1.doTraceHelloAck) {
|
|
129
130
|
console.log(`received Hello \n${helloMessage.toString()}`);
|
|
131
|
+
console.log("Client accepts only message of size => ", this.maxMessageSize);
|
|
130
132
|
}
|
|
131
133
|
debugLog("Client accepts only message of size => ", this.maxMessageSize);
|
|
132
134
|
const acknowledgeMessage = new AcknowledgeMessage_1.AcknowledgeMessage({
|
|
@@ -171,7 +173,7 @@ class ServerTCP_transport extends tcp_transport_1.TCP_transport {
|
|
|
171
173
|
}
|
|
172
174
|
(0, node_opcua_assert_1.assert)(!this._helloReceived);
|
|
173
175
|
const stream = new node_opcua_binary_stream_1.BinaryStream(data);
|
|
174
|
-
const msgType = data.slice(0, 3).toString("
|
|
176
|
+
const msgType = data.slice(0, 3).toString("utf-8");
|
|
175
177
|
/* istanbul ignore next*/
|
|
176
178
|
if (doDebug) {
|
|
177
179
|
debugLog("SERVER received " + chalk.yellow(msgType));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server_tcp_transport.js","sourceRoot":"","sources":["../../source/server_tcp_transport.ts"],"names":[],"mappings":";;;AAMA,+BAA+B;AAC/B,yDAA2C;AAE3C,iBAAiB;AACjB,0CAA0C;AAC1C,uEAAwD;AACxD,qEAA+D;AAC/D,mEAAiE;AAGjE,wBAAwB;AACxB,6DAA0D;AAC1D,iDAA8C;AAC9C,mDAAgD;
|
|
1
|
+
{"version":3,"file":"server_tcp_transport.js","sourceRoot":"","sources":["../../source/server_tcp_transport.ts"],"names":[],"mappings":"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"}
|