node-datachannel 0.28.0 → 0.30.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.
Files changed (59) hide show
  1. package/.clang-format +17 -0
  2. package/.prettierignore +3 -0
  3. package/API.md +30 -0
  4. package/BULDING.md +2 -1
  5. package/CMakeLists.txt +7 -2
  6. package/dist/cjs/lib/index.cjs +4 -1
  7. package/dist/cjs/lib/index.cjs.map +1 -1
  8. package/dist/cjs/polyfill/Events.cjs.map +1 -1
  9. package/dist/cjs/polyfill/RTCDataChannel.cjs +18 -5
  10. package/dist/cjs/polyfill/RTCDataChannel.cjs.map +1 -1
  11. package/dist/cjs/polyfill/RTCDtlsTransport.cjs.map +1 -1
  12. package/dist/cjs/polyfill/RTCPeerConnection.cjs +6 -1
  13. package/dist/cjs/polyfill/RTCPeerConnection.cjs.map +1 -1
  14. package/dist/cjs/polyfill/RTCSctpTransport.cjs.map +1 -1
  15. package/dist/esm/lib/index.mjs +4 -2
  16. package/dist/esm/lib/index.mjs.map +1 -1
  17. package/dist/esm/polyfill/Events.mjs.map +1 -1
  18. package/dist/esm/polyfill/RTCDataChannel.mjs +18 -5
  19. package/dist/esm/polyfill/RTCDataChannel.mjs.map +1 -1
  20. package/dist/esm/polyfill/RTCDtlsTransport.mjs.map +1 -1
  21. package/dist/esm/polyfill/RTCPeerConnection.mjs +6 -1
  22. package/dist/esm/polyfill/RTCPeerConnection.mjs.map +1 -1
  23. package/dist/esm/polyfill/RTCSctpTransport.mjs.map +1 -1
  24. package/dist/types/lib/index.d.ts +14 -3
  25. package/dist/types/lib/types.d.ts +24 -1
  26. package/dist/types/polyfill/RTCPeerConnection.d.ts +1 -2
  27. package/package.json +4 -2
  28. package/src/cpp/data-channel-wrapper.cpp +432 -411
  29. package/src/cpp/data-channel-wrapper.h +0 -2
  30. package/src/cpp/ice-udp-mux-listener-wrapper.cpp +157 -0
  31. package/src/cpp/ice-udp-mux-listener-wrapper.h +43 -0
  32. package/src/cpp/main.cpp +12 -10
  33. package/src/cpp/media-audio-wrapper.cpp +291 -294
  34. package/src/cpp/media-audio-wrapper.h +1 -3
  35. package/src/cpp/media-direction.cpp +32 -32
  36. package/src/cpp/media-direction.h +1 -1
  37. package/src/cpp/media-rtcpreceivingsession-wrapper.cpp +24 -28
  38. package/src/cpp/media-rtcpreceivingsession-wrapper.h +0 -5
  39. package/src/cpp/media-track-wrapper.cpp +350 -339
  40. package/src/cpp/media-track-wrapper.h +0 -3
  41. package/src/cpp/media-video-wrapper.cpp +312 -313
  42. package/src/cpp/media-video-wrapper.h +1 -3
  43. package/src/cpp/peer-connection-wrapper.cpp +1097 -984
  44. package/src/cpp/peer-connection-wrapper.h +1 -2
  45. package/src/cpp/rtc-wrapper.cpp +142 -138
  46. package/src/cpp/rtc-wrapper.h +8 -10
  47. package/src/cpp/thread-safe-callback.cpp +39 -50
  48. package/src/cpp/thread-safe-callback.h +26 -28
  49. package/src/cpp/web-socket-server-wrapper.cpp +205 -199
  50. package/src/cpp/web-socket-server-wrapper.h +0 -4
  51. package/src/cpp/web-socket-wrapper.cpp +625 -598
  52. package/src/cpp/web-socket-wrapper.h +0 -3
  53. package/src/lib/index.ts +14 -1
  54. package/src/lib/types.ts +26 -0
  55. package/src/polyfill/Events.ts +4 -1
  56. package/src/polyfill/RTCDataChannel.ts +24 -5
  57. package/src/polyfill/RTCDtlsTransport.ts +1 -1
  58. package/src/polyfill/RTCPeerConnection.ts +9 -3
  59. package/src/polyfill/RTCSctpTransport.ts +2 -2
@@ -6,455 +6,452 @@ std::unordered_set<AudioWrapper *> AudioWrapper::instances;
6
6
 
7
7
  Napi::Object AudioWrapper::Init(Napi::Env env, Napi::Object exports)
8
8
  {
9
- Napi::HandleScope scope(env);
10
-
11
- Napi::Function func = DefineClass(
12
- env,
13
- "Audio",
14
- {
15
- InstanceValue("media-type-audio", Napi::Boolean::New(env, true)),
16
- InstanceMethod("addAudioCodec", &AudioWrapper::addAudioCodec),
17
- InstanceMethod("addOpusCodec", &AudioWrapper::addOpusCodec),
18
- InstanceMethod("direction", &AudioWrapper::direction),
19
- InstanceMethod("generateSdp", &AudioWrapper::generateSdp),
20
- InstanceMethod("mid", &AudioWrapper::mid),
21
- InstanceMethod("setDirection", &AudioWrapper::setDirection),
22
- InstanceMethod("description", &AudioWrapper::description),
23
- InstanceMethod("removeFormat", &AudioWrapper::removeFormat),
24
- InstanceMethod("addSSRC", &AudioWrapper::addSSRC),
25
- InstanceMethod("removeSSRC", &AudioWrapper::removeSSRC),
26
- InstanceMethod("replaceSSRC", &AudioWrapper::replaceSSRC),
27
- InstanceMethod("hasSSRC", &AudioWrapper::hasSSRC),
28
- InstanceMethod("getSSRCs", &AudioWrapper::getSSRCs),
29
- InstanceMethod("getCNameForSsrc", &AudioWrapper::getCNameForSsrc),
30
- InstanceMethod("setBitrate", &AudioWrapper::setBitrate),
31
- InstanceMethod("getBitrate", &AudioWrapper::getBitrate),
32
- InstanceMethod("hasPayloadType", &AudioWrapper::hasPayloadType),
33
- InstanceMethod("addRTXCodec", &AudioWrapper::addRTXCodec),
34
- InstanceMethod("addRTPMap", &AudioWrapper::addRTPMap),
35
- InstanceMethod("parseSdpLine", &AudioWrapper::parseSdpLine),
36
- });
37
-
38
- // If this is not the first call, we don't want to reassign the constructor (hot-reload problem)
39
- if(constructor.IsEmpty())
40
- {
41
- constructor = Napi::Persistent(func);
42
- constructor.SuppressDestruct();
43
- }
44
-
45
- exports.Set("Audio", func);
46
- return exports;
9
+ Napi::HandleScope scope(env);
10
+
11
+ Napi::Function func = DefineClass(env, "Audio",
12
+ {
13
+ InstanceValue("media-type-audio", Napi::Boolean::New(env, true)),
14
+ InstanceMethod("addAudioCodec", &AudioWrapper::addAudioCodec),
15
+ InstanceMethod("addOpusCodec", &AudioWrapper::addOpusCodec),
16
+ InstanceMethod("direction", &AudioWrapper::direction),
17
+ InstanceMethod("generateSdp", &AudioWrapper::generateSdp),
18
+ InstanceMethod("mid", &AudioWrapper::mid),
19
+ InstanceMethod("setDirection", &AudioWrapper::setDirection),
20
+ InstanceMethod("description", &AudioWrapper::description),
21
+ InstanceMethod("removeFormat", &AudioWrapper::removeFormat),
22
+ InstanceMethod("addSSRC", &AudioWrapper::addSSRC),
23
+ InstanceMethod("removeSSRC", &AudioWrapper::removeSSRC),
24
+ InstanceMethod("replaceSSRC", &AudioWrapper::replaceSSRC),
25
+ InstanceMethod("hasSSRC", &AudioWrapper::hasSSRC),
26
+ InstanceMethod("getSSRCs", &AudioWrapper::getSSRCs),
27
+ InstanceMethod("getCNameForSsrc", &AudioWrapper::getCNameForSsrc),
28
+ InstanceMethod("setBitrate", &AudioWrapper::setBitrate),
29
+ InstanceMethod("getBitrate", &AudioWrapper::getBitrate),
30
+ InstanceMethod("hasPayloadType", &AudioWrapper::hasPayloadType),
31
+ InstanceMethod("addRTXCodec", &AudioWrapper::addRTXCodec),
32
+ InstanceMethod("addRTPMap", &AudioWrapper::addRTPMap),
33
+ InstanceMethod("parseSdpLine", &AudioWrapper::parseSdpLine),
34
+ });
35
+
36
+ // If this is not the first call, we don't want to reassign the constructor (hot-reload problem)
37
+ if (constructor.IsEmpty())
38
+ {
39
+ constructor = Napi::Persistent(func);
40
+ constructor.SuppressDestruct();
41
+ }
42
+
43
+ exports.Set("Audio", func);
44
+ return exports;
47
45
  }
48
46
 
49
47
  AudioWrapper::AudioWrapper(const Napi::CallbackInfo &info) : Napi::ObjectWrap<AudioWrapper>(info)
50
48
  {
51
- Napi::Env env = info.Env();
52
- int length = info.Length();
49
+ Napi::Env env = info.Env();
50
+ int length = info.Length();
53
51
 
54
- std::string mid = "audio";
55
- rtc::Description::Direction dir = rtc::Description::Direction::SendOnly;
52
+ std::string mid = "audio";
53
+ rtc::Description::Direction dir = rtc::Description::Direction::SendOnly;
56
54
 
57
- // optional
58
- if (length > 0)
55
+ // optional
56
+ if (length > 0)
57
+ {
58
+ if (!info[0].IsString())
59
59
  {
60
- if (!info[0].IsString())
61
- {
62
- Napi::TypeError::New(env, "mid (String) expected").ThrowAsJavaScriptException();
63
- return;
64
- }
65
- mid = info[0].As<Napi::String>().ToString();
60
+ Napi::TypeError::New(env, "mid (String) expected").ThrowAsJavaScriptException();
61
+ return;
66
62
  }
63
+ mid = info[0].As<Napi::String>().ToString();
64
+ }
67
65
 
68
- // ootional
69
- if (length > 1)
66
+ // ootional
67
+ if (length > 1)
68
+ {
69
+ if (!info[1].IsString())
70
70
  {
71
- if (!info[1].IsString())
72
- {
73
- Napi::TypeError::New(env, "direction (String) expected").ThrowAsJavaScriptException();
74
- return;
75
- }
76
-
77
- std::string dirAsStr = info[1].As<Napi::String>().ToString();
78
- dir = strToDirection(dirAsStr);
71
+ Napi::TypeError::New(env, "direction (String) expected").ThrowAsJavaScriptException();
72
+ return;
79
73
  }
80
74
 
81
- mAudioPtr = std::make_unique<rtc::Description::Audio>(mid, dir);
75
+ std::string dirAsStr = info[1].As<Napi::String>().ToString();
76
+ dir = strToDirection(dirAsStr);
77
+ }
82
78
 
83
- instances.insert(this);
79
+ mAudioPtr = std::make_unique<rtc::Description::Audio>(mid, dir);
80
+
81
+ instances.insert(this);
84
82
  }
85
83
 
86
84
  AudioWrapper::~AudioWrapper()
87
85
  {
88
- mAudioPtr.reset();
89
- instances.erase(this);
86
+ mAudioPtr.reset();
87
+ instances.erase(this);
90
88
  }
91
89
 
92
- rtc::Description::Audio AudioWrapper::getAudioInstance()
93
- {
94
- return *(mAudioPtr.get());
95
- }
90
+ rtc::Description::Audio AudioWrapper::getAudioInstance() { return *(mAudioPtr.get()); }
96
91
 
97
92
  void AudioWrapper::addAudioCodec(const Napi::CallbackInfo &info)
98
93
  {
99
- Napi::Env env = info.Env();
100
- int length = info.Length();
101
-
102
- if (length < 2 || !info[0].IsNumber() || !info[1].IsString())
103
- {
104
- Napi::TypeError::New(env, "We expect (Number, String, String[optional]) as param").ThrowAsJavaScriptException();
105
- return;
106
- }
107
-
108
- int payloadType = info[0].As<Napi::Number>().ToNumber();
109
- std::string codec = info[1].As<Napi::String>().ToString();
110
- std::optional<std::string> profile = std::nullopt;
111
-
112
- if (length > 2)
94
+ Napi::Env env = info.Env();
95
+ int length = info.Length();
96
+
97
+ if (length < 2 || !info[0].IsNumber() || !info[1].IsString())
98
+ {
99
+ Napi::TypeError::New(env, "We expect (Number, String, String[optional]) as param").ThrowAsJavaScriptException();
100
+ return;
101
+ }
102
+
103
+ int payloadType = info[0].As<Napi::Number>().ToNumber();
104
+ std::string codec = info[1].As<Napi::String>().ToString();
105
+ std::optional<std::string> profile = std::nullopt;
106
+
107
+ if (length > 2)
108
+ {
109
+ if (!info[2].IsString())
113
110
  {
114
- if (!info[2].IsString())
115
- {
116
- Napi::TypeError::New(env, "profile (String) expected").ThrowAsJavaScriptException();
117
- return;
118
- }
119
- profile = info[2].As<Napi::String>().ToString();
111
+ Napi::TypeError::New(env, "profile (String) expected").ThrowAsJavaScriptException();
112
+ return;
120
113
  }
114
+ profile = info[2].As<Napi::String>().ToString();
115
+ }
121
116
 
122
- mAudioPtr->addAudioCodec(payloadType, codec, profile);
117
+ mAudioPtr->addAudioCodec(payloadType, codec, profile);
123
118
  }
124
119
 
125
120
  void AudioWrapper::addOpusCodec(const Napi::CallbackInfo &info)
126
121
  {
127
- Napi::Env env = info.Env();
128
- int length = info.Length();
122
+ Napi::Env env = info.Env();
123
+ int length = info.Length();
129
124
 
130
- if (length < 1 || !info[0].IsNumber())
131
- {
132
- Napi::TypeError::New(env, "We expect (Number) as param").ThrowAsJavaScriptException();
133
- return;
134
- }
125
+ if (length < 1 || !info[0].IsNumber())
126
+ {
127
+ Napi::TypeError::New(env, "We expect (Number) as param").ThrowAsJavaScriptException();
128
+ return;
129
+ }
135
130
 
136
- int payloadType = info[0].As<Napi::Number>().ToNumber();
137
- std::optional<std::string> profile = rtc::DEFAULT_OPUS_AUDIO_PROFILE;
131
+ int payloadType = info[0].As<Napi::Number>().ToNumber();
132
+ std::optional<std::string> profile = rtc::DEFAULT_OPUS_AUDIO_PROFILE;
138
133
 
139
- if (length > 1)
134
+ if (length > 1)
135
+ {
136
+ if (!info[1].IsString())
140
137
  {
141
- if (!info[1].IsString())
142
- {
143
- Napi::TypeError::New(env, "profile (String) expected").ThrowAsJavaScriptException();
144
- return;
145
- }
146
- profile = info[1].As<Napi::String>().ToString();
138
+ Napi::TypeError::New(env, "profile (String) expected").ThrowAsJavaScriptException();
139
+ return;
147
140
  }
141
+ profile = info[1].As<Napi::String>().ToString();
142
+ }
148
143
 
149
- mAudioPtr->addOpusCodec(payloadType, profile);
144
+ mAudioPtr->addOpusCodec(payloadType, profile);
150
145
  }
151
146
 
152
-
153
147
  Napi::Value AudioWrapper::direction(const Napi::CallbackInfo &info)
154
148
  {
155
- Napi::Env env = info.Env();
156
- return Napi::String::New(env, directionToStr(mAudioPtr->direction()));
149
+ Napi::Env env = info.Env();
150
+ return Napi::String::New(env, directionToStr(mAudioPtr->direction()));
157
151
  }
158
152
 
159
153
  Napi::Value AudioWrapper::generateSdp(const Napi::CallbackInfo &info)
160
154
  {
161
- Napi::Env env = info.Env();
162
- int length = info.Length();
155
+ Napi::Env env = info.Env();
156
+ int length = info.Length();
163
157
 
164
- if (length < 3 || !info[0].IsString() || !info[1].IsString() || !info[2].IsNumber())
165
- {
166
- Napi::TypeError::New(env, "We expect (String, String, Number) as param").ThrowAsJavaScriptException();
167
- return Napi::String::New(env, "");
168
- }
158
+ if (length < 3 || !info[0].IsString() || !info[1].IsString() || !info[2].IsNumber())
159
+ {
160
+ Napi::TypeError::New(env, "We expect (String, String, Number) as param").ThrowAsJavaScriptException();
161
+ return Napi::String::New(env, "");
162
+ }
169
163
 
170
- std::string eol = info[0].As<Napi::String>().ToString();
171
- std::string addr = info[1].As<Napi::String>().ToString();
172
- uint16_t port = info[2].As<Napi::Number>().Uint32Value();
164
+ std::string eol = info[0].As<Napi::String>().ToString();
165
+ std::string addr = info[1].As<Napi::String>().ToString();
166
+ uint16_t port = info[2].As<Napi::Number>().Uint32Value();
173
167
 
174
- return Napi::String::New(env, mAudioPtr->generateSdp(eol, addr, port));
168
+ return Napi::String::New(env, mAudioPtr->generateSdp(eol, addr, port));
175
169
  }
176
170
 
177
171
  Napi::Value AudioWrapper::mid(const Napi::CallbackInfo &info)
178
172
  {
179
- Napi::Env env = info.Env();
180
- return Napi::String::New(env, mAudioPtr->mid());
173
+ Napi::Env env = info.Env();
174
+ return Napi::String::New(env, mAudioPtr->mid());
181
175
  }
182
176
 
183
177
  void AudioWrapper::setDirection(const Napi::CallbackInfo &info)
184
178
  {
185
- Napi::Env env = info.Env();
186
- int length = info.Length();
187
-
188
- if (length < 1 || !info[0].IsString())
189
- {
190
- Napi::TypeError::New(env, "We expect (String) as param").ThrowAsJavaScriptException();
191
- return;
192
- }
193
-
194
- std::string dirAsStr = info[0].As<Napi::String>().ToString();
195
- rtc::Description::Direction dir = strToDirection(dirAsStr);
196
- mAudioPtr->setDirection(dir);
179
+ Napi::Env env = info.Env();
180
+ int length = info.Length();
181
+
182
+ if (length < 1 || !info[0].IsString())
183
+ {
184
+ Napi::TypeError::New(env, "We expect (String) as param").ThrowAsJavaScriptException();
185
+ return;
186
+ }
187
+
188
+ std::string dirAsStr = info[0].As<Napi::String>().ToString();
189
+ rtc::Description::Direction dir = strToDirection(dirAsStr);
190
+ mAudioPtr->setDirection(dir);
197
191
  }
198
192
 
199
193
  Napi::Value AudioWrapper::description(const Napi::CallbackInfo &info)
200
194
  {
201
- Napi::Env env = info.Env();
202
- return Napi::String::New(env, mAudioPtr->description());
195
+ Napi::Env env = info.Env();
196
+ return Napi::String::New(env, mAudioPtr->description());
203
197
  }
204
198
 
205
199
  void AudioWrapper::removeFormat(const Napi::CallbackInfo &info)
206
200
  {
207
- Napi::Env env = info.Env();
208
- int length = info.Length();
201
+ Napi::Env env = info.Env();
202
+ int length = info.Length();
209
203
 
210
- if (length < 1 || !info[0].IsString())
211
- {
212
- Napi::TypeError::New(env, "We expect (String) as param").ThrowAsJavaScriptException();
213
- return;
214
- }
204
+ if (length < 1 || !info[0].IsString())
205
+ {
206
+ Napi::TypeError::New(env, "We expect (String) as param").ThrowAsJavaScriptException();
207
+ return;
208
+ }
215
209
 
216
- std::string fmt = info[0].As<Napi::String>().ToString();
210
+ std::string fmt = info[0].As<Napi::String>().ToString();
217
211
 
218
- mAudioPtr->removeFormat(fmt);
212
+ mAudioPtr->removeFormat(fmt);
219
213
  }
220
214
 
221
215
  void AudioWrapper::addSSRC(const Napi::CallbackInfo &info)
222
216
  {
223
- Napi::Env env = info.Env();
224
- int length = info.Length();
225
-
226
- if (length < 1 || !info[0].IsNumber())
217
+ Napi::Env env = info.Env();
218
+ int length = info.Length();
219
+
220
+ if (length < 1 || !info[0].IsNumber())
221
+ {
222
+ Napi::TypeError::New(env, "We expect (Number, String[optional], String[optional], String[optional]) as param")
223
+ .ThrowAsJavaScriptException();
224
+ return;
225
+ }
226
+
227
+ uint32_t ssrc = static_cast<uint32_t>(info[0].As<Napi::Number>().ToNumber());
228
+ std::optional<std::string> name;
229
+ std::optional<std::string> msid = std::nullopt;
230
+ std::optional<std::string> trackID = std::nullopt;
231
+
232
+ if (length > 1)
233
+ {
234
+ if (!info[1].IsString())
227
235
  {
228
- Napi::TypeError::New(env, "We expect (Number, String[optional], String[optional], String[optional]) as param").ThrowAsJavaScriptException();
229
- return;
236
+ Napi::TypeError::New(env, "name as String expected").ThrowAsJavaScriptException();
237
+ return;
230
238
  }
239
+ name = info[1].As<Napi::String>().ToString();
240
+ }
231
241
 
232
- uint32_t ssrc = static_cast<uint32_t>(info[0].As<Napi::Number>().ToNumber());
233
- std::optional<std::string> name;
234
- std::optional<std::string> msid = std::nullopt;
235
- std::optional<std::string> trackID = std::nullopt;
236
-
237
- if (length > 1)
238
- {
239
- if (!info[1].IsString())
240
- {
241
- Napi::TypeError::New(env, "name as String expected").ThrowAsJavaScriptException();
242
- return;
243
- }
244
- name = info[1].As<Napi::String>().ToString();
245
- }
246
-
247
- if (length > 2)
242
+ if (length > 2)
243
+ {
244
+ if (!info[2].IsString())
248
245
  {
249
- if (!info[2].IsString())
250
- {
251
- Napi::TypeError::New(env, "msid as String expected").ThrowAsJavaScriptException();
252
- return;
253
- }
254
- msid = info[2].As<Napi::String>().ToString();
246
+ Napi::TypeError::New(env, "msid as String expected").ThrowAsJavaScriptException();
247
+ return;
255
248
  }
249
+ msid = info[2].As<Napi::String>().ToString();
250
+ }
256
251
 
257
- if (length > 3)
252
+ if (length > 3)
253
+ {
254
+ if (!info[3].IsString())
258
255
  {
259
- if (!info[3].IsString())
260
- {
261
- Napi::TypeError::New(env, "trackID as String expected").ThrowAsJavaScriptException();
262
- return;
263
- }
264
- trackID = info[3].As<Napi::String>().ToString();
256
+ Napi::TypeError::New(env, "trackID as String expected").ThrowAsJavaScriptException();
257
+ return;
265
258
  }
259
+ trackID = info[3].As<Napi::String>().ToString();
260
+ }
266
261
 
267
- mAudioPtr->addSSRC(ssrc, name, msid, trackID);
262
+ mAudioPtr->addSSRC(ssrc, name, msid, trackID);
268
263
  }
269
264
 
270
265
  void AudioWrapper::removeSSRC(const Napi::CallbackInfo &info)
271
266
  {
272
- Napi::Env env = info.Env();
273
- int length = info.Length();
267
+ Napi::Env env = info.Env();
268
+ int length = info.Length();
274
269
 
275
- if (length < 1 || !info[0].IsNumber())
276
- {
277
- Napi::TypeError::New(env, "We expect (Number) as param").ThrowAsJavaScriptException();
278
- return;
279
- }
270
+ if (length < 1 || !info[0].IsNumber())
271
+ {
272
+ Napi::TypeError::New(env, "We expect (Number) as param").ThrowAsJavaScriptException();
273
+ return;
274
+ }
280
275
 
281
- uint32_t ssrc = static_cast<uint32_t>(info[0].As<Napi::Number>().ToNumber());
276
+ uint32_t ssrc = static_cast<uint32_t>(info[0].As<Napi::Number>().ToNumber());
282
277
 
283
- mAudioPtr->removeSSRC(ssrc);
278
+ mAudioPtr->removeSSRC(ssrc);
284
279
  }
285
280
 
286
281
  void AudioWrapper::replaceSSRC(const Napi::CallbackInfo &info)
287
282
  {
288
- Napi::Env env = info.Env();
289
- int length = info.Length();
290
-
291
- if (length < 2 || !info[0].IsNumber() || !info[1].IsNumber())
292
- {
293
- Napi::TypeError::New(env, "We expect (Number, Number, String[optional], String[optional], String[optional]) as param").ThrowAsJavaScriptException();
294
- return;
295
- }
296
-
297
- uint32_t ssrc = static_cast<uint32_t>(info[0].As<Napi::Number>().ToNumber());
298
- uint32_t oldSsrc = static_cast<uint32_t>(info[1].As<Napi::Number>().ToNumber());
299
- std::optional<std::string> name;
300
- std::optional<std::string> msid = std::nullopt;
301
- std::optional<std::string> trackID = std::nullopt;
302
-
303
- if (length > 2)
283
+ Napi::Env env = info.Env();
284
+ int length = info.Length();
285
+
286
+ if (length < 2 || !info[0].IsNumber() || !info[1].IsNumber())
287
+ {
288
+ Napi::TypeError::New(env,
289
+ "We expect (Number, Number, String[optional], String[optional], String[optional]) as param")
290
+ .ThrowAsJavaScriptException();
291
+ return;
292
+ }
293
+
294
+ uint32_t ssrc = static_cast<uint32_t>(info[0].As<Napi::Number>().ToNumber());
295
+ uint32_t oldSsrc = static_cast<uint32_t>(info[1].As<Napi::Number>().ToNumber());
296
+ std::optional<std::string> name;
297
+ std::optional<std::string> msid = std::nullopt;
298
+ std::optional<std::string> trackID = std::nullopt;
299
+
300
+ if (length > 2)
301
+ {
302
+ if (!info[2].IsString())
304
303
  {
305
- if (!info[2].IsString())
306
- {
307
- Napi::TypeError::New(env, "name as String expected").ThrowAsJavaScriptException();
308
- return;
309
- }
310
- name = info[2].As<Napi::String>().ToString();
304
+ Napi::TypeError::New(env, "name as String expected").ThrowAsJavaScriptException();
305
+ return;
311
306
  }
307
+ name = info[2].As<Napi::String>().ToString();
308
+ }
312
309
 
313
- if (length > 3)
310
+ if (length > 3)
311
+ {
312
+ if (!info[3].IsString())
314
313
  {
315
- if (!info[3].IsString())
316
- {
317
- Napi::TypeError::New(env, "msid as String expected").ThrowAsJavaScriptException();
318
- return;
319
- }
320
- msid = info[3].As<Napi::String>().ToString();
314
+ Napi::TypeError::New(env, "msid as String expected").ThrowAsJavaScriptException();
315
+ return;
321
316
  }
317
+ msid = info[3].As<Napi::String>().ToString();
318
+ }
322
319
 
323
- if (length > 4)
320
+ if (length > 4)
321
+ {
322
+ if (!info[4].IsString())
324
323
  {
325
- if (!info[4].IsString())
326
- {
327
- Napi::TypeError::New(env, "trackID as String expected").ThrowAsJavaScriptException();
328
- return;
329
- }
330
- trackID = info[4].As<Napi::String>().ToString();
324
+ Napi::TypeError::New(env, "trackID as String expected").ThrowAsJavaScriptException();
325
+ return;
331
326
  }
327
+ trackID = info[4].As<Napi::String>().ToString();
328
+ }
332
329
 
333
- mAudioPtr->replaceSSRC(oldSsrc, ssrc, name, msid, trackID);
330
+ mAudioPtr->replaceSSRC(oldSsrc, ssrc, name, msid, trackID);
334
331
  }
335
332
 
336
333
  Napi::Value AudioWrapper::hasSSRC(const Napi::CallbackInfo &info)
337
334
  {
338
- Napi::Env env = info.Env();
339
- int length = info.Length();
335
+ Napi::Env env = info.Env();
336
+ int length = info.Length();
340
337
 
341
- if (length < 1 || !info[0].IsNumber())
342
- {
343
- Napi::TypeError::New(env, "We expect (Number) as param").ThrowAsJavaScriptException();
344
- return env.Null();
345
- }
338
+ if (length < 1 || !info[0].IsNumber())
339
+ {
340
+ Napi::TypeError::New(env, "We expect (Number) as param").ThrowAsJavaScriptException();
341
+ return env.Null();
342
+ }
346
343
 
347
- uint32_t ssrc = static_cast<uint32_t>(info[0].As<Napi::Number>().ToNumber());
344
+ uint32_t ssrc = static_cast<uint32_t>(info[0].As<Napi::Number>().ToNumber());
348
345
 
349
- return Napi::Boolean::New(env, mAudioPtr->hasSSRC(ssrc));
346
+ return Napi::Boolean::New(env, mAudioPtr->hasSSRC(ssrc));
350
347
  }
351
348
 
352
349
  Napi::Value AudioWrapper::getSSRCs(const Napi::CallbackInfo &info)
353
350
  {
354
- Napi::Env env = info.Env();
351
+ Napi::Env env = info.Env();
355
352
 
356
- auto list = mAudioPtr->getSSRCs();
353
+ auto list = mAudioPtr->getSSRCs();
357
354
 
358
- Napi::Uint32Array napiArr = Napi::Uint32Array::New(env, list.size());
359
- for (size_t i = 0; i < list.size(); i++)
360
- napiArr[i] = list[i];
355
+ Napi::Uint32Array napiArr = Napi::Uint32Array::New(env, list.size());
356
+ for (size_t i = 0; i < list.size(); i++)
357
+ napiArr[i] = list[i];
361
358
 
362
- return napiArr;
359
+ return napiArr;
363
360
  }
364
361
 
365
362
  Napi::Value AudioWrapper::getCNameForSsrc(const Napi::CallbackInfo &info)
366
363
  {
367
- Napi::Env env = info.Env();
368
- int length = info.Length();
364
+ Napi::Env env = info.Env();
365
+ int length = info.Length();
369
366
 
370
- if (length < 1 || !info[0].IsNumber())
371
- {
372
- Napi::TypeError::New(env, "We expect (Number) as param").ThrowAsJavaScriptException();
373
- return env.Null();
374
- }
367
+ if (length < 1 || !info[0].IsNumber())
368
+ {
369
+ Napi::TypeError::New(env, "We expect (Number) as param").ThrowAsJavaScriptException();
370
+ return env.Null();
371
+ }
375
372
 
376
- uint32_t ssrc = static_cast<uint32_t>(info[0].As<Napi::Number>().ToNumber());
373
+ uint32_t ssrc = static_cast<uint32_t>(info[0].As<Napi::Number>().ToNumber());
377
374
 
378
- std::optional<std::string> name = mAudioPtr->getCNameForSsrc(ssrc);
375
+ std::optional<std::string> name = mAudioPtr->getCNameForSsrc(ssrc);
379
376
 
380
- if (!name.has_value())
381
- return env.Null();
377
+ if (!name.has_value())
378
+ return env.Null();
382
379
 
383
- return Napi::String::New(env, name.value());
380
+ return Napi::String::New(env, name.value());
384
381
  }
385
382
 
386
383
  void AudioWrapper::setBitrate(const Napi::CallbackInfo &info)
387
384
  {
388
- Napi::Env env = info.Env();
389
- int length = info.Length();
385
+ Napi::Env env = info.Env();
386
+ int length = info.Length();
390
387
 
391
- if (length < 1 || !info[0].IsNumber())
392
- {
393
- Napi::TypeError::New(env, "We expect (Number) as param").ThrowAsJavaScriptException();
394
- return;
395
- }
388
+ if (length < 1 || !info[0].IsNumber())
389
+ {
390
+ Napi::TypeError::New(env, "We expect (Number) as param").ThrowAsJavaScriptException();
391
+ return;
392
+ }
396
393
 
397
- unsigned int bitrate = static_cast<uint32_t>(info[0].As<Napi::Number>().ToNumber());
398
- mAudioPtr->setBitrate(bitrate);
394
+ unsigned int bitrate = static_cast<uint32_t>(info[0].As<Napi::Number>().ToNumber());
395
+ mAudioPtr->setBitrate(bitrate);
399
396
  }
400
397
 
401
398
  Napi::Value AudioWrapper::getBitrate(const Napi::CallbackInfo &info)
402
399
  {
403
400
 
404
- return Napi::Number::New(info.Env(), mAudioPtr->bitrate());
401
+ return Napi::Number::New(info.Env(), mAudioPtr->bitrate());
405
402
  }
406
403
 
407
404
  Napi::Value AudioWrapper::hasPayloadType(const Napi::CallbackInfo &info)
408
405
  {
409
- Napi::Env env = info.Env();
410
- int length = info.Length();
406
+ Napi::Env env = info.Env();
407
+ int length = info.Length();
411
408
 
412
- if (length < 1 || !info[0].IsNumber())
413
- {
414
- Napi::TypeError::New(env, "We expect (Number) as param").ThrowAsJavaScriptException();
415
- return env.Null();
416
- }
409
+ if (length < 1 || !info[0].IsNumber())
410
+ {
411
+ Napi::TypeError::New(env, "We expect (Number) as param").ThrowAsJavaScriptException();
412
+ return env.Null();
413
+ }
417
414
 
418
- int payloadType = static_cast<int>(info[0].As<Napi::Number>().ToNumber());
415
+ int payloadType = static_cast<int>(info[0].As<Napi::Number>().ToNumber());
419
416
 
420
- return Napi::Boolean::New(env, mAudioPtr->hasPayloadType(payloadType));
417
+ return Napi::Boolean::New(env, mAudioPtr->hasPayloadType(payloadType));
421
418
  }
422
419
 
423
420
  void AudioWrapper::addRTXCodec(const Napi::CallbackInfo &info)
424
421
  {
425
- Napi::Env env = info.Env();
426
- int length = info.Length();
422
+ Napi::Env env = info.Env();
423
+ int length = info.Length();
427
424
 
428
- if (length < 3 || !info[0].IsNumber() || !info[1].IsNumber() || !info[2].IsNumber())
429
- {
430
- Napi::TypeError::New(env, "We expect (Number,Number,Number) as param").ThrowAsJavaScriptException();
431
- return;
432
- }
425
+ if (length < 3 || !info[0].IsNumber() || !info[1].IsNumber() || !info[2].IsNumber())
426
+ {
427
+ Napi::TypeError::New(env, "We expect (Number,Number,Number) as param").ThrowAsJavaScriptException();
428
+ return;
429
+ }
433
430
 
434
- int payloadType = static_cast<int32_t>(info[0].As<Napi::Number>().ToNumber());
435
- int originalPayloadType = static_cast<int32_t>(info[1].As<Napi::Number>().ToNumber());
436
- unsigned int clockRate = static_cast<uint32_t>(info[2].As<Napi::Number>().ToNumber());
431
+ int payloadType = static_cast<int32_t>(info[0].As<Napi::Number>().ToNumber());
432
+ int originalPayloadType = static_cast<int32_t>(info[1].As<Napi::Number>().ToNumber());
433
+ unsigned int clockRate = static_cast<uint32_t>(info[2].As<Napi::Number>().ToNumber());
437
434
 
438
- mAudioPtr->addRtxCodec(payloadType, originalPayloadType, clockRate);
435
+ mAudioPtr->addRtxCodec(payloadType, originalPayloadType, clockRate);
439
436
  }
440
437
 
441
438
  void AudioWrapper::addRTPMap(const Napi::CallbackInfo &info)
442
439
  {
443
- // mAudioPtr->addRTPMap()
440
+ // mAudioPtr->addRTPMap()
444
441
  }
445
442
 
446
443
  void AudioWrapper::parseSdpLine(const Napi::CallbackInfo &info)
447
444
  {
448
- Napi::Env env = info.Env();
449
- int length = info.Length();
445
+ Napi::Env env = info.Env();
446
+ int length = info.Length();
450
447
 
451
- if (length < 1 || !info[0].IsString())
452
- {
453
- Napi::TypeError::New(env, "We expect (String) as param").ThrowAsJavaScriptException();
454
- return;
455
- }
448
+ if (length < 1 || !info[0].IsString())
449
+ {
450
+ Napi::TypeError::New(env, "We expect (String) as param").ThrowAsJavaScriptException();
451
+ return;
452
+ }
456
453
 
457
- std::string line = info[0].As<Napi::String>().ToString();
454
+ std::string line = info[0].As<Napi::String>().ToString();
458
455
 
459
- mAudioPtr->parseSdpLine(line);
456
+ mAudioPtr->parseSdpLine(line);
460
457
  }