node-opcua-file-transfer 2.93.0 → 2.95.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.
@@ -1,4 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  import { IClientFile } from "./client_file";
3
- export declare function readFile(clientFile: IClientFile): Promise<Buffer>;
3
+ export declare function readFile(clientFile: IClientFile, options?: {
4
+ chunkSize?: number;
5
+ }): Promise<Buffer>;
4
6
  export declare function readOPCUAFile(clientFile: IClientFile): Promise<Buffer>;
@@ -12,15 +12,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.readOPCUAFile = exports.readFile = void 0;
13
13
  const node_opcua_basic_types_1 = require("node-opcua-basic-types");
14
14
  const client_file_1 = require("./client_file");
15
- function readFile(clientFile) {
15
+ const read_max_byte_string_length_1 = require("./read_max_byte_string_length");
16
+ function getTransportMaxMessageSize(session) {
17
+ return session.getTransportSettings ? session.getTransportSettings().maxMessageSize : 0;
18
+ }
19
+ function readFile(clientFile, options) {
16
20
  return __awaiter(this, void 0, void 0, function* () {
21
+ options = options || { chunkSize: yield (0, read_max_byte_string_length_1.readMaxByteStringLength)(clientFile.session) };
22
+ let maxBlockSize = options.chunkSize || 1024;
23
+ const transportMaxSize = getTransportMaxMessageSize(clientFile.session);
24
+ maxBlockSize = transportMaxSize > 0 ? Math.min(maxBlockSize, transportMaxSize) : maxBlockSize;
17
25
  yield clientFile.open(client_file_1.OpenFileMode.Read);
18
26
  try {
19
27
  const fileSize = (0, node_opcua_basic_types_1.coerceInt32)(yield clientFile.size());
20
28
  /**
21
29
  * Read file
22
30
  */
23
- const data = yield clientFile.read(fileSize);
31
+ const data = yield clientFile.read(Math.min(fileSize, maxBlockSize));
24
32
  if (data.length >= fileSize) {
25
33
  // everything has been read
26
34
  return data;
@@ -29,7 +37,7 @@ function readFile(clientFile) {
29
37
  const chunks = [data];
30
38
  let remaining = fileSize - data.length;
31
39
  while (remaining > 0) {
32
- const buf = yield clientFile.read(remaining);
40
+ const buf = yield clientFile.read(Math.min(remaining, maxBlockSize));
33
41
  if (buf.length === 0)
34
42
  break;
35
43
  chunks.push(buf);
@@ -1 +1 @@
1
- {"version":3,"file":"read_file.js","sourceRoot":"","sources":["../../source/client/read_file.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mEAAqD;AACrD,+CAA0D;AAE1D,SAAsB,QAAQ,CAAC,UAAuB;;QAClD,MAAM,UAAU,CAAC,IAAI,CAAC,0BAAY,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI;YACA,MAAM,QAAQ,GAAG,IAAA,oCAAW,EAAC,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;YACtD;;eAEG;YACH,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ,EAAE;gBACzB,2BAA2B;gBAC3B,OAAO,IAAI,CAAC;aACf;YAED,wCAAwC;YACxC,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;YACvC,OAAO,SAAS,GAAG,CAAC,EAAE;gBAClB,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC7C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;oBAAE,MAAM;gBAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACjB,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC;aAC3B;YACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SAChC;gBAAS;YACN,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;SAC5B;IACL,CAAC;CAAA;AA1BD,4BA0BC;AAED,SAAsB,aAAa,CAAC,UAAuB;;QACvD,OAAO,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;CAAA;AAFD,sCAEC"}
1
+ {"version":3,"file":"read_file.js","sourceRoot":"","sources":["../../source/client/read_file.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mEAAqD;AAErD,+CAA0D;AAC1D,+EAAwE;AAExE,SAAS,0BAA0B,CAAC,OAAsB;IACtD,OAAO,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,SAAsB,QAAQ,CAAC,UAAuB,EAAE,OAAgC;;QACpF,OAAO,GAAG,OAAO,IAAI,EAAE,SAAS,EAAE,MAAM,IAAA,qDAAuB,EAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACtF,IAAI,YAAY,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;QAC7C,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxE,YAAY,GAAG,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAE9F,MAAM,UAAU,CAAC,IAAI,CAAC,0BAAY,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI;YACA,MAAM,QAAQ,GAAG,IAAA,oCAAW,EAAC,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;YACtD;;eAEG;YACH,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;YACrE,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ,EAAE;gBACzB,2BAA2B;gBAC3B,OAAO,IAAI,CAAC;aACf;YAED,wCAAwC;YACxC,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;YACvC,OAAO,SAAS,GAAG,CAAC,EAAE;gBAClB,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;gBACrE,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;oBAAE,MAAM;gBAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACjB,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC;aAC3B;YACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SAChC;gBAAS;YACN,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;SAC5B;IACL,CAAC;CAAA;AA/BD,4BA+BC;AAED,SAAsB,aAAa,CAAC,UAAuB;;QACvD,OAAO,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;CAAA;AAFD,sCAEC"}
@@ -0,0 +1,2 @@
1
+ import { IBasicSession } from "node-opcua-pseudo-session";
2
+ export declare function readMaxByteStringLength(session: IBasicSession): Promise<number>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.readMaxByteStringLength = void 0;
13
+ const node_opcua_basic_types_1 = require("node-opcua-basic-types");
14
+ const node_opcua_binary_stream_1 = require("node-opcua-binary-stream");
15
+ const node_opcua_constants_1 = require("node-opcua-constants");
16
+ const node_opcua_nodeid_1 = require("node-opcua-nodeid");
17
+ const node_opcua_status_code_1 = require("node-opcua-status-code");
18
+ function readMaxByteStringLength(session) {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ const dataValue = yield session.read({
21
+ nodeId: (0, node_opcua_nodeid_1.resolveNodeId)(node_opcua_constants_1.VariableIds.Server_ServerCapabilities_MaxByteStringLength),
22
+ attributeId: node_opcua_basic_types_1.AttributeIds.Value
23
+ });
24
+ if (dataValue.statusCode !== node_opcua_status_code_1.StatusCodes.Good) {
25
+ return 1024;
26
+ }
27
+ return dataValue.value.value || node_opcua_binary_stream_1.BinaryStream.maxByteStringLength;
28
+ });
29
+ }
30
+ exports.readMaxByteStringLength = readMaxByteStringLength;
31
+ //# sourceMappingURL=read_max_byte_string_length.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read_max_byte_string_length.js","sourceRoot":"","sources":["../../source/client/read_max_byte_string_length.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mEAAsD;AACtD,uEAAwD;AACxD,+DAAmD;AACnD,yDAAkD;AAElD,mEAAqD;AAGrD,SAAuB,uBAAuB,CAAC,OAAsB;;QACjE,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YACjC,MAAM,EAAE,IAAA,iCAAa,EAAC,kCAAW,CAAC,6CAA6C,CAAC;YAChF,WAAW,EAAE,qCAAY,CAAC,KAAK;SAClC,CAAC,CAAC;QACH,IAAI,SAAS,CAAC,UAAU,KAAK,oCAAW,CAAC,IAAI,EAAE;YAC3C,OAAO,IAAI,CAAC;SACf;QACD,OAAO,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,uCAAY,CAAC,mBAAmB,CAAC;IACrE,CAAC;CAAA;AATD,0DASC"}
@@ -13,45 +13,44 @@ exports.writeOPCUAFile = void 0;
13
13
  const fs = require("node:fs");
14
14
  const node_stream_1 = require("node:stream");
15
15
  const promises_1 = require("node:stream/promises");
16
- const node_opcua_basic_types_1 = require("node-opcua-basic-types");
17
16
  const node_opcua_binary_stream_1 = require("node-opcua-binary-stream");
18
- const node_opcua_constants_1 = require("node-opcua-constants");
19
17
  const node_opcua_debug_1 = require("node-opcua-debug");
20
- const node_opcua_nodeid_1 = require("node-opcua-nodeid");
21
18
  const client_file_1 = require("./client_file");
19
+ const read_max_byte_string_length_1 = require("./read_max_byte_string_length");
22
20
  const debugLog = (0, node_opcua_debug_1.make_debugLog)("FileType");
23
21
  // const errorLog = make_errorLog("FileType");
24
22
  // const warningLog = make_warningLog("FileType");
25
23
  const doDebug = (0, node_opcua_debug_1.checkDebugFlag)("FileType");
26
- function readMaxByteStringLength(session) {
27
- return __awaiter(this, void 0, void 0, function* () {
28
- const dataValue = yield session.read({
29
- nodeId: (0, node_opcua_nodeid_1.resolveNodeId)(node_opcua_constants_1.VariableIds.Server_ServerCapabilities_MaxByteStringLength),
30
- attributeId: node_opcua_basic_types_1.AttributeIds.Value
31
- });
32
- if (dataValue.statusCode !== node_opcua_basic_types_1.StatusCodes.Good) {
33
- return 1024;
34
- }
35
- return dataValue.value.value || node_opcua_binary_stream_1.BinaryStream.maxByteStringLength;
36
- });
24
+ function getTransportMaxMessageSize(session) {
25
+ return session.getTransportSettings ? session.getTransportSettings().maxMessageSize : 0;
37
26
  }
38
27
  function writeOPCUAFile(clientFile, filePath, { chunkSize }) {
39
28
  return __awaiter(this, void 0, void 0, function* () {
40
- const maxByteStringLength = chunkSize === undefined ? yield readMaxByteStringLength(clientFile.session) : chunkSize;
29
+ const maxMessageSize = getTransportMaxMessageSize(clientFile.session);
30
+ chunkSize = chunkSize === undefined ? yield (0, read_max_byte_string_length_1.readMaxByteStringLength)(clientFile.session) : chunkSize;
31
+ chunkSize = Math.min(chunkSize, node_opcua_binary_stream_1.BinaryStream.maxByteStringLength);
32
+ if (maxMessageSize > 200) {
33
+ chunkSize = Math.min(chunkSize, maxMessageSize - 1000);
34
+ }
35
+ console.log("chunkSize = ", chunkSize, maxMessageSize);
41
36
  if (!fs.existsSync(filePath)) {
42
37
  throw new Error(`File ${filePath} does not exist`);
43
38
  }
44
- const readStream = fs.createReadStream(filePath, { highWaterMark: maxByteStringLength });
39
+ const readStream = fs.createReadStream(filePath, { highWaterMark: chunkSize });
45
40
  yield clientFile.open(client_file_1.OpenFileMode.WriteEraseExisting);
46
41
  yield clientFile.setPosition(0);
47
42
  try {
48
43
  const outStream = new node_stream_1.Writable({
49
44
  write(chunk, encoding, callback) {
45
+ console.log("chunk ==chunkSize = ", chunk.length);
50
46
  doDebug && debugLog("writing chunk", chunk.length);
51
- clientFile.write(chunk).then(() => callback()).catch((err) => callback(err));
47
+ clientFile
48
+ .write(chunk)
49
+ .then(() => callback())
50
+ .catch((err) => callback(err));
52
51
  }
53
52
  });
54
- // note: pipeline requires NodeJS 15 or above
53
+ // note: pipeline requires NodeJS 15 or above
55
54
  yield (0, promises_1.pipeline)(readStream, outStream);
56
55
  }
57
56
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"write_file.js","sourceRoot":"","sources":["../../source/client/write_file.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8BAA8B;AAC9B,6CAAuC;AACvC,mDAAgD;AAEhD,mEAA+E;AAC/E,uEAAwD;AACxD,+DAAmD;AACnD,uDAAiE;AACjE,yDAAkD;AAElD,+CAA0D;AAE1D,MAAM,QAAQ,GAAG,IAAA,gCAAa,EAAC,UAAU,CAAC,CAAC;AAC3C,8CAA8C;AAC9C,kDAAkD;AAClD,MAAM,OAAO,GAAG,IAAA,iCAAc,EAAC,UAAU,CAAC,CAAC;AAE3C,SAAgB,uBAAuB,CAAC,OAAsB;;QAC1D,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YACjC,MAAM,EAAE,IAAA,iCAAa,EAAC,kCAAW,CAAC,6CAA6C,CAAC;YAChF,WAAW,EAAE,qCAAY,CAAC,KAAK;SAClC,CAAC,CAAC;QACH,IAAI,SAAS,CAAC,UAAU,KAAK,oCAAW,CAAC,IAAI,EAAE;YAC3C,OAAO,IAAI,CAAC;SACf;QACD,OAAO,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,uCAAY,CAAC,mBAAmB,CAAC;IACrE,CAAC;CAAA;AAED,SAAsB,cAAc,CAAC,UAAuB,EAAE,QAAgB,EAAE,EAAE,SAAS,EAA0B;;QAEjH,MAAM,mBAAmB,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,uBAAuB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEpH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,iBAAiB,CAAC,CAAC;SACtD;QACD,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACzF,MAAM,UAAU,CAAC,IAAI,CAAC,0BAAY,CAAC,kBAAkB,CAAC,CAAC;QACvD,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI;YACA,MAAM,SAAS,GAAG,IAAI,sBAAQ,CAAC;gBAC3B,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ;oBAC3B,OAAO,IAAI,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;oBACnD,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAC,EAAE,CAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/E,CAAC;aACF,CAAC,CAAC;YACH,oDAAoD;YACpD,MAAM,IAAA,mBAAQ,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;SAE3C;QAAC,OAAO,CAAC,EAAE;YACR,QAAQ,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;YAC/B,MAAM,CAAC,CAAC;SACX;gBACO;YACJ,OAAO,IAAI,QAAQ,CAAC,wBAAwB,CAAC,CAAC;YAC9C,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;SAC5B;IACL,CAAC;CAAA;AA5BD,wCA4BC"}
1
+ {"version":3,"file":"write_file.js","sourceRoot":"","sources":["../../source/client/write_file.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8BAA8B;AAC9B,6CAAuC;AACvC,mDAAgD;AAGhD,uEAAwD;AAExD,uDAAiE;AAGjE,+CAA0D;AAC1D,+EAAwE;AAExE,MAAM,QAAQ,GAAG,IAAA,gCAAa,EAAC,UAAU,CAAC,CAAC;AAC3C,8CAA8C;AAC9C,kDAAkD;AAClD,MAAM,OAAO,GAAG,IAAA,iCAAc,EAAC,UAAU,CAAC,CAAC;AAE3C,SAAS,0BAA0B,CAAC,OAAsB;IACtD,OAAO,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,SAAsB,cAAc,CAAC,UAAuB,EAAE,QAAgB,EAAE,EAAE,SAAS,EAA0B;;QACjH,MAAM,cAAc,GAAG,0BAA0B,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAEtE,SAAS,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,IAAA,qDAAuB,EAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,uCAAY,CAAC,mBAAmB,CAAC,CAAC;QAClE,IAAI,cAAc,GAAG,GAAG,EAAE;YACtB,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC,CAAC;SAC1D;QACD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;QAEvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,iBAAiB,CAAC,CAAC;SACtD;QACD,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/E,MAAM,UAAU,CAAC,IAAI,CAAC,0BAAY,CAAC,kBAAkB,CAAC,CAAC;QACvD,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI;YACA,MAAM,SAAS,GAAG,IAAI,sBAAQ,CAAC;gBAC3B,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ;oBAC3B,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;oBAClD,OAAO,IAAI,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;oBACnD,UAAU;yBACL,KAAK,CAAC,KAAK,CAAC;yBACZ,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;yBACtB,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvC,CAAC;aACJ,CAAC,CAAC;YACH,6CAA6C;YAC7C,MAAM,IAAA,mBAAQ,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC;SACzC;QAAC,OAAO,CAAC,EAAE;YACR,QAAQ,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;YAC/B,MAAM,CAAC,CAAC;SACX;gBAAS;YACN,OAAO,IAAI,QAAQ,CAAC,wBAAwB,CAAC,CAAC;YAC9C,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;SAC5B;IACL,CAAC;CAAA;AApCD,wCAoCC"}
@@ -16,6 +16,7 @@ exports.installFileType = exports.defaultMaxSize = exports.getFileData = exports
16
16
  const util_1 = require("util");
17
17
  const fsOrig = require("fs");
18
18
  const node_opcua_assert_1 = require("node-opcua-assert");
19
+ const node_opcua_address_space_base_1 = require("node-opcua-address-space-base");
19
20
  const node_opcua_binary_stream_1 = require("node-opcua-binary-stream");
20
21
  const node_opcua_debug_1 = require("node-opcua-debug");
21
22
  const node_opcua_nodeid_1 = require("node-opcua-nodeid");
@@ -369,7 +370,7 @@ function _readFile(inputArguments, context) {
369
370
  const fileHandle = inputArguments[0].value;
370
371
  // Length Defines the length in bytes that should be returned in data, starting from the current
371
372
  // position of the file handle. If the end of file is reached all data until the end of the file is
372
- // returned. The Server is allowed to return less data than specified length.
373
+ // returned.
373
374
  let length = inputArguments[1].value;
374
375
  // Only positive values are allowed.
375
376
  if (length < 0) {
@@ -384,6 +385,10 @@ function _readFile(inputArguments, context) {
384
385
  // open mode did not specify Read Flag
385
386
  return { statusCode: node_opcua_status_code_1.StatusCodes.BadInvalidState };
386
387
  }
388
+ // Spec says that the the Server is allowed to return less data than specified length.
389
+ //
390
+ // In particular, we have to make sure that the number og bytes returned is not greater than
391
+ // the maxChunkSizeBytes specified in the server configuration.
387
392
  // length cannot exceed maxChunkSizeBytes
388
393
  const fileData = getFileDataFromContext(context);
389
394
  const maxChunkSizeBytes = fileData.maxChunkSizeBytes;
@@ -394,6 +399,11 @@ function _readFile(inputArguments, context) {
394
399
  if (length > node_opcua_binary_stream_1.BinaryStream.maxByteStringLength) {
395
400
  length = node_opcua_binary_stream_1.BinaryStream.maxByteStringLength;
396
401
  }
402
+ // length cannot either exceed transport OPCUA maxMessageLength - some margin.
403
+ const maxMessageSize = (0, node_opcua_address_space_base_1.getContextMaxMessageSize)(context) - 1024;
404
+ if (maxMessageSize > 0 && length > maxMessageSize) {
405
+ length = maxMessageSize;
406
+ }
397
407
  // length cannot either exceed remaining buffer size from current position
398
408
  length = Math.min(_fileInfo.size - _fileInfo.position[1], length);
399
409
  const data = Buffer.alloc(length);
@@ -1 +1 @@
1
- {"version":3,"file":"file_type_helpers.js","sourceRoot":"","sources":["../../source/server/file_type_helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file_type_helpers.js","sourceRoot":"","sources":["../../source/server/file_type_helpers.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-opcua-file-transfer",
3
- "version": "2.93.0",
3
+ "version": "2.95.0",
4
4
  "description": "pure nodejs OPCUA SDK - module -server",
5
5
  "scripts": {
6
6
  "build": "tsc -b",
@@ -15,24 +15,26 @@
15
15
  "npm": ">=8.x"
16
16
  },
17
17
  "dependencies": {
18
- "node-opcua-address-space": "2.93.0",
18
+ "node-opcua-address-space": "2.95.0",
19
+ "node-opcua-address-space-base": "2.95.0",
19
20
  "node-opcua-assert": "2.88.0",
20
21
  "node-opcua-basic-types": "2.92.0",
21
22
  "node-opcua-binary-stream": "2.90.1",
22
23
  "node-opcua-constants": "2.88.0",
23
- "node-opcua-data-model": "2.92.0",
24
+ "node-opcua-data-model": "2.95.0",
24
25
  "node-opcua-debug": "2.90.1",
25
26
  "node-opcua-nodeid": "2.90.1",
26
- "node-opcua-pseudo-session": "2.92.0",
27
- "node-opcua-service-call": "2.92.0",
28
- "node-opcua-service-read": "2.92.0",
29
- "node-opcua-service-translate-browse-path": "2.92.0",
27
+ "node-opcua-pseudo-session": "2.95.0",
28
+ "node-opcua-service-call": "2.95.0",
29
+ "node-opcua-service-read": "2.95.0",
30
+ "node-opcua-service-translate-browse-path": "2.95.0",
30
31
  "node-opcua-status-code": "2.90.1",
31
- "node-opcua-variant": "2.92.0"
32
+ "node-opcua-variant": "2.95.0"
32
33
  },
33
34
  "devDependencies": {
34
35
  "memfs": "^3.4.13",
35
- "node-opcua-client": "2.93.0",
36
+ "node-opcua": "2.95.0",
37
+ "node-opcua-client": "2.95.0",
36
38
  "node-opcua-leak-detector": "2.90.1",
37
39
  "node-opcua-nodesets": "2.88.0",
38
40
  "should": "^13.2.3"
@@ -52,5 +54,5 @@
52
54
  "internet of things"
53
55
  ],
54
56
  "homepage": "http://node-opcua.github.io/",
55
- "gitHead": "e4acb259dbe874015679bc8778c43a2fed440929"
57
+ "gitHead": "ad7086f9c4cd2ab52922e26cb6782ec6b86f9d20"
56
58
  }
@@ -1,14 +1,25 @@
1
1
  import { coerceInt32 } from "node-opcua-basic-types";
2
+ import { IBasicSession } from "node-opcua-pseudo-session";
2
3
  import { IClientFile, OpenFileMode } from "./client_file";
4
+ import { readMaxByteStringLength } from "./read_max_byte_string_length";
5
+
6
+ function getTransportMaxMessageSize(session: IBasicSession): number {
7
+ return session.getTransportSettings ? session.getTransportSettings().maxMessageSize : 0;
8
+ }
9
+
10
+ export async function readFile(clientFile: IClientFile, options?: { chunkSize?: number }): Promise<Buffer> {
11
+ options = options || { chunkSize: await readMaxByteStringLength(clientFile.session) };
12
+ let maxBlockSize = options.chunkSize || 1024;
13
+ const transportMaxSize = getTransportMaxMessageSize(clientFile.session);
14
+ maxBlockSize = transportMaxSize > 0 ? Math.min(maxBlockSize, transportMaxSize) : maxBlockSize;
3
15
 
4
- export async function readFile(clientFile: IClientFile): Promise<Buffer> {
5
16
  await clientFile.open(OpenFileMode.Read);
6
17
  try {
7
18
  const fileSize = coerceInt32(await clientFile.size());
8
19
  /**
9
- * Read file
20
+ * Read file
10
21
  */
11
- const data = await clientFile.read(fileSize);
22
+ const data = await clientFile.read(Math.min(fileSize, maxBlockSize));
12
23
  if (data.length >= fileSize) {
13
24
  // everything has been read
14
25
  return data;
@@ -18,7 +29,7 @@ export async function readFile(clientFile: IClientFile): Promise<Buffer> {
18
29
  const chunks = [data];
19
30
  let remaining = fileSize - data.length;
20
31
  while (remaining > 0) {
21
- const buf = await clientFile.read(remaining);
32
+ const buf = await clientFile.read(Math.min(remaining, maxBlockSize));
22
33
  if (buf.length === 0) break;
23
34
  chunks.push(buf);
24
35
  remaining -= buf.length;
@@ -0,0 +1,20 @@
1
+ import { AttributeIds } from "node-opcua-basic-types";
2
+ import { BinaryStream } from "node-opcua-binary-stream";
3
+ import { VariableIds } from "node-opcua-constants";
4
+ import { resolveNodeId } from "node-opcua-nodeid";
5
+ import { IBasicSession } from "node-opcua-pseudo-session";
6
+ import { StatusCodes } from "node-opcua-status-code";
7
+
8
+
9
+ export async function readMaxByteStringLength(session: IBasicSession): Promise<number> {
10
+ const dataValue = await session.read({
11
+ nodeId: resolveNodeId(VariableIds.Server_ServerCapabilities_MaxByteStringLength),
12
+ attributeId: AttributeIds.Value
13
+ });
14
+ if (dataValue.statusCode !== StatusCodes.Good) {
15
+ return 1024;
16
+ }
17
+ return dataValue.value.value || BinaryStream.maxByteStringLength;
18
+ }
19
+
20
+
@@ -9,49 +9,51 @@ import { checkDebugFlag, make_debugLog } from "node-opcua-debug";
9
9
  import { resolveNodeId } from "node-opcua-nodeid";
10
10
  import { IBasicSession } from "node-opcua-pseudo-session";
11
11
  import { IClientFile, OpenFileMode } from "./client_file";
12
+ import { readMaxByteStringLength } from "./read_max_byte_string_length";
12
13
 
13
14
  const debugLog = make_debugLog("FileType");
14
15
  // const errorLog = make_errorLog("FileType");
15
16
  // const warningLog = make_warningLog("FileType");
16
17
  const doDebug = checkDebugFlag("FileType");
17
18
 
18
- async function readMaxByteStringLength(session: IBasicSession) {
19
- const dataValue = await session.read({
20
- nodeId: resolveNodeId(VariableIds.Server_ServerCapabilities_MaxByteStringLength),
21
- attributeId: AttributeIds.Value
22
- });
23
- if (dataValue.statusCode !== StatusCodes.Good) {
24
- return 1024;
25
- }
26
- return dataValue.value.value || BinaryStream.maxByteStringLength;
19
+ function getTransportMaxMessageSize(session: IBasicSession): number {
20
+ return session.getTransportSettings ? session.getTransportSettings().maxMessageSize : 0;
27
21
  }
28
22
 
29
23
  export async function writeOPCUAFile(clientFile: IClientFile, filePath: string, { chunkSize }: { chunkSize?: number }) {
24
+ const maxMessageSize = getTransportMaxMessageSize(clientFile.session);
30
25
 
31
- const maxByteStringLength = chunkSize === undefined ? await readMaxByteStringLength(clientFile.session) : chunkSize;
26
+ chunkSize = chunkSize === undefined ? await readMaxByteStringLength(clientFile.session) : chunkSize;
27
+ chunkSize = Math.min(chunkSize, BinaryStream.maxByteStringLength);
28
+ if (maxMessageSize > 200) {
29
+ chunkSize = Math.min(chunkSize, maxMessageSize - 1000);
30
+ }
31
+ console.log("chunkSize = ", chunkSize, maxMessageSize);
32
32
 
33
33
  if (!fs.existsSync(filePath)) {
34
34
  throw new Error(`File ${filePath} does not exist`);
35
35
  }
36
- const readStream = fs.createReadStream(filePath, { highWaterMark: maxByteStringLength });
36
+ const readStream = fs.createReadStream(filePath, { highWaterMark: chunkSize });
37
37
  await clientFile.open(OpenFileMode.WriteEraseExisting);
38
38
  await clientFile.setPosition(0);
39
39
  try {
40
40
  const outStream = new Writable({
41
41
  write(chunk, encoding, callback) {
42
+ console.log("chunk ==chunkSize = ", chunk.length);
42
43
  doDebug && debugLog("writing chunk", chunk.length);
43
- clientFile.write(chunk).then(() => callback()).catch((err)=>callback(err));
44
+ clientFile
45
+ .write(chunk)
46
+ .then(() => callback())
47
+ .catch((err) => callback(err));
44
48
  }
45
- });
46
- // note: pipeline requires NodeJS 15 or above
47
- await pipeline(readStream, outStream);
48
-
49
+ });
50
+ // note: pipeline requires NodeJS 15 or above
51
+ await pipeline(readStream, outStream);
49
52
  } catch (e) {
50
53
  debugLog((e as Error).message);
51
54
  throw e;
52
- }
53
- finally {
55
+ } finally {
54
56
  doDebug && debugLog("closing the OPCUA File");
55
57
  await clientFile.close();
56
58
  }
57
- }
59
+ }
@@ -6,6 +6,9 @@ import { callbackify, promisify } from "util";
6
6
  import * as fsOrig from "fs";
7
7
 
8
8
  import { assert } from "node-opcua-assert";
9
+ import {
10
+ getContextMaxMessageSize,
11
+ } from "node-opcua-address-space-base";
9
12
  import {
10
13
  AddressSpace,
11
14
  IAddressSpace,
@@ -474,7 +477,8 @@ async function _readFile(this: UAMethod, inputArguments: Variant[], context: ISe
474
477
 
475
478
  // Length Defines the length in bytes that should be returned in data, starting from the current
476
479
  // position of the file handle. If the end of file is reached all data until the end of the file is
477
- // returned. The Server is allowed to return less data than specified length.
480
+ // returned.
481
+
478
482
  let length: Int32 = inputArguments[1].value as Int32;
479
483
 
480
484
  // Only positive values are allowed.
@@ -482,6 +486,7 @@ async function _readFile(this: UAMethod, inputArguments: Variant[], context: ISe
482
486
  return { statusCode: StatusCodes.BadInvalidArgument };
483
487
  }
484
488
 
489
+
485
490
 
486
491
  const _fileInfo = _getFileInfo(addressSpace, context, fileHandle);
487
492
  if (!_fileInfo) {
@@ -493,6 +498,10 @@ async function _readFile(this: UAMethod, inputArguments: Variant[], context: ISe
493
498
  return { statusCode: StatusCodes.BadInvalidState };
494
499
  }
495
500
 
501
+ // Spec says that the the Server is allowed to return less data than specified length.
502
+ //
503
+ // In particular, we have to make sure that the number og bytes returned is not greater than
504
+ // the maxChunkSizeBytes specified in the server configuration.
496
505
  // length cannot exceed maxChunkSizeBytes
497
506
  const fileData = getFileDataFromContext(context);
498
507
 
@@ -505,6 +514,12 @@ async function _readFile(this: UAMethod, inputArguments: Variant[], context: ISe
505
514
  length = BinaryStream.maxByteStringLength;
506
515
  }
507
516
 
517
+ // length cannot either exceed transport OPCUA maxMessageLength - some margin.
518
+ const maxMessageSize = getContextMaxMessageSize(context) - 1024;
519
+ if (maxMessageSize>0 && length > maxMessageSize) {
520
+ length = maxMessageSize;
521
+ }
522
+
508
523
  // length cannot either exceed remaining buffer size from current position
509
524
  length = Math.min(_fileInfo.size - _fileInfo.position[1], length);
510
525