werift-sctp 0.0.4 → 0.0.6
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/README.md +7 -3
- package/lib/common/src/binary.d.ts +50 -0
- package/lib/common/src/binary.js +311 -0
- package/lib/common/src/binary.js.map +1 -0
- package/lib/common/src/event.d.ts +45 -0
- package/lib/common/src/event.js +229 -0
- package/lib/common/src/event.js.map +1 -0
- package/lib/common/src/index.d.ts +8 -0
- package/lib/common/src/index.js +25 -0
- package/lib/common/src/index.js.map +1 -0
- package/lib/common/src/log.d.ts +13 -0
- package/lib/common/src/log.js +40 -0
- package/lib/common/src/log.js.map +1 -0
- package/lib/common/src/network.d.ts +10 -0
- package/lib/common/src/network.js +61 -0
- package/lib/common/src/network.js.map +1 -0
- package/lib/{utils.d.ts → common/src/number.d.ts} +8 -3
- package/lib/{utils.js → common/src/number.js} +23 -19
- package/lib/common/src/number.js.map +1 -0
- package/lib/common/src/promise.d.ts +11 -0
- package/lib/common/src/promise.js +52 -0
- package/lib/common/src/promise.js.map +1 -0
- package/lib/common/src/transport.d.ts +45 -0
- package/lib/common/src/transport.js +226 -0
- package/lib/common/src/transport.js.map +1 -0
- package/lib/common/src/type.d.ts +3 -0
- package/lib/common/src/type.js +3 -0
- package/lib/common/src/type.js.map +1 -0
- package/lib/{chunk.d.ts → sctp/src/chunk.d.ts} +46 -28
- package/lib/sctp/src/chunk.js +751 -0
- package/lib/sctp/src/chunk.js.map +1 -0
- package/lib/{const.js → sctp/src/const.js} +2 -2
- package/lib/sctp/src/const.js.map +1 -0
- package/lib/sctp/src/helper.d.ts +5 -0
- package/lib/sctp/src/helper.js +15 -0
- package/lib/sctp/src/helper.js.map +1 -0
- package/lib/sctp/src/imports/common.d.ts +1 -0
- package/lib/sctp/src/imports/common.js +18 -0
- package/lib/sctp/src/imports/common.js.map +1 -0
- package/lib/{index.d.ts → sctp/src/index.d.ts} +1 -1
- package/lib/sctp/src/index.js.map +1 -0
- package/lib/sctp/src/param.d.ts +40 -0
- package/lib/sctp/src/param.js +173 -0
- package/lib/sctp/src/param.js.map +1 -0
- package/lib/{sctp.d.ts → sctp/src/sctp.d.ts} +60 -37
- package/lib/sctp/src/sctp.js +1455 -0
- package/lib/sctp/src/sctp.js.map +1 -0
- package/lib/{transport.d.ts → sctp/src/transport.d.ts} +3 -4
- package/lib/sctp/src/transport.js +50 -0
- package/lib/sctp/src/transport.js.map +1 -0
- package/package.json +19 -14
- package/.eslintrc +0 -40
- package/assets/cert.pem +0 -19
- package/assets/key.pem +0 -28
- package/examples/ping.ts +0 -36
- package/examples/pong.ts +0 -34
- package/jest.config.js +0 -5
- package/lib/chunk.js +0 -429
- package/lib/chunk.js.map +0 -1
- package/lib/const.js.map +0 -1
- package/lib/helper.d.ts +0 -6
- package/lib/helper.js +0 -21
- package/lib/helper.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/param.d.ts +0 -36
- package/lib/param.js +0 -76
- package/lib/param.js.map +0 -1
- package/lib/sctp.js +0 -968
- package/lib/sctp.js.map +0 -1
- package/lib/transport.js +0 -23
- package/lib/transport.js.map +0 -1
- package/lib/utils.js.map +0 -1
- package/src/chunk.ts +0 -514
- package/src/const.ts +0 -18
- package/src/helper.ts +0 -18
- package/src/index.ts +0 -3
- package/src/param.ts +0 -101
- package/src/sctp.ts +0 -1174
- package/src/transport.ts +0 -30
- package/src/typings/jspack.d.ts +0 -8
- package/src/utils.ts +0 -36
- package/tests/data/h264_0000.bin +0 -0
- package/tests/data/h264_0001.bin +0 -0
- package/tests/data/h264_0002.bin +0 -1
- package/tests/data/h264_0003.bin +0 -0
- package/tests/data/rtcp_bye.bin +0 -0
- package/tests/data/rtcp_bye_invalid.bin +0 -0
- package/tests/data/rtcp_bye_no_sources.bin +0 -0
- package/tests/data/rtcp_bye_padding.bin +0 -0
- package/tests/data/rtcp_psfb_invalid.bin +0 -0
- package/tests/data/rtcp_psfb_pli.bin +0 -0
- package/tests/data/rtcp_rr.bin +0 -0
- package/tests/data/rtcp_rr_invalid.bin +0 -0
- package/tests/data/rtcp_rtpfb.bin +0 -0
- package/tests/data/rtcp_rtpfb_invalid.bin +0 -0
- package/tests/data/rtcp_sdes.bin +0 -0
- package/tests/data/rtcp_sdes_item_truncated.bin +0 -0
- package/tests/data/rtcp_sdes_source_truncated.bin +0 -0
- package/tests/data/rtcp_sr.bin +0 -0
- package/tests/data/rtcp_sr_invalid.bin +0 -0
- package/tests/data/rtp.bin +0 -0
- package/tests/data/rtp_dtmf.bin +0 -1
- package/tests/data/rtp_only_padding.bin +0 -0
- package/tests/data/rtp_only_padding_with_header_extensions.bin +0 -0
- package/tests/data/rtp_with_csrc.bin +0 -0
- package/tests/data/rtp_with_sdes_mid.bin +0 -0
- package/tests/data/sctp_abort.bin +0 -0
- package/tests/data/sctp_cookie_echo.bin +0 -0
- package/tests/data/sctp_data.bin +0 -0
- package/tests/data/sctp_data_padding.bin +0 -0
- package/tests/data/sctp_error.bin +0 -0
- package/tests/data/sctp_forward_tsn.bin +0 -0
- package/tests/data/sctp_heartbeat.bin +0 -0
- package/tests/data/sctp_init.bin +0 -0
- package/tests/data/sctp_init_bad_verification.bin +0 -0
- package/tests/data/sctp_reconfig_add_out.bin +0 -0
- package/tests/data/sctp_reconfig_reset_out.bin +0 -0
- package/tests/data/sctp_reconfig_response.bin +0 -0
- package/tests/data/sctp_sack.bin +0 -0
- package/tests/data/sctp_shutdown.bin +0 -0
- package/tests/packet.test.ts +0 -245
- package/tests/sctp.test.ts +0 -57
- package/tests/stream.test.ts +0 -91
- package/tests/udp.test.ts +0 -35
- package/tests/utils.ts +0 -5
- package/tsconfig.json +0 -21
- /package/lib/{const.d.ts → sctp/src/const.d.ts} +0 -0
- /package/lib/{index.js → sctp/src/index.js} +0 -0
package/README.md
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
# werift-sctp
|
|
2
|
+
|
|
3
|
+
SCTP Implementation for TypeScript
|
|
4
|
+
based on aiortc/sctp
|
|
2
5
|
|
|
3
6
|
# Example
|
|
4
7
|
|
|
5
8
|
```typescript
|
|
6
9
|
import { createSocket } from "dgram";
|
|
7
|
-
import { SCTP, WEBRTC_PPID, createUdpTransport } from "
|
|
10
|
+
import { SCTP, WEBRTC_PPID, createUdpTransport } from "werift-sctp";
|
|
8
11
|
|
|
9
12
|
const port = 5555;
|
|
10
13
|
|
|
@@ -37,7 +40,8 @@ client.send(0, WEBRTC_PPID.STRING, Buffer.from("ping"));
|
|
|
37
40
|
```
|
|
38
41
|
|
|
39
42
|
# reference
|
|
40
|
-
|
|
43
|
+
|
|
44
|
+
-
|
|
41
45
|
- RFC4960
|
|
42
46
|
- RFC6083
|
|
43
47
|
- RFC6525
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export declare function random16(): number;
|
|
2
|
+
export declare function random32(): number;
|
|
3
|
+
export declare function bufferXor(a: Buffer, b: Buffer): Buffer;
|
|
4
|
+
export declare function bufferArrayXor(arr: Buffer[]): Buffer;
|
|
5
|
+
export declare class BitWriter {
|
|
6
|
+
private bitLength;
|
|
7
|
+
value: number;
|
|
8
|
+
constructor(bitLength: number);
|
|
9
|
+
set(size: number, startIndex: number, value: number): this;
|
|
10
|
+
get buffer(): Buffer;
|
|
11
|
+
}
|
|
12
|
+
export declare class BitWriter2 {
|
|
13
|
+
/**Max 32bit */
|
|
14
|
+
private bitLength;
|
|
15
|
+
private _value;
|
|
16
|
+
offset: bigint;
|
|
17
|
+
/**
|
|
18
|
+
* 各valueがオクテットを跨いではならない
|
|
19
|
+
*/
|
|
20
|
+
constructor(
|
|
21
|
+
/**Max 32bit */
|
|
22
|
+
bitLength: number);
|
|
23
|
+
set(value: number, size?: number): this;
|
|
24
|
+
get value(): number;
|
|
25
|
+
get buffer(): Buffer;
|
|
26
|
+
}
|
|
27
|
+
export declare function getBit(bits: number, startIndex: number, length?: number): number;
|
|
28
|
+
export declare function paddingByte(bits: number): string;
|
|
29
|
+
export declare function paddingBits(bits: number, expectLength: number): string;
|
|
30
|
+
export declare function bufferWriter(bytes: number[], values: (number | bigint)[]): Buffer;
|
|
31
|
+
export declare function createBufferWriter(bytes: number[], singleBuffer?: boolean): (values: (number | bigint)[]) => Buffer;
|
|
32
|
+
export declare function bufferWriterLE(bytes: number[], values: (number | bigint)[]): Buffer;
|
|
33
|
+
export declare function bufferReader(buf: Buffer, bytes: number[]): any[];
|
|
34
|
+
export declare class BufferChain {
|
|
35
|
+
buffer: Buffer;
|
|
36
|
+
constructor(size: number);
|
|
37
|
+
writeInt16BE(value: number, offset?: number | undefined): this;
|
|
38
|
+
writeUInt8(value: number, offset?: number | undefined): this;
|
|
39
|
+
}
|
|
40
|
+
export declare const dumpBuffer: (data: Buffer) => string;
|
|
41
|
+
export declare function buffer2ArrayBuffer(buf: Buffer): ArrayBuffer;
|
|
42
|
+
export declare class BitStream {
|
|
43
|
+
uint8Array: Buffer;
|
|
44
|
+
private position;
|
|
45
|
+
private bitsPending;
|
|
46
|
+
constructor(uint8Array: Buffer);
|
|
47
|
+
writeBits(bits: number, value: number): BitStream;
|
|
48
|
+
readBits(bits: number, bitBuffer?: number): any;
|
|
49
|
+
seekTo(bitPos: number): void;
|
|
50
|
+
}
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BitStream = exports.dumpBuffer = exports.BufferChain = exports.BitWriter2 = exports.BitWriter = void 0;
|
|
4
|
+
exports.random16 = random16;
|
|
5
|
+
exports.random32 = random32;
|
|
6
|
+
exports.bufferXor = bufferXor;
|
|
7
|
+
exports.bufferArrayXor = bufferArrayXor;
|
|
8
|
+
exports.getBit = getBit;
|
|
9
|
+
exports.paddingByte = paddingByte;
|
|
10
|
+
exports.paddingBits = paddingBits;
|
|
11
|
+
exports.bufferWriter = bufferWriter;
|
|
12
|
+
exports.createBufferWriter = createBufferWriter;
|
|
13
|
+
exports.bufferWriterLE = bufferWriterLE;
|
|
14
|
+
exports.bufferReader = bufferReader;
|
|
15
|
+
exports.buffer2ArrayBuffer = buffer2ArrayBuffer;
|
|
16
|
+
const crypto_1 = require("crypto");
|
|
17
|
+
const jspack_1 = require("@shinyoshiaki/jspack");
|
|
18
|
+
function random16() {
|
|
19
|
+
return jspack_1.jspack.Unpack("!H", (0, crypto_1.randomBytes)(2))[0];
|
|
20
|
+
}
|
|
21
|
+
function random32() {
|
|
22
|
+
return jspack_1.jspack.Unpack("!L", (0, crypto_1.randomBytes)(4))[0];
|
|
23
|
+
}
|
|
24
|
+
function bufferXor(a, b) {
|
|
25
|
+
if (a.length !== b.length) {
|
|
26
|
+
throw new TypeError("[webrtc-stun] You can not XOR buffers which length are different");
|
|
27
|
+
}
|
|
28
|
+
const length = a.length;
|
|
29
|
+
const buffer = Buffer.allocUnsafe(length);
|
|
30
|
+
for (let i = 0; i < length; i++) {
|
|
31
|
+
buffer[i] = a[i] ^ b[i];
|
|
32
|
+
}
|
|
33
|
+
return buffer;
|
|
34
|
+
}
|
|
35
|
+
function bufferArrayXor(arr) {
|
|
36
|
+
const length = [...arr]
|
|
37
|
+
.sort((a, b) => a.length - b.length)
|
|
38
|
+
.reverse()[0].length;
|
|
39
|
+
const xored = Buffer.allocUnsafe(length);
|
|
40
|
+
for (let i = 0; i < length; i++) {
|
|
41
|
+
xored[i] = 0;
|
|
42
|
+
arr.forEach((buffer) => {
|
|
43
|
+
xored[i] ^= buffer[i] ?? 0;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
return xored;
|
|
47
|
+
}
|
|
48
|
+
class BitWriter {
|
|
49
|
+
constructor(bitLength) {
|
|
50
|
+
Object.defineProperty(this, "bitLength", {
|
|
51
|
+
enumerable: true,
|
|
52
|
+
configurable: true,
|
|
53
|
+
writable: true,
|
|
54
|
+
value: bitLength
|
|
55
|
+
});
|
|
56
|
+
Object.defineProperty(this, "value", {
|
|
57
|
+
enumerable: true,
|
|
58
|
+
configurable: true,
|
|
59
|
+
writable: true,
|
|
60
|
+
value: 0
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
set(size, startIndex, value) {
|
|
64
|
+
value &= (1 << size) - 1;
|
|
65
|
+
this.value |= value << (this.bitLength - size - startIndex);
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
get buffer() {
|
|
69
|
+
const length = Math.ceil(this.bitLength / 8);
|
|
70
|
+
const buf = Buffer.alloc(length);
|
|
71
|
+
buf.writeUIntBE(this.value, 0, length);
|
|
72
|
+
return buf;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.BitWriter = BitWriter;
|
|
76
|
+
class BitWriter2 {
|
|
77
|
+
/**
|
|
78
|
+
* 各valueがオクテットを跨いではならない
|
|
79
|
+
*/
|
|
80
|
+
constructor(
|
|
81
|
+
/**Max 32bit */
|
|
82
|
+
bitLength) {
|
|
83
|
+
Object.defineProperty(this, "bitLength", {
|
|
84
|
+
enumerable: true,
|
|
85
|
+
configurable: true,
|
|
86
|
+
writable: true,
|
|
87
|
+
value: bitLength
|
|
88
|
+
});
|
|
89
|
+
Object.defineProperty(this, "_value", {
|
|
90
|
+
enumerable: true,
|
|
91
|
+
configurable: true,
|
|
92
|
+
writable: true,
|
|
93
|
+
value: 0n
|
|
94
|
+
});
|
|
95
|
+
Object.defineProperty(this, "offset", {
|
|
96
|
+
enumerable: true,
|
|
97
|
+
configurable: true,
|
|
98
|
+
writable: true,
|
|
99
|
+
value: 0n
|
|
100
|
+
});
|
|
101
|
+
if (bitLength > 32) {
|
|
102
|
+
throw new Error();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
set(value, size = 1) {
|
|
106
|
+
let value_b = BigInt(value);
|
|
107
|
+
const size_b = BigInt(size);
|
|
108
|
+
value_b &= (1n << size_b) - 1n;
|
|
109
|
+
this._value |= value_b << (BigInt(this.bitLength) - size_b - this.offset);
|
|
110
|
+
this.offset += size_b;
|
|
111
|
+
return this;
|
|
112
|
+
}
|
|
113
|
+
get value() {
|
|
114
|
+
return Number(this._value);
|
|
115
|
+
}
|
|
116
|
+
get buffer() {
|
|
117
|
+
const length = Math.ceil(this.bitLength / 8);
|
|
118
|
+
const buf = Buffer.alloc(length);
|
|
119
|
+
buf.writeUIntBE(this.value, 0, length);
|
|
120
|
+
return buf;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
exports.BitWriter2 = BitWriter2;
|
|
124
|
+
function getBit(bits, startIndex, length = 1) {
|
|
125
|
+
let bin = bits.toString(2).split("");
|
|
126
|
+
bin = [...Array(8 - bin.length).fill("0"), ...bin];
|
|
127
|
+
const s = bin.slice(startIndex, startIndex + length).join("");
|
|
128
|
+
const v = Number.parseInt(s, 2);
|
|
129
|
+
return v;
|
|
130
|
+
}
|
|
131
|
+
function paddingByte(bits) {
|
|
132
|
+
const dec = bits.toString(2).split("");
|
|
133
|
+
return [...[...Array(8 - dec.length)].map(() => "0"), ...dec].join("");
|
|
134
|
+
}
|
|
135
|
+
function paddingBits(bits, expectLength) {
|
|
136
|
+
const dec = bits.toString(2);
|
|
137
|
+
return [...[...Array(expectLength - dec.length)].map(() => "0"), ...dec].join("");
|
|
138
|
+
}
|
|
139
|
+
function bufferWriter(bytes, values) {
|
|
140
|
+
return createBufferWriter(bytes)(values);
|
|
141
|
+
}
|
|
142
|
+
function createBufferWriter(bytes, singleBuffer) {
|
|
143
|
+
const length = bytes.reduce((acc, cur) => acc + cur, 0);
|
|
144
|
+
const reuseBuffer = singleBuffer ? Buffer.alloc(length) : undefined;
|
|
145
|
+
return (values) => {
|
|
146
|
+
const buf = reuseBuffer || Buffer.alloc(length);
|
|
147
|
+
let offset = 0;
|
|
148
|
+
values.forEach((v, i) => {
|
|
149
|
+
const size = bytes[i];
|
|
150
|
+
if (size === 8)
|
|
151
|
+
buf.writeBigUInt64BE(v, offset);
|
|
152
|
+
else
|
|
153
|
+
buf.writeUIntBE(v, offset, size);
|
|
154
|
+
offset += size;
|
|
155
|
+
});
|
|
156
|
+
return buf;
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
function bufferWriterLE(bytes, values) {
|
|
160
|
+
const length = bytes.reduce((acc, cur) => acc + cur, 0);
|
|
161
|
+
const buf = Buffer.alloc(length);
|
|
162
|
+
let offset = 0;
|
|
163
|
+
values.forEach((v, i) => {
|
|
164
|
+
const size = bytes[i];
|
|
165
|
+
if (size === 8)
|
|
166
|
+
buf.writeBigUInt64LE(v, offset);
|
|
167
|
+
else
|
|
168
|
+
buf.writeUIntLE(v, offset, size);
|
|
169
|
+
offset += size;
|
|
170
|
+
});
|
|
171
|
+
return buf;
|
|
172
|
+
}
|
|
173
|
+
function bufferReader(buf, bytes) {
|
|
174
|
+
let offset = 0;
|
|
175
|
+
return bytes.map((v) => {
|
|
176
|
+
let read;
|
|
177
|
+
if (v === 8) {
|
|
178
|
+
read = buf.readBigUInt64BE(offset);
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
read = buf.readUIntBE(offset, v);
|
|
182
|
+
}
|
|
183
|
+
offset += v;
|
|
184
|
+
return read;
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
class BufferChain {
|
|
188
|
+
constructor(size) {
|
|
189
|
+
Object.defineProperty(this, "buffer", {
|
|
190
|
+
enumerable: true,
|
|
191
|
+
configurable: true,
|
|
192
|
+
writable: true,
|
|
193
|
+
value: void 0
|
|
194
|
+
});
|
|
195
|
+
this.buffer = Buffer.alloc(size);
|
|
196
|
+
}
|
|
197
|
+
writeInt16BE(value, offset) {
|
|
198
|
+
this.buffer.writeInt16BE(value, offset);
|
|
199
|
+
return this;
|
|
200
|
+
}
|
|
201
|
+
writeUInt8(value, offset) {
|
|
202
|
+
this.buffer.writeUInt8(value, offset);
|
|
203
|
+
return this;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
exports.BufferChain = BufferChain;
|
|
207
|
+
const dumpBuffer = (data) => "0x" +
|
|
208
|
+
data
|
|
209
|
+
.toString("hex")
|
|
210
|
+
.replace(/(.)(.)/g, "$1$2 ")
|
|
211
|
+
.split(" ")
|
|
212
|
+
.filter((s) => s != undefined && s.length > 0)
|
|
213
|
+
.join(",0x");
|
|
214
|
+
exports.dumpBuffer = dumpBuffer;
|
|
215
|
+
function buffer2ArrayBuffer(buf) {
|
|
216
|
+
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
|
|
217
|
+
}
|
|
218
|
+
class BitStream {
|
|
219
|
+
constructor(uint8Array) {
|
|
220
|
+
Object.defineProperty(this, "uint8Array", {
|
|
221
|
+
enumerable: true,
|
|
222
|
+
configurable: true,
|
|
223
|
+
writable: true,
|
|
224
|
+
value: uint8Array
|
|
225
|
+
});
|
|
226
|
+
Object.defineProperty(this, "position", {
|
|
227
|
+
enumerable: true,
|
|
228
|
+
configurable: true,
|
|
229
|
+
writable: true,
|
|
230
|
+
value: 0
|
|
231
|
+
});
|
|
232
|
+
Object.defineProperty(this, "bitsPending", {
|
|
233
|
+
enumerable: true,
|
|
234
|
+
configurable: true,
|
|
235
|
+
writable: true,
|
|
236
|
+
value: 0
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
writeBits(bits, value) {
|
|
240
|
+
if (bits == 0) {
|
|
241
|
+
return this;
|
|
242
|
+
}
|
|
243
|
+
value &= 0xffffffff >>> (32 - bits);
|
|
244
|
+
let bitsConsumed;
|
|
245
|
+
if (this.bitsPending > 0) {
|
|
246
|
+
if (this.bitsPending > bits) {
|
|
247
|
+
this.uint8Array[this.position - 1] |=
|
|
248
|
+
value << (this.bitsPending - bits);
|
|
249
|
+
bitsConsumed = bits;
|
|
250
|
+
this.bitsPending -= bits;
|
|
251
|
+
}
|
|
252
|
+
else if (this.bitsPending == bits) {
|
|
253
|
+
this.uint8Array[this.position - 1] |= value;
|
|
254
|
+
bitsConsumed = bits;
|
|
255
|
+
this.bitsPending = 0;
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
this.uint8Array[this.position - 1] |=
|
|
259
|
+
value >> (bits - this.bitsPending);
|
|
260
|
+
// ???
|
|
261
|
+
bitsConsumed = this.bitsPending;
|
|
262
|
+
this.bitsPending = 0;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
bitsConsumed = Math.min(8, bits);
|
|
267
|
+
this.bitsPending = 8 - bitsConsumed;
|
|
268
|
+
this.uint8Array[this.position++] =
|
|
269
|
+
(value >> (bits - bitsConsumed)) << this.bitsPending;
|
|
270
|
+
}
|
|
271
|
+
bits -= bitsConsumed;
|
|
272
|
+
if (bits > 0) {
|
|
273
|
+
this.writeBits(bits, value);
|
|
274
|
+
}
|
|
275
|
+
return this;
|
|
276
|
+
}
|
|
277
|
+
readBits(bits, bitBuffer) {
|
|
278
|
+
if (typeof bitBuffer == "undefined") {
|
|
279
|
+
bitBuffer = 0;
|
|
280
|
+
}
|
|
281
|
+
if (bits == 0) {
|
|
282
|
+
return bitBuffer;
|
|
283
|
+
}
|
|
284
|
+
let partial;
|
|
285
|
+
let bitsConsumed;
|
|
286
|
+
if (this.bitsPending > 0) {
|
|
287
|
+
const byte = this.uint8Array[this.position - 1] & (0xff >> (8 - this.bitsPending));
|
|
288
|
+
bitsConsumed = Math.min(this.bitsPending, bits);
|
|
289
|
+
this.bitsPending -= bitsConsumed;
|
|
290
|
+
partial = byte >> this.bitsPending;
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
bitsConsumed = Math.min(8, bits);
|
|
294
|
+
this.bitsPending = 8 - bitsConsumed;
|
|
295
|
+
partial = this.uint8Array[this.position++] >> this.bitsPending;
|
|
296
|
+
}
|
|
297
|
+
bits -= bitsConsumed;
|
|
298
|
+
bitBuffer = (bitBuffer << bitsConsumed) | partial;
|
|
299
|
+
return bits > 0 ? this.readBits(bits, bitBuffer) : bitBuffer;
|
|
300
|
+
}
|
|
301
|
+
seekTo(bitPos) {
|
|
302
|
+
this.position = (bitPos / 8) | 0;
|
|
303
|
+
this.bitsPending = bitPos % 8;
|
|
304
|
+
if (this.bitsPending > 0) {
|
|
305
|
+
this.bitsPending = 8 - this.bitsPending;
|
|
306
|
+
this.position++;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
exports.BitStream = BitStream;
|
|
311
|
+
//# sourceMappingURL=binary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary.js","sourceRoot":"","sources":["../../../../common/src/binary.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomBytes } from \"crypto\";\nimport { jspack } from \"@shinyoshiaki/jspack\";\n\nexport function random16() {\n return jspack.Unpack(\"!H\", randomBytes(2))[0];\n}\n\nexport function random32() {\n return jspack.Unpack(\"!L\", randomBytes(4))[0];\n}\n\nexport function bufferXor(a: Buffer, b: Buffer): Buffer {\n if (a.length !== b.length) {\n throw new TypeError(\n \"[webrtc-stun] You can not XOR buffers which length are different\",\n );\n }\n\n const length = a.length;\n const buffer = Buffer.allocUnsafe(length);\n\n for (let i = 0; i < length; i++) {\n buffer[i] = a[i] ^ b[i];\n }\n\n return buffer;\n}\n\nexport function bufferArrayXor(arr: Buffer[]): Buffer {\n const length = [...arr]\n .sort((a, b) => a.length - b.length)\n .reverse()[0].length;\n const xored = Buffer.allocUnsafe(length);\n\n for (let i = 0; i < length; i++) {\n xored[i] = 0;\n arr.forEach((buffer) => {\n xored[i] ^= buffer[i] ?? 0;\n });\n }\n\n return xored;\n}\n\nexport class BitWriter {\n value = 0;\n\n constructor(private bitLength: number) {}\n\n set(size: number, startIndex: number, value: number) {\n value &= (1 << size) - 1;\n this.value |= value << (this.bitLength - size - startIndex);\n\n return this;\n }\n\n get buffer() {\n const length = Math.ceil(this.bitLength / 8);\n const buf = Buffer.alloc(length);\n buf.writeUIntBE(this.value, 0, length);\n return buf;\n }\n}\n\nexport class BitWriter2 {\n private _value = 0n;\n offset = 0n;\n\n /**\n * 各valueがオクテットを跨いではならない\n */\n constructor(\n /**Max 32bit */\n private bitLength: number,\n ) {\n if (bitLength > 32) {\n throw new Error();\n }\n }\n\n set(value: number, size: number = 1) {\n let value_b = BigInt(value);\n const size_b = BigInt(size);\n\n value_b &= (1n << size_b) - 1n;\n this._value |= value_b << (BigInt(this.bitLength) - size_b - this.offset);\n this.offset += size_b;\n return this;\n }\n\n get value() {\n return Number(this._value);\n }\n\n get buffer() {\n const length = Math.ceil(this.bitLength / 8);\n const buf = Buffer.alloc(length);\n buf.writeUIntBE(this.value, 0, length);\n return buf;\n }\n}\n\nexport function getBit(bits: number, startIndex: number, length: number = 1) {\n let bin = bits.toString(2).split(\"\");\n bin = [...Array(8 - bin.length).fill(\"0\"), ...bin];\n const s = bin.slice(startIndex, startIndex + length).join(\"\");\n const v = Number.parseInt(s, 2);\n return v;\n}\n\nexport function paddingByte(bits: number) {\n const dec = bits.toString(2).split(\"\");\n return [...[...Array(8 - dec.length)].map(() => \"0\"), ...dec].join(\"\");\n}\n\nexport function paddingBits(bits: number, expectLength: number) {\n const dec = bits.toString(2);\n return [...[...Array(expectLength - dec.length)].map(() => \"0\"), ...dec].join(\n \"\",\n );\n}\n\nexport function bufferWriter(bytes: number[], values: (number | bigint)[]) {\n return createBufferWriter(bytes)(values);\n}\n\nexport function createBufferWriter(bytes: number[], singleBuffer?: boolean) {\n const length = bytes.reduce((acc, cur) => acc + cur, 0);\n const reuseBuffer = singleBuffer ? Buffer.alloc(length) : undefined;\n\n return (values: (number | bigint)[]) => {\n const buf = reuseBuffer || Buffer.alloc(length);\n let offset = 0;\n\n values.forEach((v, i) => {\n const size = bytes[i];\n if (size === 8) buf.writeBigUInt64BE(v as bigint, offset);\n else buf.writeUIntBE(v as number, offset, size);\n offset += size;\n });\n return buf;\n };\n}\n\nexport function bufferWriterLE(bytes: number[], values: (number | bigint)[]) {\n const length = bytes.reduce((acc, cur) => acc + cur, 0);\n const buf = Buffer.alloc(length);\n let offset = 0;\n\n values.forEach((v, i) => {\n const size = bytes[i];\n if (size === 8) buf.writeBigUInt64LE(v as bigint, offset);\n else buf.writeUIntLE(v as number, offset, size);\n\n offset += size;\n });\n return buf;\n}\n\nexport function bufferReader(buf: Buffer, bytes: number[]) {\n let offset = 0;\n return bytes.map((v) => {\n let read: number | bigint;\n if (v === 8) {\n read = buf.readBigUInt64BE(offset);\n } else {\n read = buf.readUIntBE(offset, v);\n }\n\n offset += v;\n\n return read as any;\n });\n}\n\nexport class BufferChain {\n buffer: Buffer;\n\n constructor(size: number) {\n this.buffer = Buffer.alloc(size);\n }\n\n writeInt16BE(value: number, offset?: number | undefined) {\n this.buffer.writeInt16BE(value, offset);\n return this;\n }\n\n writeUInt8(value: number, offset?: number | undefined) {\n this.buffer.writeUInt8(value, offset);\n return this;\n }\n}\n\nexport const dumpBuffer = (data: Buffer) =>\n \"0x\" +\n data\n .toString(\"hex\")\n .replace(/(.)(.)/g, \"$1$2 \")\n .split(\" \")\n .filter((s) => s != undefined && s.length > 0)\n .join(\",0x\");\n\nexport function buffer2ArrayBuffer(buf: Buffer) {\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n}\n\nexport class BitStream {\n private position = 0;\n private bitsPending = 0;\n\n constructor(public uint8Array: Buffer) {}\n\n writeBits(bits: number, value: number): BitStream {\n if (bits == 0) {\n return this;\n }\n value &= 0xffffffff >>> (32 - bits);\n let bitsConsumed;\n if (this.bitsPending > 0) {\n if (this.bitsPending > bits) {\n this.uint8Array[this.position - 1] |=\n value << (this.bitsPending - bits);\n bitsConsumed = bits;\n this.bitsPending -= bits;\n } else if (this.bitsPending == bits) {\n this.uint8Array[this.position - 1] |= value;\n bitsConsumed = bits;\n this.bitsPending = 0;\n } else {\n this.uint8Array[this.position - 1] |=\n value >> (bits - this.bitsPending);\n // ???\n bitsConsumed = this.bitsPending;\n this.bitsPending = 0;\n }\n } else {\n bitsConsumed = Math.min(8, bits);\n this.bitsPending = 8 - bitsConsumed;\n this.uint8Array[this.position++] =\n (value >> (bits - bitsConsumed)) << this.bitsPending;\n }\n bits -= bitsConsumed;\n if (bits > 0) {\n this.writeBits(bits, value);\n }\n\n return this;\n }\n\n readBits(bits: number, bitBuffer?: number): any {\n if (typeof bitBuffer == \"undefined\") {\n bitBuffer = 0;\n }\n if (bits == 0) {\n return bitBuffer;\n }\n let partial: number;\n let bitsConsumed: number;\n if (this.bitsPending > 0) {\n const byte =\n this.uint8Array[this.position - 1] & (0xff >> (8 - this.bitsPending));\n bitsConsumed = Math.min(this.bitsPending, bits);\n this.bitsPending -= bitsConsumed;\n partial = byte >> this.bitsPending;\n } else {\n bitsConsumed = Math.min(8, bits);\n this.bitsPending = 8 - bitsConsumed;\n partial = this.uint8Array[this.position++] >> this.bitsPending;\n }\n bits -= bitsConsumed;\n bitBuffer = (bitBuffer << bitsConsumed) | partial;\n return bits > 0 ? this.readBits(bits, bitBuffer) : bitBuffer;\n }\n\n seekTo(bitPos: number) {\n this.position = (bitPos / 8) | 0;\n this.bitsPending = bitPos % 8;\n if (this.bitsPending > 0) {\n this.bitsPending = 8 - this.bitsPending;\n this.position++;\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
type EventExecute<T extends any[]> = (...args: T) => void;
|
|
2
|
+
type PromiseEventExecute<T extends any[]> = (...args: T) => Promise<void>;
|
|
3
|
+
type EventComplete = () => void;
|
|
4
|
+
type EventError = (e: any) => void;
|
|
5
|
+
export declare class Event<T extends any[]> {
|
|
6
|
+
private event;
|
|
7
|
+
ended: boolean;
|
|
8
|
+
onended?: () => void;
|
|
9
|
+
onerror: (e: any) => void;
|
|
10
|
+
execute: (...args: T) => void;
|
|
11
|
+
complete: () => void;
|
|
12
|
+
error: (e: any) => void;
|
|
13
|
+
allUnsubscribe: () => void;
|
|
14
|
+
subscribe: (execute: EventExecute<T>, complete?: EventComplete, error?: EventError) => {
|
|
15
|
+
unSubscribe: () => void;
|
|
16
|
+
disposer: (disposer: EventDisposer) => void;
|
|
17
|
+
};
|
|
18
|
+
queuingSubscribe: (execute: PromiseEventExecute<T>, complete?: EventComplete, error?: EventError) => {
|
|
19
|
+
unSubscribe: () => void;
|
|
20
|
+
disposer: (disposer: EventDisposer) => void;
|
|
21
|
+
};
|
|
22
|
+
once: (execute: EventExecute<T>, complete?: EventComplete, error?: EventError) => void;
|
|
23
|
+
watch: (cb: (...args: T) => boolean, timeLimit?: number) => Promise<T>;
|
|
24
|
+
asPromise: (timeLimit?: number) => Promise<T>;
|
|
25
|
+
get returnTrigger(): {
|
|
26
|
+
execute: (...args: T) => void;
|
|
27
|
+
error: (e: any) => void;
|
|
28
|
+
complete: () => void;
|
|
29
|
+
};
|
|
30
|
+
get returnListener(): {
|
|
31
|
+
subscribe: (execute: EventExecute<T>, complete?: EventComplete, error?: EventError) => {
|
|
32
|
+
unSubscribe: () => void;
|
|
33
|
+
disposer: (disposer: EventDisposer) => void;
|
|
34
|
+
};
|
|
35
|
+
once: (execute: EventExecute<T>, complete?: EventComplete, error?: EventError) => void;
|
|
36
|
+
asPromise: (timeLimit?: number) => Promise<T>;
|
|
37
|
+
};
|
|
38
|
+
get length(): number;
|
|
39
|
+
}
|
|
40
|
+
export declare class EventDisposer {
|
|
41
|
+
private _disposer;
|
|
42
|
+
push(disposer: () => void): void;
|
|
43
|
+
dispose(): void;
|
|
44
|
+
}
|
|
45
|
+
export {};
|