-
Notifications
You must be signed in to change notification settings - Fork 99
Expand file tree
/
Copy pathPart.js
More file actions
55 lines (49 loc) · 1.92 KB
/
Part.js
File metadata and controls
55 lines (49 loc) · 1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// Copyright 2013 SAP AG.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http: //www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
// either express or implied. See the License for the specific
// language governing permissions and limitations under the License.
'use strict';
var util = require('../../util');
var PartKind = require('../common/PartKind');
var PART_HEADER_LENGTH = 16;
module.exports = Part;
function Part(options) {
this.kind = options.kind || PartKind.NIL;
this.attributes = options.attributes || 0;
this.argumentCount = options.argumentCount || 0;
this.useCesu8 = options.useCesu8;
this.buffer = undefined;
}
Part.prototype.getLength = function () {
return PART_HEADER_LENGTH + util.alignLength(this.buffer.length, 8)
}
Part.prototype.toBuffer = function toBuffer(remaining) {
var byteLength = util.alignLength(this.buffer.length, 8);
var buffer = Buffer.allocUnsafe(PART_HEADER_LENGTH + byteLength);
// Part kind, specifies nature of part data
buffer.writeInt8(this.kind, 0);
// Further attributes of part
buffer.writeInt8(this.attributes, 1);
// Argument count, number of elements in part data.
buffer.writeInt16LE(this.argumentCount, 2);
// Argument count, number of elements in part data (only for some part kinds).
buffer.writeInt32LE(0, 4);
// Length of part buffer in bytes
buffer.writeInt32LE(this.buffer.length, 8);
// Length in packet remaining without this part.
buffer.writeInt32LE(remaining, 12);
this.buffer.copy(buffer, PART_HEADER_LENGTH);
if (this.buffer.length < byteLength) {
buffer.fill(0x00, PART_HEADER_LENGTH + this.buffer.length);
}
return buffer;
};