werift 0.20.0 → 0.20.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.
- package/lib/common/src/event.d.ts +45 -0
- package/lib/common/src/event.js +232 -0
- package/lib/common/src/event.js.map +1 -0
- package/lib/common/src/index.d.ts +1 -0
- package/lib/common/src/index.js +1 -0
- package/lib/common/src/index.js.map +1 -1
- package/lib/dtls/src/flight/client/flight5.js +6 -1
- package/lib/dtls/src/flight/client/flight5.js.map +1 -1
- package/lib/dtls/src/imports/common.d.ts +1 -0
- package/lib/dtls/src/imports/common.js +18 -0
- package/lib/dtls/src/imports/common.js.map +1 -0
- package/lib/dtls/src/socket.d.ts +1 -1
- package/lib/dtls/src/socket.js +5 -5
- package/lib/dtls/src/socket.js.map +1 -1
- package/lib/ice/src/candidate.d.ts +1 -1
- package/lib/ice/src/candidate.js +2 -1
- package/lib/ice/src/candidate.js.map +1 -1
- package/lib/ice/src/helper.js +2 -2
- package/lib/ice/src/helper.js.map +1 -1
- package/lib/ice/src/ice.d.ts +10 -5
- package/lib/ice/src/ice.js +46 -16
- package/lib/ice/src/ice.js.map +1 -1
- package/lib/ice/src/imports/common.d.ts +1 -0
- package/lib/ice/src/imports/common.js +18 -0
- package/lib/ice/src/imports/common.js.map +1 -0
- package/lib/ice/src/index.d.ts +4 -0
- package/lib/ice/src/index.js +4 -0
- package/lib/ice/src/index.js.map +1 -1
- package/lib/ice/src/stun/message.d.ts +1 -0
- package/lib/ice/src/stun/message.js +16 -6
- package/lib/ice/src/stun/message.js.map +1 -1
- package/lib/ice/src/stun/protocol.d.ts +3 -2
- package/lib/ice/src/stun/protocol.js +13 -7
- package/lib/ice/src/stun/protocol.js.map +1 -1
- package/lib/ice/src/stun/transaction.js +4 -3
- package/lib/ice/src/stun/transaction.js.map +1 -1
- package/lib/ice/src/transport.d.ts +21 -4
- package/lib/ice/src/transport.js +115 -7
- package/lib/ice/src/transport.js.map +1 -1
- package/lib/ice/src/turn/protocol.d.ts +52 -36
- package/lib/ice/src/turn/protocol.js +183 -76
- package/lib/ice/src/turn/protocol.js.map +1 -1
- package/lib/ice/src/types/model.d.ts +5 -5
- package/lib/ice/src/types/model.js.map +1 -1
- package/lib/ice/src/utils.d.ts +1 -0
- package/lib/ice/src/utils.js +15 -16
- package/lib/ice/src/utils.js.map +1 -1
- package/lib/rtp/src/extra/container/mp4/container.d.ts +1 -1
- package/lib/rtp/src/extra/container/mp4/container.js +2 -5
- package/lib/rtp/src/extra/container/mp4/container.js.map +1 -1
- package/lib/rtp/src/extra/processor/depacketizer.d.ts +1 -1
- package/lib/rtp/src/extra/processor/depacketizer.js +2 -2
- package/lib/rtp/src/extra/processor/depacketizer.js.map +1 -1
- package/lib/rtp/src/extra/processor/mp4.d.ts +1 -1
- package/lib/rtp/src/extra/processor/mp4.js +2 -5
- package/lib/rtp/src/extra/processor/mp4.js.map +1 -1
- package/lib/rtp/src/extra/processor/nack.d.ts +1 -1
- package/lib/rtp/src/extra/processor/nack.js +3 -3
- package/lib/rtp/src/extra/processor/nack.js.map +1 -1
- package/lib/rtp/src/extra/processor/rtcpCallback.d.ts +1 -1
- package/lib/rtp/src/extra/processor/rtcpCallback.js +2 -5
- package/lib/rtp/src/extra/processor/rtcpCallback.js.map +1 -1
- package/lib/rtp/src/extra/processor/rtpCallback.d.ts +1 -1
- package/lib/rtp/src/extra/processor/rtpCallback.js +2 -5
- package/lib/rtp/src/extra/processor/rtpCallback.js.map +1 -1
- package/lib/rtp/src/extra/processor/webm.d.ts +1 -1
- package/lib/rtp/src/extra/processor/webm.js +2 -5
- package/lib/rtp/src/extra/processor/webm.js.map +1 -1
- package/lib/rtp/src/imports/common.d.ts +1 -0
- package/lib/rtp/src/imports/common.js +18 -0
- package/lib/rtp/src/imports/common.js.map +1 -0
- package/lib/sctp/src/helper.js +2 -5
- package/lib/sctp/src/helper.js.map +1 -1
- 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/sctp/src/sctp.d.ts +1 -1
- package/lib/sctp/src/sctp.js +3 -3
- package/lib/sctp/src/sctp.js.map +1 -1
- package/lib/webrtc/src/dataChannel.d.ts +1 -1
- package/lib/webrtc/src/dataChannel.js +5 -5
- package/lib/webrtc/src/dataChannel.js.map +1 -1
- package/lib/webrtc/src/imports/common.d.ts +1 -0
- package/lib/webrtc/src/imports/common.js +18 -0
- package/lib/webrtc/src/imports/common.js.map +1 -0
- package/lib/webrtc/src/media/receiver/nack.d.ts +1 -1
- package/lib/webrtc/src/media/receiver/nack.js +2 -2
- package/lib/webrtc/src/media/receiver/nack.js.map +1 -1
- package/lib/webrtc/src/media/rtpReceiver.d.ts +2 -2
- package/lib/webrtc/src/media/rtpReceiver.js +2 -5
- package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
- package/lib/webrtc/src/media/rtpSender.d.ts +1 -1
- package/lib/webrtc/src/media/rtpSender.js +5 -5
- package/lib/webrtc/src/media/rtpSender.js.map +1 -1
- package/lib/webrtc/src/media/rtpTransceiver.d.ts +1 -1
- package/lib/webrtc/src/media/rtpTransceiver.js +2 -5
- package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
- package/lib/webrtc/src/media/sender/senderBWE.d.ts +1 -1
- package/lib/webrtc/src/media/sender/senderBWE.js +4 -7
- package/lib/webrtc/src/media/sender/senderBWE.js.map +1 -1
- package/lib/webrtc/src/media/track.d.ts +1 -1
- package/lib/webrtc/src/media/track.js +4 -7
- package/lib/webrtc/src/media/track.js.map +1 -1
- package/lib/webrtc/src/nonstandard/recorder/index.d.ts +2 -1
- package/lib/webrtc/src/nonstandard/recorder/index.js +2 -5
- package/lib/webrtc/src/nonstandard/recorder/index.js.map +1 -1
- package/lib/webrtc/src/nonstandard/recorder/writer/index.d.ts +1 -1
- package/lib/webrtc/src/nonstandard/recorder/writer/index.js.map +1 -1
- package/lib/webrtc/src/nonstandard/recorder/writer/webm.d.ts +1 -1
- package/lib/webrtc/src/nonstandard/recorder/writer/webm.js +2 -2
- package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
- package/lib/webrtc/src/peerConnection.d.ts +3 -2
- package/lib/webrtc/src/peerConnection.js +13 -11
- package/lib/webrtc/src/peerConnection.js.map +1 -1
- package/lib/webrtc/src/transport/dtls.d.ts +1 -1
- package/lib/webrtc/src/transport/dtls.js +12 -8
- package/lib/webrtc/src/transport/dtls.js.map +1 -1
- package/lib/webrtc/src/transport/ice.d.ts +2 -2
- package/lib/webrtc/src/transport/ice.js +10 -7
- package/lib/webrtc/src/transport/ice.js.map +1 -1
- package/lib/webrtc/src/transport/sctp.d.ts +1 -1
- package/lib/webrtc/src/transport/sctp.js +2 -2
- package/lib/webrtc/src/transport/sctp.js.map +1 -1
- package/package.json +1 -1
- package/src/dataChannel.ts +1 -1
- package/src/imports/common.ts +1 -0
- package/src/media/receiver/nack.ts +1 -1
- package/src/media/rtpReceiver.ts +1 -1
- package/src/media/rtpSender.ts +1 -1
- package/src/media/rtpTransceiver.ts +1 -1
- package/src/media/sender/senderBWE.ts +1 -1
- package/src/media/track.ts +1 -1
- package/src/nonstandard/recorder/index.ts +3 -1
- package/src/nonstandard/recorder/writer/index.ts +1 -1
- package/src/nonstandard/recorder/writer/webm.ts +1 -1
- package/src/peerConnection.ts +4 -1
- package/src/transport/dtls.ts +11 -5
- package/src/transport/ice.ts +9 -4
- package/src/transport/sctp.ts +1 -1
|
@@ -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 {};
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EventDisposer = exports.Event = void 0;
|
|
4
|
+
class Event {
|
|
5
|
+
constructor() {
|
|
6
|
+
Object.defineProperty(this, "event", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
writable: true,
|
|
10
|
+
value: {
|
|
11
|
+
stack: [],
|
|
12
|
+
promiseStack: [],
|
|
13
|
+
eventId: 0,
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
Object.defineProperty(this, "ended", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
configurable: true,
|
|
19
|
+
writable: true,
|
|
20
|
+
value: false
|
|
21
|
+
});
|
|
22
|
+
Object.defineProperty(this, "onended", {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
writable: true,
|
|
26
|
+
value: void 0
|
|
27
|
+
});
|
|
28
|
+
Object.defineProperty(this, "onerror", {
|
|
29
|
+
enumerable: true,
|
|
30
|
+
configurable: true,
|
|
31
|
+
writable: true,
|
|
32
|
+
value: (e) => { }
|
|
33
|
+
});
|
|
34
|
+
Object.defineProperty(this, "execute", {
|
|
35
|
+
enumerable: true,
|
|
36
|
+
configurable: true,
|
|
37
|
+
writable: true,
|
|
38
|
+
value: (...args) => {
|
|
39
|
+
if (this.ended) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
for (const item of this.event.stack) {
|
|
43
|
+
item.execute(...args);
|
|
44
|
+
}
|
|
45
|
+
(async () => {
|
|
46
|
+
for (const item of this.event.promiseStack) {
|
|
47
|
+
await item.execute(...args);
|
|
48
|
+
}
|
|
49
|
+
})().catch((e) => {
|
|
50
|
+
this.onerror(e);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
Object.defineProperty(this, "complete", {
|
|
55
|
+
enumerable: true,
|
|
56
|
+
configurable: true,
|
|
57
|
+
writable: true,
|
|
58
|
+
value: () => {
|
|
59
|
+
if (this.ended) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
for (const item of this.event.stack) {
|
|
63
|
+
if (item.complete) {
|
|
64
|
+
item.complete();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
this.allUnsubscribe();
|
|
68
|
+
this.ended = true;
|
|
69
|
+
if (this.onended) {
|
|
70
|
+
this.onended();
|
|
71
|
+
this.onended = undefined;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
Object.defineProperty(this, "error", {
|
|
76
|
+
enumerable: true,
|
|
77
|
+
configurable: true,
|
|
78
|
+
writable: true,
|
|
79
|
+
value: (e) => {
|
|
80
|
+
if (this.ended) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
for (const item of this.event.stack) {
|
|
84
|
+
if (item.error) {
|
|
85
|
+
item.error(e);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
this.allUnsubscribe();
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
Object.defineProperty(this, "allUnsubscribe", {
|
|
92
|
+
enumerable: true,
|
|
93
|
+
configurable: true,
|
|
94
|
+
writable: true,
|
|
95
|
+
value: () => {
|
|
96
|
+
if (this.ended) {
|
|
97
|
+
throw new Error("event completed");
|
|
98
|
+
}
|
|
99
|
+
this.event = {
|
|
100
|
+
stack: [],
|
|
101
|
+
promiseStack: [],
|
|
102
|
+
eventId: 0,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
Object.defineProperty(this, "subscribe", {
|
|
107
|
+
enumerable: true,
|
|
108
|
+
configurable: true,
|
|
109
|
+
writable: true,
|
|
110
|
+
value: (execute, complete, error) => {
|
|
111
|
+
if (this.ended) {
|
|
112
|
+
throw new Error("event completed");
|
|
113
|
+
}
|
|
114
|
+
const id = this.event.eventId;
|
|
115
|
+
this.event.stack.push({ execute, id, complete, error });
|
|
116
|
+
this.event.eventId++;
|
|
117
|
+
const unSubscribe = () => {
|
|
118
|
+
this.event.stack = this.event.stack.filter((item) => item.id !== id && item);
|
|
119
|
+
};
|
|
120
|
+
const disposer = (disposer) => {
|
|
121
|
+
disposer.push(unSubscribe);
|
|
122
|
+
};
|
|
123
|
+
return { unSubscribe, disposer };
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
Object.defineProperty(this, "queuingSubscribe", {
|
|
127
|
+
enumerable: true,
|
|
128
|
+
configurable: true,
|
|
129
|
+
writable: true,
|
|
130
|
+
value: (execute, complete, error) => {
|
|
131
|
+
if (this.ended)
|
|
132
|
+
throw new Error("event completed");
|
|
133
|
+
const id = this.event.eventId;
|
|
134
|
+
this.event.promiseStack.push({ execute, id, complete, error });
|
|
135
|
+
this.event.eventId++;
|
|
136
|
+
const unSubscribe = () => {
|
|
137
|
+
this.event.stack = this.event.stack.filter((item) => item.id !== id && item);
|
|
138
|
+
};
|
|
139
|
+
const disposer = (disposer) => {
|
|
140
|
+
disposer.push(unSubscribe);
|
|
141
|
+
};
|
|
142
|
+
return { unSubscribe, disposer };
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
Object.defineProperty(this, "once", {
|
|
146
|
+
enumerable: true,
|
|
147
|
+
configurable: true,
|
|
148
|
+
writable: true,
|
|
149
|
+
value: (execute, complete, error) => {
|
|
150
|
+
const off = this.subscribe((...args) => {
|
|
151
|
+
off.unSubscribe();
|
|
152
|
+
execute(...args);
|
|
153
|
+
}, complete, error);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
Object.defineProperty(this, "watch", {
|
|
157
|
+
enumerable: true,
|
|
158
|
+
configurable: true,
|
|
159
|
+
writable: true,
|
|
160
|
+
value: (cb, timeLimit) => new Promise((resolve, reject) => {
|
|
161
|
+
const timeout = timeLimit &&
|
|
162
|
+
setTimeout(() => {
|
|
163
|
+
reject("Event watch timeout");
|
|
164
|
+
}, timeLimit);
|
|
165
|
+
const { unSubscribe } = this.subscribe((...args) => {
|
|
166
|
+
const done = cb(...args);
|
|
167
|
+
if (done) {
|
|
168
|
+
if (timeout)
|
|
169
|
+
clearTimeout(timeout);
|
|
170
|
+
unSubscribe();
|
|
171
|
+
resolve(args);
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
})
|
|
175
|
+
});
|
|
176
|
+
Object.defineProperty(this, "asPromise", {
|
|
177
|
+
enumerable: true,
|
|
178
|
+
configurable: true,
|
|
179
|
+
writable: true,
|
|
180
|
+
value: (timeLimit) => new Promise((resolve, reject) => {
|
|
181
|
+
const timeout = timeLimit &&
|
|
182
|
+
setTimeout(() => {
|
|
183
|
+
reject("Event asPromise timeout");
|
|
184
|
+
}, timeLimit);
|
|
185
|
+
this.once((...args) => {
|
|
186
|
+
if (timeout)
|
|
187
|
+
clearTimeout(timeout);
|
|
188
|
+
resolve(args);
|
|
189
|
+
}, () => {
|
|
190
|
+
if (timeout)
|
|
191
|
+
clearTimeout(timeout);
|
|
192
|
+
resolve([]);
|
|
193
|
+
}, (err) => {
|
|
194
|
+
if (timeout)
|
|
195
|
+
clearTimeout(timeout);
|
|
196
|
+
reject(err);
|
|
197
|
+
});
|
|
198
|
+
})
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
get returnTrigger() {
|
|
202
|
+
const { execute, error, complete } = this;
|
|
203
|
+
return { execute, error, complete };
|
|
204
|
+
}
|
|
205
|
+
get returnListener() {
|
|
206
|
+
const { subscribe, once, asPromise } = this;
|
|
207
|
+
return { subscribe, once, asPromise };
|
|
208
|
+
}
|
|
209
|
+
get length() {
|
|
210
|
+
return this.event.stack.length;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
exports.Event = Event;
|
|
214
|
+
class EventDisposer {
|
|
215
|
+
constructor() {
|
|
216
|
+
Object.defineProperty(this, "_disposer", {
|
|
217
|
+
enumerable: true,
|
|
218
|
+
configurable: true,
|
|
219
|
+
writable: true,
|
|
220
|
+
value: []
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
push(disposer) {
|
|
224
|
+
this._disposer.push(disposer);
|
|
225
|
+
}
|
|
226
|
+
dispose() {
|
|
227
|
+
this._disposer.forEach((d) => d());
|
|
228
|
+
this._disposer = [];
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
exports.EventDisposer = EventDisposer;
|
|
232
|
+
//# sourceMappingURL=event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.js","sourceRoot":"","sources":["../../../../common/src/event.ts"],"names":[],"mappings":";;;AAoBA,MAAa,KAAK;IAAlB;QACU;;;;mBAAmB;gBACzB,KAAK,EAAE,EAAE;gBACT,YAAY,EAAE,EAAE;gBAChB,OAAO,EAAE,CAAC;aACX;WAAC;QACF;;;;mBAAQ,KAAK;WAAC;QACd;;;;;WAAqB;QACrB;;;;mBAAU,CAAC,CAAM,EAAE,EAAE,GAAE,CAAC;WAAC;QAEzB;;;;mBAAU,CAAC,GAAG,IAAO,EAAE,EAAE;gBACvB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACf,OAAO;gBACT,CAAC;gBAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;oBACpC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;gBACxB,CAAC;gBAED,CAAC,KAAK,IAAI,EAAE;oBACV,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;wBAC3C,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC9B,CAAC;gBACH,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;oBACf,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC,CAAC,CAAC;YACL,CAAC;WAAC;QAEF;;;;mBAAW,GAAG,EAAE;gBACd,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACf,OAAO;gBACT,CAAC;gBAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;oBACpC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;wBAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAClB,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;gBAClB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,IAAI,CAAC,OAAO,EAAE,CAAC;oBACf,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;gBAC3B,CAAC;YACH,CAAC;WAAC;QAEF;;;;mBAAQ,CAAC,CAAM,EAAE,EAAE;gBACjB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACf,OAAO;gBACT,CAAC;gBAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;oBACpC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;wBACf,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAChB,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,CAAC;WAAC;QAEF;;;;mBAAiB,GAAG,EAAE;gBACpB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBACrC,CAAC;gBAED,IAAI,CAAC,KAAK,GAAG;oBACX,KAAK,EAAE,EAAE;oBACT,YAAY,EAAE,EAAE;oBAChB,OAAO,EAAE,CAAC;iBACX,CAAC;YACJ,CAAC;WAAC;QAEF;;;;mBAAY,CACV,OAAwB,EACxB,QAAwB,EACxB,KAAkB,EAClB,EAAE;gBACF,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBACrC,CAAC;gBAED,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC9B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;gBACxD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBAErB,MAAM,WAAW,GAAG,GAAG,EAAE;oBACvB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CACxC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,IAAI,CACjC,CAAC;gBACJ,CAAC,CAAC;gBAEF,MAAM,QAAQ,GAAG,CAAC,QAAuB,EAAE,EAAE;oBAC3C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC7B,CAAC,CAAC;gBAEF,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;YACnC,CAAC;WAAC;QAEF;;;;mBAAmB,CACjB,OAA+B,EAC/B,QAAwB,EACxB,KAAkB,EAClB,EAAE;gBACF,IAAI,IAAI,CAAC,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBAEnD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC9B,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC/D,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBAErB,MAAM,WAAW,GAAG,GAAG,EAAE;oBACvB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CACxC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,IAAI,CACjC,CAAC;gBACJ,CAAC,CAAC;gBAEF,MAAM,QAAQ,GAAG,CAAC,QAAuB,EAAE,EAAE;oBAC3C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC7B,CAAC,CAAC;gBAEF,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;YACnC,CAAC;WAAC;QAEF;;;;mBAAO,CACL,OAAwB,EACxB,QAAwB,EACxB,KAAkB,EAClB,EAAE;gBACF,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CACxB,CAAC,GAAG,IAAI,EAAE,EAAE;oBACV,GAAG,CAAC,WAAW,EAAE,CAAC;oBAClB,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;gBACnB,CAAC,EACD,QAAQ,EACR,KAAK,CACN,CAAC;YACJ,CAAC;WAAC;QAEF;;;;mBAAQ,CAAC,EAA2B,EAAE,SAAkB,EAAE,EAAE,CAC1D,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACjC,MAAM,OAAO,GACX,SAAS;oBACT,UAAU,CAAC,GAAG,EAAE;wBACd,MAAM,CAAC,qBAAqB,CAAC,CAAC;oBAChC,CAAC,EAAE,SAAS,CAAC,CAAC;gBAEhB,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE;oBACjD,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;oBACzB,IAAI,IAAI,EAAE,CAAC;wBACT,IAAI,OAAO;4BAAE,YAAY,CAAC,OAAO,CAAC,CAAC;wBACnC,WAAW,EAAE,CAAC;wBACd,OAAO,CAAC,IAAI,CAAC,CAAC;oBAChB,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;WAAC;QAEL;;;;mBAAY,CAAC,SAAkB,EAAE,EAAE,CACjC,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACjC,MAAM,OAAO,GACX,SAAS;oBACT,UAAU,CAAC,GAAG,EAAE;wBACd,MAAM,CAAC,yBAAyB,CAAC,CAAC;oBACpC,CAAC,EAAE,SAAS,CAAC,CAAC;gBAEhB,IAAI,CAAC,IAAI,CACP,CAAC,GAAG,IAAI,EAAE,EAAE;oBACV,IAAI,OAAO;wBAAE,YAAY,CAAC,OAAO,CAAC,CAAC;oBACnC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC,EACD,GAAG,EAAE;oBACH,IAAI,OAAO;wBAAE,YAAY,CAAC,OAAO,CAAC,CAAC;oBACnC,OAAO,CAAC,EAAS,CAAC,CAAC;gBACrB,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;oBACN,IAAI,OAAO;wBAAE,YAAY,CAAC,OAAO,CAAC,CAAC;oBACnC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC,CACF,CAAC;YACJ,CAAC,CAAC;WAAC;IAeP,CAAC;IAbC,IAAI,aAAa;QACf,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAC1C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IACtC,CAAC;IAED,IAAI,cAAc;QAChB,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAC5C,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACxC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;IACjC,CAAC;CACF;AA/LD,sBA+LC;AAED,MAAa,aAAa;IAA1B;QACU;;;;mBAA4B,EAAE;WAAC;IAUzC,CAAC;IARC,IAAI,CAAC,QAAoB;QACvB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,OAAO;QACL,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;CACF;AAXD,sCAWC","sourcesContent":["type EventExecute<T extends any[]> = (...args: T) => void;\ntype PromiseEventExecute<T extends any[]> = (...args: T) => Promise<void>;\ntype EventComplete = () => void;\ntype EventError = (e: any) => void;\ntype IEvent<T extends any[]> = {\n stack: {\n execute: EventExecute<T>;\n complete?: EventComplete;\n error?: EventError;\n id: number;\n }[];\n promiseStack: {\n execute: PromiseEventExecute<T>;\n complete?: EventComplete;\n error?: EventError;\n id: number;\n }[];\n eventId: number;\n};\n\nexport class Event<T extends any[]> {\n private event: IEvent<T> = {\n stack: [],\n promiseStack: [],\n eventId: 0,\n };\n ended = false;\n onended?: () => void;\n onerror = (e: any) => {};\n\n execute = (...args: T) => {\n if (this.ended) {\n return;\n }\n\n for (const item of this.event.stack) {\n item.execute(...args);\n }\n\n (async () => {\n for (const item of this.event.promiseStack) {\n await item.execute(...args);\n }\n })().catch((e) => {\n this.onerror(e);\n });\n };\n\n complete = () => {\n if (this.ended) {\n return;\n }\n\n for (const item of this.event.stack) {\n if (item.complete) {\n item.complete();\n }\n }\n this.allUnsubscribe();\n this.ended = true;\n if (this.onended) {\n this.onended();\n this.onended = undefined;\n }\n };\n\n error = (e: any) => {\n if (this.ended) {\n return;\n }\n\n for (const item of this.event.stack) {\n if (item.error) {\n item.error(e);\n }\n }\n this.allUnsubscribe();\n };\n\n allUnsubscribe = () => {\n if (this.ended) {\n throw new Error(\"event completed\");\n }\n\n this.event = {\n stack: [],\n promiseStack: [],\n eventId: 0,\n };\n };\n\n subscribe = (\n execute: EventExecute<T>,\n complete?: EventComplete,\n error?: EventError,\n ) => {\n if (this.ended) {\n throw new Error(\"event completed\");\n }\n\n const id = this.event.eventId;\n this.event.stack.push({ execute, id, complete, error });\n this.event.eventId++;\n\n const unSubscribe = () => {\n this.event.stack = this.event.stack.filter(\n (item) => item.id !== id && item,\n );\n };\n\n const disposer = (disposer: EventDisposer) => {\n disposer.push(unSubscribe);\n };\n\n return { unSubscribe, disposer };\n };\n\n queuingSubscribe = (\n execute: PromiseEventExecute<T>,\n complete?: EventComplete,\n error?: EventError,\n ) => {\n if (this.ended) throw new Error(\"event completed\");\n\n const id = this.event.eventId;\n this.event.promiseStack.push({ execute, id, complete, error });\n this.event.eventId++;\n\n const unSubscribe = () => {\n this.event.stack = this.event.stack.filter(\n (item) => item.id !== id && item,\n );\n };\n\n const disposer = (disposer: EventDisposer) => {\n disposer.push(unSubscribe);\n };\n\n return { unSubscribe, disposer };\n };\n\n once = (\n execute: EventExecute<T>,\n complete?: EventComplete,\n error?: EventError,\n ) => {\n const off = this.subscribe(\n (...args) => {\n off.unSubscribe();\n execute(...args);\n },\n complete,\n error,\n );\n };\n\n watch = (cb: (...args: T) => boolean, timeLimit?: number) =>\n new Promise<T>((resolve, reject) => {\n const timeout =\n timeLimit &&\n setTimeout(() => {\n reject(\"Event watch timeout\");\n }, timeLimit);\n\n const { unSubscribe } = this.subscribe((...args) => {\n const done = cb(...args);\n if (done) {\n if (timeout) clearTimeout(timeout);\n unSubscribe();\n resolve(args);\n }\n });\n });\n\n asPromise = (timeLimit?: number) =>\n new Promise<T>((resolve, reject) => {\n const timeout =\n timeLimit &&\n setTimeout(() => {\n reject(\"Event asPromise timeout\");\n }, timeLimit);\n\n this.once(\n (...args) => {\n if (timeout) clearTimeout(timeout);\n resolve(args);\n },\n () => {\n if (timeout) clearTimeout(timeout);\n resolve([] as any);\n },\n (err) => {\n if (timeout) clearTimeout(timeout);\n reject(err);\n },\n );\n });\n\n get returnTrigger() {\n const { execute, error, complete } = this;\n return { execute, error, complete };\n }\n\n get returnListener() {\n const { subscribe, once, asPromise } = this;\n return { subscribe, once, asPromise };\n }\n\n get length() {\n return this.event.stack.length;\n }\n}\n\nexport class EventDisposer {\n private _disposer: (() => void)[] = [];\n\n push(disposer: () => void) {\n this._disposer.push(disposer);\n }\n\n dispose() {\n this._disposer.forEach((d) => d());\n this._disposer = [];\n }\n}\n"]}
|
package/lib/common/src/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../common/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,2CAAyB;AACzB,4CAA0B;AAC1B,4CAA0B;AAC1B,yCAAuB;AACvB,wCAAsB","sourcesContent":["export * from \"./binary\";\nexport * from \"./number\";\nexport * from \"./promise\";\nexport * from \"./network\";\nexport * from \"./type\";\nexport * from \"./log\";\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../common/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,2CAAyB;AACzB,4CAA0B;AAC1B,4CAA0B;AAC1B,yCAAuB;AACvB,wCAAsB;AACtB,0CAAwB","sourcesContent":["export * from \"./binary\";\nexport * from \"./number\";\nexport * from \"./promise\";\nexport * from \"./network\";\nexport * from \"./type\";\nexport * from \"./log\";\nexport * from \"./event\";\n"]}
|
|
@@ -147,7 +147,12 @@ class Flight5 extends flight_1.Flight {
|
|
|
147
147
|
const finish = new finished_1.Finished(localVerifyData);
|
|
148
148
|
this.dtls.epoch = 1;
|
|
149
149
|
const [packet] = this.createPacket([finish]);
|
|
150
|
-
log(
|
|
150
|
+
// log(
|
|
151
|
+
// this.dtls.sessionId,
|
|
152
|
+
// "raw finish packet",
|
|
153
|
+
// packet.summary,
|
|
154
|
+
// this.dtls.sortedHandshakeCache.map((h) => h.summary),
|
|
155
|
+
// );
|
|
151
156
|
this.dtls.recordSequenceNumber = 0;
|
|
152
157
|
const buf = this.cipher.encryptPacket(packet).serialize();
|
|
153
158
|
log(this.dtls.sessionId, "finished", this.cipher.cipher.summary);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flight5.js","sourceRoot":"","sources":["../../../../../../dtls/src/flight/client/flight5.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\n\nimport { SignatureAlgorithm, SignatureScheme } from \"../../cipher/const\";\nimport { createCipher } from \"../../cipher/create\";\nimport { generateKeyPair } from \"../../cipher/namedCurve\";\nimport {\n prfExtendedMasterSecret,\n prfMasterSecret,\n prfPreMasterSecret,\n} from \"../../cipher/prf\";\nimport type { CipherContext } from \"../../context/cipher\";\nimport type { DtlsContext } from \"../../context/dtls\";\nimport { type Profile, SrtpContext } from \"../../context/srtp\";\nimport type { TransportContext } from \"../../context/transport\";\nimport { HandshakeType } from \"../../handshake/const\";\nimport { ExtendedMasterSecret } from \"../../handshake/extensions/extendedMasterSecret\";\nimport { RenegotiationIndication } from \"../../handshake/extensions/renegotiationIndication\";\nimport { UseSRTP } from \"../../handshake/extensions/useSrtp\";\nimport { Certificate } from \"../../handshake/message/certificate\";\nimport { ChangeCipherSpec } from \"../../handshake/message/changeCipherSpec\";\nimport { CertificateVerify } from \"../../handshake/message/client/certificateVerify\";\nimport { ClientKeyExchange } from \"../../handshake/message/client/keyExchange\";\nimport { Finished } from \"../../handshake/message/finished\";\nimport { ServerCertificateRequest } from \"../../handshake/message/server/certificateRequest\";\nimport { ServerHello } from \"../../handshake/message/server/hello\";\nimport { ServerHelloDone } from \"../../handshake/message/server/helloDone\";\nimport { ServerKeyExchange } from \"../../handshake/message/server/keyExchange\";\nimport { DtlsRandom } from \"../../handshake/random\";\nimport { dumpBuffer } from \"../../helper\";\nimport { createPlaintext } from \"../../record/builder\";\nimport { ContentType } from \"../../record/const\";\nimport type { FragmentedHandshake } from \"../../record/message/fragment\";\nimport { Flight } from \"../flight\";\n\nconst log = debug(\n \"werift-dtls : packages/dtls/src/flight/client/flight5.ts : log\",\n);\n\nexport class Flight5 extends Flight {\n constructor(\n udp: TransportContext,\n dtls: DtlsContext,\n private cipher: CipherContext,\n private srtp: SrtpContext,\n ) {\n super(udp, dtls, 5, 7);\n }\n\n handleHandshake(handshake: FragmentedHandshake) {\n this.dtls.bufferHandshakeCache([handshake], false, 4);\n const message = (() => {\n switch (handshake.msg_type) {\n case HandshakeType.server_hello_2:\n return ServerHello.deSerialize(handshake.fragment);\n case HandshakeType.certificate_11:\n return Certificate.deSerialize(handshake.fragment);\n case HandshakeType.server_key_exchange_12:\n return ServerKeyExchange.deSerialize(handshake.fragment);\n case HandshakeType.certificate_request_13:\n return ServerCertificateRequest.deSerialize(handshake.fragment);\n case HandshakeType.server_hello_done_14:\n return ServerHelloDone.deSerialize(handshake.fragment);\n }\n })();\n\n if (message) {\n handlers[message.msgType]({\n dtls: this.dtls,\n cipher: this.cipher,\n srtp: this.srtp,\n })(message);\n }\n }\n\n async exec() {\n if (this.dtls.flight === 5) {\n log(this.dtls.sessionId, \"flight5 twice\");\n this.send(this.dtls.lastMessage);\n return;\n }\n this.dtls.flight = 5;\n\n const needCertificate = this.dtls.requestedCertificateTypes.length > 0;\n log(this.dtls.sessionId, \"send flight5\", needCertificate);\n\n const messages = [\n needCertificate && this.sendCertificate(),\n this.sendClientKeyExchange(),\n needCertificate && this.sendCertificateVerify(),\n this.sendChangeCipherSpec(),\n this.sendFinished(),\n ].filter((v) => v) as Buffer[];\n\n this.dtls.lastMessage = messages;\n await this.transmit(messages);\n }\n\n private sendCertificate() {\n const certificate = new Certificate([Buffer.from(this.cipher.localCert)]);\n\n const packets = this.createPacket([certificate]);\n\n const buf = Buffer.concat(packets.map((v) => v.serialize()));\n return buf;\n }\n\n private sendClientKeyExchange() {\n if (!this.cipher.localKeyPair) throw new Error();\n\n const clientKeyExchange = new ClientKeyExchange(\n this.cipher.localKeyPair.publicKey,\n );\n const packets = this.createPacket([clientKeyExchange]);\n const buf = Buffer.concat(packets.map((v) => v.serialize()));\n\n const localKeyPair = this.cipher.localKeyPair;\n const remoteKeyPair = this.cipher.remoteKeyPair;\n\n if (!remoteKeyPair.publicKey) throw new Error(\"not exist\");\n\n const preMasterSecret = prfPreMasterSecret(\n remoteKeyPair.publicKey,\n localKeyPair.privateKey,\n localKeyPair.curve,\n );\n\n log(\n this.dtls.sessionId,\n \"extendedMasterSecret\",\n this.dtls.options.extendedMasterSecret,\n this.dtls.remoteExtendedMasterSecret,\n );\n\n const handshakes = Buffer.concat(\n this.dtls.sortedHandshakeCache.map((v) => v.serialize()),\n );\n this.cipher.masterSecret =\n this.dtls.options.extendedMasterSecret &&\n this.dtls.remoteExtendedMasterSecret\n ? prfExtendedMasterSecret(preMasterSecret, handshakes)\n : prfMasterSecret(\n preMasterSecret,\n this.cipher.localRandom.serialize(),\n this.cipher.remoteRandom.serialize(),\n );\n\n this.cipher.cipher = createCipher(this.cipher.cipherSuite);\n this.cipher.cipher.init(\n this.cipher.masterSecret,\n this.cipher.remoteRandom.serialize(),\n this.cipher.localRandom.serialize(),\n );\n log(this.dtls.sessionId, \"cipher\", this.cipher.cipher.summary);\n\n return buf;\n }\n\n private sendCertificateVerify() {\n const cache = Buffer.concat(\n this.dtls.sortedHandshakeCache.map((v) => v.serialize()),\n );\n const signed = this.cipher.signatureData(cache, \"sha256\");\n const signatureScheme = (() => {\n switch (this.cipher.signatureHashAlgorithm?.signature) {\n case SignatureAlgorithm.ecdsa_3:\n return SignatureScheme.ecdsa_secp256r1_sha256;\n case SignatureAlgorithm.rsa_1:\n return SignatureScheme.rsa_pkcs1_sha256;\n }\n })();\n if (!signatureScheme) throw new Error();\n log(\n this.dtls.sessionId,\n \"signatureScheme\",\n this.cipher.signatureHashAlgorithm?.signature,\n signatureScheme,\n );\n\n const certificateVerify = new CertificateVerify(signatureScheme, signed);\n const packets = this.createPacket([certificateVerify]);\n const buf = Buffer.concat(packets.map((v) => v.serialize()));\n return buf;\n }\n\n private sendChangeCipherSpec() {\n const changeCipherSpec = ChangeCipherSpec.createEmpty().serialize();\n const packets = createPlaintext(this.dtls)(\n [{ type: ContentType.changeCipherSpec, fragment: changeCipherSpec }],\n ++this.dtls.recordSequenceNumber,\n );\n const buf = Buffer.concat(packets.map((v) => v.serialize()));\n return buf;\n }\n\n private sendFinished() {\n const cache = Buffer.concat(\n this.dtls.sortedHandshakeCache.map((v) => v.serialize()),\n );\n const localVerifyData = this.cipher.verifyData(cache);\n\n const finish = new Finished(localVerifyData);\n this.dtls.epoch = 1;\n const [packet] = this.createPacket([finish]);\n log(\n this.dtls.sessionId,\n \"raw finish packet\",\n packet.summary,\n this.dtls.sortedHandshakeCache.map((h) => h.summary),\n );\n\n this.dtls.recordSequenceNumber = 0;\n\n const buf = this.cipher.encryptPacket(packet).serialize();\n log(this.dtls.sessionId, \"finished\", this.cipher.cipher.summary);\n return buf;\n }\n}\n\nconst handlers: {\n [key: number]: (contexts: {\n dtls: DtlsContext;\n cipher: CipherContext;\n srtp: SrtpContext;\n }) => (message: any) => void;\n} = {};\n\nhandlers[HandshakeType.server_hello_2] =\n ({ cipher, srtp, dtls }) =>\n (message: ServerHello) => {\n log(dtls.sessionId, \"serverHello\", message.cipherSuite);\n cipher.remoteRandom = DtlsRandom.from(message.random);\n cipher.cipherSuite = message.cipherSuite;\n log(dtls.sessionId, \"selected cipherSuite\", cipher.cipherSuite);\n\n if (message.extensions) {\n message.extensions.forEach((extension) => {\n switch (extension.type) {\n case UseSRTP.type:\n {\n const useSrtp = UseSRTP.fromData(extension.data);\n const profile = SrtpContext.findMatchingSRTPProfile(\n useSrtp.profiles as Profile[],\n dtls.options.srtpProfiles || [],\n );\n log(dtls.sessionId, \"selected srtp profile\", profile);\n if (profile == undefined) return;\n srtp.srtpProfile = profile;\n }\n break;\n case ExtendedMasterSecret.type:\n dtls.remoteExtendedMasterSecret = true;\n break;\n case RenegotiationIndication.type:\n log(dtls.sessionId, \"RenegotiationIndication\");\n break;\n }\n });\n }\n };\n\nhandlers[HandshakeType.certificate_11] =\n ({ cipher, dtls }) =>\n (message: Certificate) => {\n log(dtls.sessionId, \"handshake certificate\", message);\n cipher.remoteCertificate = message.certificateList[0];\n };\n\nhandlers[HandshakeType.server_key_exchange_12] =\n ({ cipher, dtls }) =>\n (message: ServerKeyExchange) => {\n if (!cipher.localRandom || !cipher.remoteRandom) throw new Error();\n log(dtls.sessionId, \"ServerKeyExchange\", message);\n\n log(dtls.sessionId, \"selected curve\", message.namedCurve);\n cipher.remoteKeyPair = {\n curve: message.namedCurve,\n publicKey: message.publicKey,\n };\n cipher.localKeyPair = generateKeyPair(message.namedCurve);\n };\n\nhandlers[HandshakeType.certificate_request_13] =\n ({ dtls }) =>\n (message: ServerCertificateRequest) => {\n log(dtls.sessionId, \"certificate_request\", message);\n dtls.requestedCertificateTypes = message.certificateTypes;\n dtls.requestedSignatureAlgorithms = message.signatures;\n };\n\nhandlers[HandshakeType.server_hello_done_14] =\n ({ dtls }) =>\n (msg) => {\n log(dtls.sessionId, \"server_hello_done\", msg);\n };\n"]}
|
|
1
|
+
{"version":3,"file":"flight5.js","sourceRoot":"","sources":["../../../../../../dtls/src/flight/client/flight5.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\n\nimport { SignatureAlgorithm, SignatureScheme } from \"../../cipher/const\";\nimport { createCipher } from \"../../cipher/create\";\nimport { generateKeyPair } from \"../../cipher/namedCurve\";\nimport {\n prfExtendedMasterSecret,\n prfMasterSecret,\n prfPreMasterSecret,\n} from \"../../cipher/prf\";\nimport type { CipherContext } from \"../../context/cipher\";\nimport type { DtlsContext } from \"../../context/dtls\";\nimport { type Profile, SrtpContext } from \"../../context/srtp\";\nimport type { TransportContext } from \"../../context/transport\";\nimport { HandshakeType } from \"../../handshake/const\";\nimport { ExtendedMasterSecret } from \"../../handshake/extensions/extendedMasterSecret\";\nimport { RenegotiationIndication } from \"../../handshake/extensions/renegotiationIndication\";\nimport { UseSRTP } from \"../../handshake/extensions/useSrtp\";\nimport { Certificate } from \"../../handshake/message/certificate\";\nimport { ChangeCipherSpec } from \"../../handshake/message/changeCipherSpec\";\nimport { CertificateVerify } from \"../../handshake/message/client/certificateVerify\";\nimport { ClientKeyExchange } from \"../../handshake/message/client/keyExchange\";\nimport { Finished } from \"../../handshake/message/finished\";\nimport { ServerCertificateRequest } from \"../../handshake/message/server/certificateRequest\";\nimport { ServerHello } from \"../../handshake/message/server/hello\";\nimport { ServerHelloDone } from \"../../handshake/message/server/helloDone\";\nimport { ServerKeyExchange } from \"../../handshake/message/server/keyExchange\";\nimport { DtlsRandom } from \"../../handshake/random\";\nimport { dumpBuffer } from \"../../helper\";\nimport { createPlaintext } from \"../../record/builder\";\nimport { ContentType } from \"../../record/const\";\nimport type { FragmentedHandshake } from \"../../record/message/fragment\";\nimport { Flight } from \"../flight\";\n\nconst log = debug(\n \"werift-dtls : packages/dtls/src/flight/client/flight5.ts : log\",\n);\n\nexport class Flight5 extends Flight {\n constructor(\n udp: TransportContext,\n dtls: DtlsContext,\n private cipher: CipherContext,\n private srtp: SrtpContext,\n ) {\n super(udp, dtls, 5, 7);\n }\n\n handleHandshake(handshake: FragmentedHandshake) {\n this.dtls.bufferHandshakeCache([handshake], false, 4);\n const message = (() => {\n switch (handshake.msg_type) {\n case HandshakeType.server_hello_2:\n return ServerHello.deSerialize(handshake.fragment);\n case HandshakeType.certificate_11:\n return Certificate.deSerialize(handshake.fragment);\n case HandshakeType.server_key_exchange_12:\n return ServerKeyExchange.deSerialize(handshake.fragment);\n case HandshakeType.certificate_request_13:\n return ServerCertificateRequest.deSerialize(handshake.fragment);\n case HandshakeType.server_hello_done_14:\n return ServerHelloDone.deSerialize(handshake.fragment);\n }\n })();\n\n if (message) {\n handlers[message.msgType]({\n dtls: this.dtls,\n cipher: this.cipher,\n srtp: this.srtp,\n })(message);\n }\n }\n\n async exec() {\n if (this.dtls.flight === 5) {\n log(this.dtls.sessionId, \"flight5 twice\");\n this.send(this.dtls.lastMessage);\n return;\n }\n this.dtls.flight = 5;\n\n const needCertificate = this.dtls.requestedCertificateTypes.length > 0;\n log(this.dtls.sessionId, \"send flight5\", needCertificate);\n\n const messages = [\n needCertificate && this.sendCertificate(),\n this.sendClientKeyExchange(),\n needCertificate && this.sendCertificateVerify(),\n this.sendChangeCipherSpec(),\n this.sendFinished(),\n ].filter((v) => v) as Buffer[];\n\n this.dtls.lastMessage = messages;\n await this.transmit(messages);\n }\n\n private sendCertificate() {\n const certificate = new Certificate([Buffer.from(this.cipher.localCert)]);\n\n const packets = this.createPacket([certificate]);\n\n const buf = Buffer.concat(packets.map((v) => v.serialize()));\n return buf;\n }\n\n private sendClientKeyExchange() {\n if (!this.cipher.localKeyPair) throw new Error();\n\n const clientKeyExchange = new ClientKeyExchange(\n this.cipher.localKeyPair.publicKey,\n );\n const packets = this.createPacket([clientKeyExchange]);\n const buf = Buffer.concat(packets.map((v) => v.serialize()));\n\n const localKeyPair = this.cipher.localKeyPair;\n const remoteKeyPair = this.cipher.remoteKeyPair;\n\n if (!remoteKeyPair.publicKey) throw new Error(\"not exist\");\n\n const preMasterSecret = prfPreMasterSecret(\n remoteKeyPair.publicKey,\n localKeyPair.privateKey,\n localKeyPair.curve,\n );\n\n log(\n this.dtls.sessionId,\n \"extendedMasterSecret\",\n this.dtls.options.extendedMasterSecret,\n this.dtls.remoteExtendedMasterSecret,\n );\n\n const handshakes = Buffer.concat(\n this.dtls.sortedHandshakeCache.map((v) => v.serialize()),\n );\n this.cipher.masterSecret =\n this.dtls.options.extendedMasterSecret &&\n this.dtls.remoteExtendedMasterSecret\n ? prfExtendedMasterSecret(preMasterSecret, handshakes)\n : prfMasterSecret(\n preMasterSecret,\n this.cipher.localRandom.serialize(),\n this.cipher.remoteRandom.serialize(),\n );\n\n this.cipher.cipher = createCipher(this.cipher.cipherSuite);\n this.cipher.cipher.init(\n this.cipher.masterSecret,\n this.cipher.remoteRandom.serialize(),\n this.cipher.localRandom.serialize(),\n );\n log(this.dtls.sessionId, \"cipher\", this.cipher.cipher.summary);\n\n return buf;\n }\n\n private sendCertificateVerify() {\n const cache = Buffer.concat(\n this.dtls.sortedHandshakeCache.map((v) => v.serialize()),\n );\n const signed = this.cipher.signatureData(cache, \"sha256\");\n const signatureScheme = (() => {\n switch (this.cipher.signatureHashAlgorithm?.signature) {\n case SignatureAlgorithm.ecdsa_3:\n return SignatureScheme.ecdsa_secp256r1_sha256;\n case SignatureAlgorithm.rsa_1:\n return SignatureScheme.rsa_pkcs1_sha256;\n }\n })();\n if (!signatureScheme) throw new Error();\n log(\n this.dtls.sessionId,\n \"signatureScheme\",\n this.cipher.signatureHashAlgorithm?.signature,\n signatureScheme,\n );\n\n const certificateVerify = new CertificateVerify(signatureScheme, signed);\n const packets = this.createPacket([certificateVerify]);\n const buf = Buffer.concat(packets.map((v) => v.serialize()));\n return buf;\n }\n\n private sendChangeCipherSpec() {\n const changeCipherSpec = ChangeCipherSpec.createEmpty().serialize();\n const packets = createPlaintext(this.dtls)(\n [{ type: ContentType.changeCipherSpec, fragment: changeCipherSpec }],\n ++this.dtls.recordSequenceNumber,\n );\n const buf = Buffer.concat(packets.map((v) => v.serialize()));\n return buf;\n }\n\n private sendFinished() {\n const cache = Buffer.concat(\n this.dtls.sortedHandshakeCache.map((v) => v.serialize()),\n );\n const localVerifyData = this.cipher.verifyData(cache);\n\n const finish = new Finished(localVerifyData);\n this.dtls.epoch = 1;\n const [packet] = this.createPacket([finish]);\n // log(\n // this.dtls.sessionId,\n // \"raw finish packet\",\n // packet.summary,\n // this.dtls.sortedHandshakeCache.map((h) => h.summary),\n // );\n\n this.dtls.recordSequenceNumber = 0;\n\n const buf = this.cipher.encryptPacket(packet).serialize();\n log(this.dtls.sessionId, \"finished\", this.cipher.cipher.summary);\n return buf;\n }\n}\n\nconst handlers: {\n [key: number]: (contexts: {\n dtls: DtlsContext;\n cipher: CipherContext;\n srtp: SrtpContext;\n }) => (message: any) => void;\n} = {};\n\nhandlers[HandshakeType.server_hello_2] =\n ({ cipher, srtp, dtls }) =>\n (message: ServerHello) => {\n log(dtls.sessionId, \"serverHello\", message.cipherSuite);\n cipher.remoteRandom = DtlsRandom.from(message.random);\n cipher.cipherSuite = message.cipherSuite;\n log(dtls.sessionId, \"selected cipherSuite\", cipher.cipherSuite);\n\n if (message.extensions) {\n message.extensions.forEach((extension) => {\n switch (extension.type) {\n case UseSRTP.type:\n {\n const useSrtp = UseSRTP.fromData(extension.data);\n const profile = SrtpContext.findMatchingSRTPProfile(\n useSrtp.profiles as Profile[],\n dtls.options.srtpProfiles || [],\n );\n log(dtls.sessionId, \"selected srtp profile\", profile);\n if (profile == undefined) return;\n srtp.srtpProfile = profile;\n }\n break;\n case ExtendedMasterSecret.type:\n dtls.remoteExtendedMasterSecret = true;\n break;\n case RenegotiationIndication.type:\n log(dtls.sessionId, \"RenegotiationIndication\");\n break;\n }\n });\n }\n };\n\nhandlers[HandshakeType.certificate_11] =\n ({ cipher, dtls }) =>\n (message: Certificate) => {\n log(dtls.sessionId, \"handshake certificate\", message);\n cipher.remoteCertificate = message.certificateList[0];\n };\n\nhandlers[HandshakeType.server_key_exchange_12] =\n ({ cipher, dtls }) =>\n (message: ServerKeyExchange) => {\n if (!cipher.localRandom || !cipher.remoteRandom) throw new Error();\n log(dtls.sessionId, \"ServerKeyExchange\", message);\n\n log(dtls.sessionId, \"selected curve\", message.namedCurve);\n cipher.remoteKeyPair = {\n curve: message.namedCurve,\n publicKey: message.publicKey,\n };\n cipher.localKeyPair = generateKeyPair(message.namedCurve);\n };\n\nhandlers[HandshakeType.certificate_request_13] =\n ({ dtls }) =>\n (message: ServerCertificateRequest) => {\n log(dtls.sessionId, \"certificate_request\", message);\n dtls.requestedCertificateTypes = message.certificateTypes;\n dtls.requestedSignatureAlgorithms = message.signatures;\n };\n\nhandlers[HandshakeType.server_hello_done_14] =\n ({ dtls }) =>\n (msg) => {\n log(dtls.sessionId, \"server_hello_done\", msg);\n };\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "../../../common/src";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
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);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("../../../common/src"), exports);
|
|
18
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../../dtls/src/imports/common.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC","sourcesContent":["export * from \"../../../common/src\";\n"]}
|
package/lib/dtls/src/socket.d.ts
CHANGED
package/lib/dtls/src/socket.js
CHANGED
|
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.DtlsSocket = void 0;
|
|
7
7
|
const binary_data_1 = require("@shinyoshiaki/binary-data");
|
|
8
8
|
const debug_1 = __importDefault(require("debug"));
|
|
9
|
-
const rx_mini_1 = require("rx.mini");
|
|
10
9
|
const promises_1 = require("timers/promises");
|
|
10
|
+
const common_1 = require("./imports/common");
|
|
11
11
|
const const_1 = require("./cipher/const");
|
|
12
12
|
const prf_1 = require("./cipher/prf");
|
|
13
13
|
const abstract_1 = require("./cipher/suites/abstract");
|
|
@@ -44,25 +44,25 @@ class DtlsSocket {
|
|
|
44
44
|
enumerable: true,
|
|
45
45
|
configurable: true,
|
|
46
46
|
writable: true,
|
|
47
|
-
value: new
|
|
47
|
+
value: new common_1.Event()
|
|
48
48
|
});
|
|
49
49
|
Object.defineProperty(this, "onData", {
|
|
50
50
|
enumerable: true,
|
|
51
51
|
configurable: true,
|
|
52
52
|
writable: true,
|
|
53
|
-
value: new
|
|
53
|
+
value: new common_1.Event()
|
|
54
54
|
});
|
|
55
55
|
Object.defineProperty(this, "onError", {
|
|
56
56
|
enumerable: true,
|
|
57
57
|
configurable: true,
|
|
58
58
|
writable: true,
|
|
59
|
-
value: new
|
|
59
|
+
value: new common_1.Event()
|
|
60
60
|
});
|
|
61
61
|
Object.defineProperty(this, "onClose", {
|
|
62
62
|
enumerable: true,
|
|
63
63
|
configurable: true,
|
|
64
64
|
writable: true,
|
|
65
|
-
value: new
|
|
65
|
+
value: new common_1.Event()
|
|
66
66
|
});
|
|
67
67
|
Object.defineProperty(this, "transport", {
|
|
68
68
|
enumerable: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../../../dtls/src/socket.ts"],"names":[],"mappings":"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","sourcesContent":["import { decode, types } from \"@shinyoshiaki/binary-data\";\nimport debug from \"debug\";\nimport { Event } from \"rx.mini\";\nimport { setTimeout } from \"timers/promises\";\n\nimport {\n NamedCurveAlgorithmList,\n type SignatureHash,\n signatures,\n} from \"./cipher/const\";\nimport { exportKeyingMaterial } from \"./cipher/prf\";\nimport { SessionType, type SessionTypes } from \"./cipher/suites/abstract\";\nimport { CipherContext } from \"./context/cipher\";\nimport { DtlsContext } from \"./context/dtls\";\nimport { type Profile, SrtpContext } from \"./context/srtp\";\nimport { TransportContext } from \"./context/transport\";\nimport { EllipticCurves } from \"./handshake/extensions/ellipticCurves\";\nimport { ExtendedMasterSecret } from \"./handshake/extensions/extendedMasterSecret\";\nimport { RenegotiationIndication } from \"./handshake/extensions/renegotiationIndication\";\nimport { Signature } from \"./handshake/extensions/signature\";\nimport { UseSRTP } from \"./handshake/extensions/useSrtp\";\nimport { createPlaintext } from \"./record/builder\";\nimport { ContentType } from \"./record/const\";\nimport { FragmentedHandshake } from \"./record/message/fragment\";\nimport { parsePacket, parsePlainText } from \"./record/receive\";\nimport type { Transport } from \"./transport\";\nimport type { Extension } from \"./typings/domain\";\n\nconst log = debug(\"werift-dtls : packages/dtls/src/socket.ts : log\");\nconst err = debug(\"werift-dtls : packages/dtls/src/socket.ts : err\");\n\nexport class DtlsSocket {\n readonly onConnect = new Event();\n readonly onData = new Event<[Buffer]>();\n readonly onError = new Event<[Error]>();\n readonly onClose = new Event();\n readonly transport: TransportContext;\n cipher: CipherContext;\n dtls: DtlsContext;\n srtp: SrtpContext = new SrtpContext();\n\n connected = false;\n extensions: Extension[] = [];\n onHandleHandshakes!: (assembled: FragmentedHandshake[]) => Promise<void>;\n\n private bufferFragmentedHandshakes: FragmentedHandshake[] = [];\n\n constructor(\n public options: Options,\n public sessionType: SessionTypes,\n ) {\n this.dtls = new DtlsContext(this.options, this.sessionType);\n this.cipher = new CipherContext(\n this.sessionType,\n this.options.cert,\n this.options.key,\n this.options.signatureHash,\n );\n this.transport = new TransportContext(this.options.transport);\n this.setupExtensions();\n this.transport.socket.onData = this.udpOnMessage;\n }\n\n renegotiation() {\n log(\"renegotiation\", this.sessionType);\n this.connected = false;\n this.cipher = new CipherContext(\n this.sessionType,\n this.options.cert,\n this.options.key,\n this.options.signatureHash,\n );\n this.dtls = new DtlsContext(this.options, this.sessionType);\n this.srtp = new SrtpContext();\n this.extensions = [];\n this.bufferFragmentedHandshakes = [];\n }\n\n private udpOnMessage = (data: Buffer) => {\n const packets = parsePacket(data);\n\n for (const packet of packets) {\n try {\n const message = parsePlainText(this.dtls, this.cipher)(packet);\n switch (message.type) {\n case ContentType.handshake:\n {\n const handshake = message.data as FragmentedHandshake;\n const handshakes = this.handleFragmentHandshake([handshake]);\n const assembled = Object.values(\n handshakes.reduce(\n (acc: { [type: string]: FragmentedHandshake[] }, cur) => {\n if (!acc[cur.msg_type]) acc[cur.msg_type] = [];\n acc[cur.msg_type].push(cur);\n return acc;\n },\n {},\n ),\n )\n .map((v) => FragmentedHandshake.assemble(v))\n .sort((a, b) => a.msg_type - b.msg_type);\n\n this.onHandleHandshakes(assembled).catch((error) => {\n err(this.dtls.sessionId, \"onHandleHandshakes error\", error);\n this.onError.execute(error);\n });\n }\n break;\n case ContentType.applicationData:\n {\n this.onData.execute(message.data as Buffer);\n }\n break;\n case ContentType.alert:\n this.onClose.execute();\n break;\n }\n } catch (error) {\n err(this.dtls.sessionId, \"catch udpOnMessage error\", error);\n }\n }\n };\n\n private setupExtensions() {\n log(this.dtls.sessionId, \"support srtpProfiles\", this.options.srtpProfiles);\n if (this.options.srtpProfiles && this.options.srtpProfiles.length > 0) {\n const useSrtp = UseSRTP.create(\n this.options.srtpProfiles,\n Buffer.from([0x00]),\n );\n this.extensions.push(useSrtp.extension);\n }\n\n {\n const curve = EllipticCurves.createEmpty();\n curve.data = NamedCurveAlgorithmList;\n this.extensions.push(curve.extension);\n }\n\n {\n const signature = Signature.createEmpty();\n // libwebrtc/OpenSSL require 4=1 , 4=3 signatureHash\n signature.data = signatures;\n this.extensions.push(signature.extension);\n }\n if (this.options.extendedMasterSecret) {\n this.extensions.push({\n type: ExtendedMasterSecret.type,\n data: Buffer.alloc(0),\n });\n }\n\n {\n const renegotiationIndication = RenegotiationIndication.createEmpty();\n this.extensions.push(renegotiationIndication.extension);\n }\n }\n\n protected waitForReady = (condition: () => boolean) =>\n new Promise<void>(async (r, f) => {\n for (let i = 0; i < 10; i++) {\n if (condition()) {\n r();\n break;\n } else {\n await setTimeout(100 * i);\n }\n }\n f(\"waitForReady timeout\");\n });\n\n handleFragmentHandshake(messages: FragmentedHandshake[]) {\n let handshakes = messages.filter((v) => {\n // find fragmented\n if (v.fragment_length !== v.length) {\n this.bufferFragmentedHandshakes.push(v);\n return false;\n }\n return true;\n });\n\n if (this.bufferFragmentedHandshakes.length > 1) {\n const [last] = this.bufferFragmentedHandshakes.slice(-1);\n if (last.fragment_offset + last.fragment_length === last.length) {\n handshakes = [...this.bufferFragmentedHandshakes, ...handshakes];\n this.bufferFragmentedHandshakes = [];\n }\n }\n return handshakes; // return un fragmented handshakes\n }\n\n /**send application data */\n send = async (buf: Buffer) => {\n const pkt = createPlaintext(this.dtls)(\n [{ type: ContentType.applicationData, fragment: buf }],\n ++this.dtls.recordSequenceNumber,\n )[0];\n await this.transport.send(this.cipher.encryptPacket(pkt).serialize());\n };\n\n close() {\n this.transport.socket.close();\n }\n\n extractSessionKeys(keyLength: number, saltLength: number) {\n const keyingMaterial = this.exportKeyingMaterial(\n \"EXTRACTOR-dtls_srtp\",\n keyLength * 2 + saltLength * 2,\n );\n\n const { clientKey, serverKey, clientSalt, serverSalt } = decode(\n keyingMaterial,\n {\n clientKey: types.buffer(keyLength),\n serverKey: types.buffer(keyLength),\n clientSalt: types.buffer(saltLength),\n serverSalt: types.buffer(saltLength),\n },\n );\n\n if (this.sessionType === SessionType.CLIENT) {\n return {\n localKey: clientKey,\n localSalt: clientSalt,\n remoteKey: serverKey,\n remoteSalt: serverSalt,\n };\n } else {\n return {\n localKey: serverKey,\n localSalt: serverSalt,\n remoteKey: clientKey,\n remoteSalt: clientSalt,\n };\n }\n }\n\n exportKeyingMaterial(label: string, length: number) {\n return exportKeyingMaterial(\n label,\n length,\n this.cipher.masterSecret,\n this.cipher.localRandom.serialize(),\n this.cipher.remoteRandom.serialize(),\n this.sessionType === SessionType.CLIENT,\n );\n }\n}\n\nexport interface Options {\n transport: Transport;\n srtpProfiles?: Profile[];\n cert?: string;\n key?: string;\n signatureHash?: SignatureHash;\n certificateRequest?: boolean;\n extendedMasterSecret?: boolean;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../../../dtls/src/socket.ts"],"names":[],"mappings":"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","sourcesContent":["import { decode, types } from \"@shinyoshiaki/binary-data\";\nimport debug from \"debug\";\nimport { setTimeout } from \"timers/promises\";\nimport { Event } from \"./imports/common\";\n\nimport {\n NamedCurveAlgorithmList,\n type SignatureHash,\n signatures,\n} from \"./cipher/const\";\nimport { exportKeyingMaterial } from \"./cipher/prf\";\nimport { SessionType, type SessionTypes } from \"./cipher/suites/abstract\";\nimport { CipherContext } from \"./context/cipher\";\nimport { DtlsContext } from \"./context/dtls\";\nimport { type Profile, SrtpContext } from \"./context/srtp\";\nimport { TransportContext } from \"./context/transport\";\nimport { EllipticCurves } from \"./handshake/extensions/ellipticCurves\";\nimport { ExtendedMasterSecret } from \"./handshake/extensions/extendedMasterSecret\";\nimport { RenegotiationIndication } from \"./handshake/extensions/renegotiationIndication\";\nimport { Signature } from \"./handshake/extensions/signature\";\nimport { UseSRTP } from \"./handshake/extensions/useSrtp\";\nimport { createPlaintext } from \"./record/builder\";\nimport { ContentType } from \"./record/const\";\nimport { FragmentedHandshake } from \"./record/message/fragment\";\nimport { parsePacket, parsePlainText } from \"./record/receive\";\nimport type { Transport } from \"./transport\";\nimport type { Extension } from \"./typings/domain\";\n\nconst log = debug(\"werift-dtls : packages/dtls/src/socket.ts : log\");\nconst err = debug(\"werift-dtls : packages/dtls/src/socket.ts : err\");\n\nexport class DtlsSocket {\n readonly onConnect = new Event();\n readonly onData = new Event<[Buffer]>();\n readonly onError = new Event<[Error]>();\n readonly onClose = new Event();\n readonly transport: TransportContext;\n cipher: CipherContext;\n dtls: DtlsContext;\n srtp: SrtpContext = new SrtpContext();\n\n connected = false;\n extensions: Extension[] = [];\n onHandleHandshakes!: (assembled: FragmentedHandshake[]) => Promise<void>;\n\n private bufferFragmentedHandshakes: FragmentedHandshake[] = [];\n\n constructor(\n public options: Options,\n public sessionType: SessionTypes,\n ) {\n this.dtls = new DtlsContext(this.options, this.sessionType);\n this.cipher = new CipherContext(\n this.sessionType,\n this.options.cert,\n this.options.key,\n this.options.signatureHash,\n );\n this.transport = new TransportContext(this.options.transport);\n this.setupExtensions();\n this.transport.socket.onData = this.udpOnMessage;\n }\n\n renegotiation() {\n log(\"renegotiation\", this.sessionType);\n this.connected = false;\n this.cipher = new CipherContext(\n this.sessionType,\n this.options.cert,\n this.options.key,\n this.options.signatureHash,\n );\n this.dtls = new DtlsContext(this.options, this.sessionType);\n this.srtp = new SrtpContext();\n this.extensions = [];\n this.bufferFragmentedHandshakes = [];\n }\n\n private udpOnMessage = (data: Buffer) => {\n const packets = parsePacket(data);\n\n for (const packet of packets) {\n try {\n const message = parsePlainText(this.dtls, this.cipher)(packet);\n switch (message.type) {\n case ContentType.handshake:\n {\n const handshake = message.data as FragmentedHandshake;\n const handshakes = this.handleFragmentHandshake([handshake]);\n const assembled = Object.values(\n handshakes.reduce(\n (acc: { [type: string]: FragmentedHandshake[] }, cur) => {\n if (!acc[cur.msg_type]) acc[cur.msg_type] = [];\n acc[cur.msg_type].push(cur);\n return acc;\n },\n {},\n ),\n )\n .map((v) => FragmentedHandshake.assemble(v))\n .sort((a, b) => a.msg_type - b.msg_type);\n\n this.onHandleHandshakes(assembled).catch((error) => {\n err(this.dtls.sessionId, \"onHandleHandshakes error\", error);\n this.onError.execute(error);\n });\n }\n break;\n case ContentType.applicationData:\n {\n this.onData.execute(message.data as Buffer);\n }\n break;\n case ContentType.alert:\n this.onClose.execute();\n break;\n }\n } catch (error) {\n err(this.dtls.sessionId, \"catch udpOnMessage error\", error);\n }\n }\n };\n\n private setupExtensions() {\n log(this.dtls.sessionId, \"support srtpProfiles\", this.options.srtpProfiles);\n if (this.options.srtpProfiles && this.options.srtpProfiles.length > 0) {\n const useSrtp = UseSRTP.create(\n this.options.srtpProfiles,\n Buffer.from([0x00]),\n );\n this.extensions.push(useSrtp.extension);\n }\n\n {\n const curve = EllipticCurves.createEmpty();\n curve.data = NamedCurveAlgorithmList;\n this.extensions.push(curve.extension);\n }\n\n {\n const signature = Signature.createEmpty();\n // libwebrtc/OpenSSL require 4=1 , 4=3 signatureHash\n signature.data = signatures;\n this.extensions.push(signature.extension);\n }\n if (this.options.extendedMasterSecret) {\n this.extensions.push({\n type: ExtendedMasterSecret.type,\n data: Buffer.alloc(0),\n });\n }\n\n {\n const renegotiationIndication = RenegotiationIndication.createEmpty();\n this.extensions.push(renegotiationIndication.extension);\n }\n }\n\n protected waitForReady = (condition: () => boolean) =>\n new Promise<void>(async (r, f) => {\n for (let i = 0; i < 10; i++) {\n if (condition()) {\n r();\n break;\n } else {\n await setTimeout(100 * i);\n }\n }\n f(\"waitForReady timeout\");\n });\n\n handleFragmentHandshake(messages: FragmentedHandshake[]) {\n let handshakes = messages.filter((v) => {\n // find fragmented\n if (v.fragment_length !== v.length) {\n this.bufferFragmentedHandshakes.push(v);\n return false;\n }\n return true;\n });\n\n if (this.bufferFragmentedHandshakes.length > 1) {\n const [last] = this.bufferFragmentedHandshakes.slice(-1);\n if (last.fragment_offset + last.fragment_length === last.length) {\n handshakes = [...this.bufferFragmentedHandshakes, ...handshakes];\n this.bufferFragmentedHandshakes = [];\n }\n }\n return handshakes; // return un fragmented handshakes\n }\n\n /**send application data */\n send = async (buf: Buffer) => {\n const pkt = createPlaintext(this.dtls)(\n [{ type: ContentType.applicationData, fragment: buf }],\n ++this.dtls.recordSequenceNumber,\n )[0];\n await this.transport.send(this.cipher.encryptPacket(pkt).serialize());\n };\n\n close() {\n this.transport.socket.close();\n }\n\n extractSessionKeys(keyLength: number, saltLength: number) {\n const keyingMaterial = this.exportKeyingMaterial(\n \"EXTRACTOR-dtls_srtp\",\n keyLength * 2 + saltLength * 2,\n );\n\n const { clientKey, serverKey, clientSalt, serverSalt } = decode(\n keyingMaterial,\n {\n clientKey: types.buffer(keyLength),\n serverKey: types.buffer(keyLength),\n clientSalt: types.buffer(saltLength),\n serverSalt: types.buffer(saltLength),\n },\n );\n\n if (this.sessionType === SessionType.CLIENT) {\n return {\n localKey: clientKey,\n localSalt: clientSalt,\n remoteKey: serverKey,\n remoteSalt: serverSalt,\n };\n } else {\n return {\n localKey: serverKey,\n localSalt: serverSalt,\n remoteKey: clientKey,\n remoteSalt: clientSalt,\n };\n }\n }\n\n exportKeyingMaterial(label: string, length: number) {\n return exportKeyingMaterial(\n label,\n length,\n this.cipher.masterSecret,\n this.cipher.localRandom.serialize(),\n this.cipher.remoteRandom.serialize(),\n this.sessionType === SessionType.CLIENT,\n );\n }\n}\n\nexport interface Options {\n transport: Transport;\n srtpProfiles?: Profile[];\n cert?: string;\n key?: string;\n signatureHash?: SignatureHash;\n certificateRequest?: boolean;\n extendedMasterSecret?: boolean;\n}\n"]}
|
|
@@ -16,4 +16,4 @@ export declare class Candidate {
|
|
|
16
16
|
toSdp(): string;
|
|
17
17
|
}
|
|
18
18
|
export declare function candidateFoundation(candidateType: string, candidateTransport: string, baseAddress: string): string;
|
|
19
|
-
export declare function candidatePriority(
|
|
19
|
+
export declare function candidatePriority(candidateType: string, localPref?: number): number;
|
package/lib/ice/src/candidate.js
CHANGED
|
@@ -147,7 +147,8 @@ function candidateFoundation(candidateType, candidateTransport, baseAddress) {
|
|
|
147
147
|
return (0, crypto_1.createHash)("md5").update(key, "ascii").digest("hex").slice(7);
|
|
148
148
|
}
|
|
149
149
|
// priorityを決める
|
|
150
|
-
function candidatePriority(
|
|
150
|
+
function candidatePriority(candidateType, localPref = 65535) {
|
|
151
|
+
const candidateComponent = 1;
|
|
151
152
|
// See RFC 5245 - 4.1.2.1. Recommended Formula
|
|
152
153
|
let typePref = 0;
|
|
153
154
|
if (candidateType === "host") {
|