node-datachannel 0.29.0 → 0.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.clang-format +17 -0
- package/CMakeLists.txt +16 -2
- package/dist/cjs/lib/index.cjs +21 -0
- package/dist/cjs/lib/index.cjs.map +1 -1
- package/dist/cjs/polyfill/RTCPeerConnection.cjs +6 -1
- package/dist/cjs/polyfill/RTCPeerConnection.cjs.map +1 -1
- package/dist/esm/lib/index.mjs +15 -1
- package/dist/esm/lib/index.mjs.map +1 -1
- package/dist/esm/polyfill/RTCPeerConnection.mjs +6 -1
- package/dist/esm/polyfill/RTCPeerConnection.mjs.map +1 -1
- package/dist/types/lib/index.d.ts +58 -4
- package/dist/types/lib/types.d.ts +3 -1
- package/package.json +3 -2
- package/rollup.config.mjs +1 -1
- package/src/cpp/data-channel-wrapper.cpp +432 -411
- package/src/cpp/data-channel-wrapper.h +0 -2
- package/src/cpp/ice-udp-mux-listener-wrapper.cpp +104 -97
- package/src/cpp/main.cpp +25 -11
- package/src/cpp/media-audio-wrapper.cpp +291 -294
- package/src/cpp/media-audio-wrapper.h +1 -3
- package/src/cpp/media-av1packetization.cpp +24 -0
- package/src/cpp/media-av1packetization.h +11 -0
- package/src/cpp/media-av1rtppacketizer-wrapper.cpp +126 -0
- package/src/cpp/media-av1rtppacketizer-wrapper.h +29 -0
- package/src/cpp/media-direction.cpp +32 -32
- package/src/cpp/media-direction.h +1 -1
- package/src/cpp/media-h264rtppacketizer-wrapper.cpp +126 -0
- package/src/cpp/media-h264rtppacketizer-wrapper.h +30 -0
- package/src/cpp/media-h265rtppacketizer-wrapper.cpp +126 -0
- package/src/cpp/media-h265rtppacketizer-wrapper.h +30 -0
- package/src/cpp/media-h26xseparator.cpp +32 -0
- package/src/cpp/media-h26xseparator.h +11 -0
- package/src/cpp/media-mediahandler-helper.cpp +28 -0
- package/src/cpp/media-mediahandler-helper.h +11 -0
- package/src/cpp/media-rtcpnackresponder-wrapper.cpp +68 -0
- package/src/cpp/media-rtcpnackresponder-wrapper.h +28 -0
- package/src/cpp/media-rtcpreceivingsession-wrapper.cpp +38 -25
- package/src/cpp/media-rtcpreceivingsession-wrapper.h +1 -6
- package/src/cpp/media-rtcpsrreporter-wrapper.cpp +93 -0
- package/src/cpp/media-rtcpsrreporter-wrapper.h +30 -0
- package/src/cpp/media-rtppacketizationconfig-wrapper.cpp +167 -0
- package/src/cpp/media-rtppacketizationconfig-wrapper.h +35 -0
- package/src/cpp/media-rtppacketizer-wrapper.cpp +95 -0
- package/src/cpp/media-rtppacketizer-wrapper.h +30 -0
- package/src/cpp/media-track-wrapper.cpp +356 -340
- package/src/cpp/media-track-wrapper.h +0 -3
- package/src/cpp/media-video-wrapper.cpp +347 -313
- package/src/cpp/media-video-wrapper.h +3 -3
- package/src/cpp/peer-connection-wrapper.cpp +1094 -1047
- package/src/cpp/peer-connection-wrapper.h +0 -2
- package/src/cpp/rtc-wrapper.cpp +142 -138
- package/src/cpp/rtc-wrapper.h +8 -10
- package/src/cpp/thread-safe-callback.cpp +39 -50
- package/src/cpp/thread-safe-callback.h +26 -28
- package/src/cpp/web-socket-server-wrapper.cpp +205 -199
- package/src/cpp/web-socket-server-wrapper.h +0 -4
- package/src/cpp/web-socket-wrapper.cpp +625 -598
- package/src/cpp/web-socket-wrapper.h +0 -3
- package/src/lib/index.ts +69 -2
- package/src/lib/types.ts +6 -0
- package/src/polyfill/RTCPeerConnection.ts +8 -2
|
@@ -3,104 +3,106 @@
|
|
|
3
3
|
#include "plog/Log.h"
|
|
4
4
|
|
|
5
5
|
#include <cctype>
|
|
6
|
-
#include <sstream>
|
|
7
6
|
|
|
8
7
|
Napi::FunctionReference IceUdpMuxListenerWrapper::constructor = Napi::FunctionReference();
|
|
9
8
|
std::unordered_set<IceUdpMuxListenerWrapper *> IceUdpMuxListenerWrapper::instances;
|
|
10
9
|
|
|
11
10
|
void IceUdpMuxListenerWrapper::StopAll()
|
|
12
11
|
{
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
PLOG_DEBUG << "IceUdpMuxListenerWrapper StopAll() called";
|
|
13
|
+
auto copy(instances);
|
|
14
|
+
for (auto inst : copy)
|
|
15
|
+
inst->doCleanup();
|
|
17
16
|
}
|
|
18
17
|
|
|
19
18
|
Napi::Object IceUdpMuxListenerWrapper::Init(Napi::Env env, Napi::Object exports)
|
|
20
19
|
{
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
exports.Set("IceUdpMuxListener", func);
|
|
41
|
-
return exports;
|
|
20
|
+
Napi::HandleScope scope(env);
|
|
21
|
+
|
|
22
|
+
Napi::Function func =
|
|
23
|
+
DefineClass(env, "IceUdpMuxListener",
|
|
24
|
+
{InstanceMethod("stop", &IceUdpMuxListenerWrapper::stop),
|
|
25
|
+
InstanceMethod("onUnhandledStunRequest", &IceUdpMuxListenerWrapper::onUnhandledStunRequest),
|
|
26
|
+
InstanceMethod("port", &IceUdpMuxListenerWrapper::port),
|
|
27
|
+
InstanceMethod("address", &IceUdpMuxListenerWrapper::address)});
|
|
28
|
+
|
|
29
|
+
// If this is not the first call, we don't want to reassign the constructor (hot-reload problem)
|
|
30
|
+
if (constructor.IsEmpty())
|
|
31
|
+
{
|
|
32
|
+
constructor = Napi::Persistent(func);
|
|
33
|
+
constructor.SuppressDestruct();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
exports.Set("IceUdpMuxListener", func);
|
|
37
|
+
return exports;
|
|
42
38
|
}
|
|
43
39
|
|
|
44
|
-
IceUdpMuxListenerWrapper::IceUdpMuxListenerWrapper(const Napi::CallbackInfo &info)
|
|
40
|
+
IceUdpMuxListenerWrapper::IceUdpMuxListenerWrapper(const Napi::CallbackInfo &info)
|
|
41
|
+
: Napi::ObjectWrap<IceUdpMuxListenerWrapper>(info)
|
|
45
42
|
{
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
43
|
+
PLOG_DEBUG << "IceUdpMuxListenerWrapper Constructor called";
|
|
44
|
+
Napi::Env env = info.Env();
|
|
45
|
+
int length = info.Length();
|
|
46
|
+
|
|
47
|
+
// We expect (Number, String?) as param
|
|
48
|
+
if (length > 0 && info[0].IsNumber())
|
|
49
|
+
{
|
|
50
|
+
// Port
|
|
51
|
+
mPort = info[0].As<Napi::Number>().ToNumber().Uint32Value();
|
|
52
|
+
}
|
|
53
|
+
else
|
|
54
|
+
{
|
|
55
|
+
Napi::TypeError::New(env, "Port (Number) and optional Address (String) expected").ThrowAsJavaScriptException();
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (length > 1 && info[1].IsString())
|
|
60
|
+
{
|
|
61
|
+
// Address
|
|
62
|
+
mAddress = info[1].As<Napi::String>().ToString();
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
iceUdpMuxListenerPtr = std::make_unique<rtc::IceUdpMuxListener>(mPort, mAddress);
|
|
66
|
+
instances.insert(this);
|
|
66
67
|
}
|
|
67
68
|
|
|
68
69
|
IceUdpMuxListenerWrapper::~IceUdpMuxListenerWrapper()
|
|
69
70
|
{
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
PLOG_DEBUG << "IceUdpMuxListenerWrapper Destructor called";
|
|
72
|
+
doCleanup();
|
|
72
73
|
}
|
|
73
74
|
|
|
74
75
|
void IceUdpMuxListenerWrapper::doCleanup()
|
|
75
76
|
{
|
|
76
|
-
|
|
77
|
+
PLOG_DEBUG << "IceUdpMuxListenerWrapper::doCleanup() called";
|
|
77
78
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
79
|
+
if (iceUdpMuxListenerPtr)
|
|
80
|
+
{
|
|
81
|
+
iceUdpMuxListenerPtr->stop();
|
|
82
|
+
iceUdpMuxListenerPtr.reset();
|
|
83
|
+
}
|
|
83
84
|
|
|
84
|
-
|
|
85
|
-
|
|
85
|
+
mOnUnhandledStunRequestCallback.reset();
|
|
86
|
+
instances.erase(this);
|
|
86
87
|
}
|
|
87
88
|
|
|
88
89
|
Napi::Value IceUdpMuxListenerWrapper::port(const Napi::CallbackInfo &info)
|
|
89
90
|
{
|
|
90
|
-
|
|
91
|
+
Napi::Env env = info.Env();
|
|
91
92
|
|
|
92
|
-
|
|
93
|
+
return Napi::Number::New(env, mPort);
|
|
93
94
|
}
|
|
94
95
|
|
|
95
96
|
Napi::Value IceUdpMuxListenerWrapper::address(const Napi::CallbackInfo &info)
|
|
96
97
|
{
|
|
97
|
-
|
|
98
|
+
Napi::Env env = info.Env();
|
|
98
99
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
100
|
+
if (!mAddress.has_value())
|
|
101
|
+
{
|
|
102
|
+
return env.Undefined();
|
|
103
|
+
}
|
|
102
104
|
|
|
103
|
-
|
|
105
|
+
return Napi::String::New(env, mAddress.value());
|
|
104
106
|
}
|
|
105
107
|
|
|
106
108
|
void IceUdpMuxListenerWrapper::stop(const Napi::CallbackInfo &info)
|
|
@@ -111,40 +113,45 @@ void IceUdpMuxListenerWrapper::stop(const Napi::CallbackInfo &info)
|
|
|
111
113
|
|
|
112
114
|
void IceUdpMuxListenerWrapper::onUnhandledStunRequest(const Napi::CallbackInfo &info)
|
|
113
115
|
{
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
116
|
+
PLOG_DEBUG << "IceUdpMuxListenerWrapper::onUnhandledStunRequest() called";
|
|
117
|
+
Napi::Env env = info.Env();
|
|
118
|
+
int length = info.Length();
|
|
119
|
+
|
|
120
|
+
if (!iceUdpMuxListenerPtr)
|
|
121
|
+
{
|
|
122
|
+
Napi::Error::New(env, "IceUdpMuxListenerWrapper::onUnhandledStunRequest() called on destroyed IceUdpMuxListener")
|
|
123
|
+
.ThrowAsJavaScriptException();
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (length < 1 || !info[0].IsFunction())
|
|
128
|
+
{
|
|
129
|
+
Napi::TypeError::New(env, "Function expected").ThrowAsJavaScriptException();
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Callback
|
|
134
|
+
mOnUnhandledStunRequestCallback = std::make_unique<ThreadSafeCallback>(info[0].As<Napi::Function>());
|
|
135
|
+
|
|
136
|
+
iceUdpMuxListenerPtr->OnUnhandledStunRequest(
|
|
137
|
+
[&](rtc::IceUdpMuxRequest request)
|
|
138
|
+
{
|
|
139
|
+
PLOG_DEBUG << "IceUdpMuxListenerWrapper::onUnhandledStunRequest() IceUdpMuxCallback call(1)";
|
|
140
|
+
|
|
141
|
+
if (mOnUnhandledStunRequestCallback)
|
|
125
142
|
{
|
|
126
|
-
|
|
127
|
-
|
|
143
|
+
mOnUnhandledStunRequestCallback->call(
|
|
144
|
+
[request = std::move(request)](Napi::Env env, std::vector<napi_value> &args)
|
|
145
|
+
{
|
|
146
|
+
Napi::Object reqObj = Napi::Object::New(env);
|
|
147
|
+
reqObj.Set("ufrag", request.remoteUfrag.c_str());
|
|
148
|
+
reqObj.Set("host", request.remoteAddress.c_str());
|
|
149
|
+
reqObj.Set("port", request.remotePort);
|
|
150
|
+
|
|
151
|
+
args = {reqObj};
|
|
152
|
+
});
|
|
128
153
|
}
|
|
129
154
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
iceUdpMuxListenerPtr->OnUnhandledStunRequest([&](rtc::IceUdpMuxRequest request)
|
|
134
|
-
{
|
|
135
|
-
PLOG_DEBUG << "IceUdpMuxListenerWrapper::onUnhandledStunRequest() IceUdpMuxCallback call(1)";
|
|
136
|
-
|
|
137
|
-
if (mOnUnhandledStunRequestCallback) {
|
|
138
|
-
mOnUnhandledStunRequestCallback->call([request = std::move(request)](Napi::Env env, std::vector<napi_value> &args) {
|
|
139
|
-
Napi::Object reqObj = Napi::Object::New(env);
|
|
140
|
-
reqObj.Set("ufrag", request.remoteUfrag.c_str());
|
|
141
|
-
reqObj.Set("host", request.remoteAddress.c_str());
|
|
142
|
-
reqObj.Set("port", request.remotePort);
|
|
143
|
-
|
|
144
|
-
args = {reqObj};
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
PLOG_DEBUG << "IceUdpMuxListenerWrapper::onUnhandledStunRequest() IceUdpMuxCallback call(2)";
|
|
149
|
-
});
|
|
155
|
+
PLOG_DEBUG << "IceUdpMuxListenerWrapper::onUnhandledStunRequest() IceUdpMuxCallback call(2)";
|
|
156
|
+
});
|
|
150
157
|
}
|
package/src/cpp/main.cpp
CHANGED
|
@@ -5,7 +5,14 @@
|
|
|
5
5
|
#include "ice-udp-mux-listener-wrapper.h"
|
|
6
6
|
|
|
7
7
|
#if RTC_ENABLE_MEDIA == 1
|
|
8
|
+
#include "media-av1rtppacketizer-wrapper.h"
|
|
9
|
+
#include "media-h264rtppacketizer-wrapper.h"
|
|
10
|
+
#include "media-h265rtppacketizer-wrapper.h"
|
|
11
|
+
#include "media-rtcpnackresponder-wrapper.h"
|
|
8
12
|
#include "media-rtcpreceivingsession-wrapper.h"
|
|
13
|
+
#include "media-rtcpsrreporter-wrapper.h"
|
|
14
|
+
#include "media-rtppacketizationconfig-wrapper.h"
|
|
15
|
+
#include "media-rtppacketizer-wrapper.h"
|
|
9
16
|
#include "media-track-wrapper.h"
|
|
10
17
|
#include "media-video-wrapper.h"
|
|
11
18
|
#include "media-audio-wrapper.h"
|
|
@@ -18,25 +25,32 @@
|
|
|
18
25
|
|
|
19
26
|
Napi::Object InitAll(Napi::Env env, Napi::Object exports)
|
|
20
27
|
{
|
|
21
|
-
|
|
28
|
+
RtcWrapper::Init(env, exports);
|
|
22
29
|
|
|
23
30
|
#if RTC_ENABLE_MEDIA == 1
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
31
|
+
AV1RtpPacketizerWrapper::Init(env, exports);
|
|
32
|
+
H264RtpPacketizerWrapper::Init(env, exports);
|
|
33
|
+
H265RtpPacketizerWrapper::Init(env, exports);
|
|
34
|
+
RtcpNackResponderWrapper::Init(env, exports);
|
|
35
|
+
RtcpReceivingSessionWrapper::Init(env, exports);
|
|
36
|
+
RtcpSrReporterWrapper::Init(env, exports);
|
|
37
|
+
RtpPacketizationConfigWrapper::Init(env, exports);
|
|
38
|
+
RtpPacketizerWrapper::Init(env, exports);
|
|
39
|
+
TrackWrapper::Init(env, exports);
|
|
40
|
+
VideoWrapper::Init(env, exports);
|
|
41
|
+
AudioWrapper::Init(env, exports);
|
|
28
42
|
#endif
|
|
29
43
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
44
|
+
DataChannelWrapper::Init(env, exports);
|
|
45
|
+
IceUdpMuxListenerWrapper::Init(env, exports);
|
|
46
|
+
PeerConnectionWrapper::Init(env, exports);
|
|
33
47
|
|
|
34
48
|
#if RTC_ENABLE_WEBSOCKET == 1
|
|
35
|
-
|
|
36
|
-
|
|
49
|
+
WebSocketWrapper::Init(env, exports);
|
|
50
|
+
WebSocketServerWrapper::Init(env, exports);
|
|
37
51
|
#endif
|
|
38
52
|
|
|
39
|
-
|
|
53
|
+
return exports;
|
|
40
54
|
}
|
|
41
55
|
|
|
42
56
|
NODE_API_MODULE(nodeDataChannel, InitAll)
|