@@ -44,6 +44,7 @@ Napi::Object PeerConnectionWrapper::Init(Napi::Env env, Napi::Object exports)
4444 InstanceMethod (" setRemoteDescription" , &PeerConnectionWrapper::setRemoteDescription),
4545 InstanceMethod (" localDescription" , &PeerConnectionWrapper::localDescription),
4646 InstanceMethod (" remoteDescription" , &PeerConnectionWrapper::remoteDescription),
47+ InstanceMethod (" remoteFingerprint" , &PeerConnectionWrapper::remoteFingerprint),
4748 InstanceMethod (" addRemoteCandidate" , &PeerConnectionWrapper::addRemoteCandidate),
4849 InstanceMethod (" createDataChannel" , &PeerConnectionWrapper::createDataChannel),
4950
@@ -220,6 +221,10 @@ PeerConnectionWrapper::PeerConnectionWrapper(const Napi::CallbackInfo &info) : N
220221 if (config.Get (" disableAutoNegotiation" ).IsBoolean ())
221222 rtcConfig.disableAutoNegotiation = config.Get (" disableAutoNegotiation" ).As <Napi::Boolean>();
222223
224+ // disableAutoGathering option
225+ if (config.Get (" disableAutoGathering" ).IsBoolean ())
226+ rtcConfig.disableAutoGathering = config.Get (" disableAutoGathering" ).As <Napi::Boolean>();
227+
223228 // forceMediaTransport option
224229 if (config.Get (" forceMediaTransport" ).IsBoolean ())
225230 rtcConfig.forceMediaTransport = config.Get (" forceMediaTransport" ).As <Napi::Boolean>();
@@ -257,6 +262,17 @@ PeerConnectionWrapper::PeerConnectionWrapper(const Napi::CallbackInfo &info) : N
257262 rtcConfig.disableFingerprintVerification = config.Get (" disableFingerprintVerification" ).As <Napi::Boolean>();
258263 }
259264
265+ // Specify certificate to use if set
266+ if (config.Get (" certificatePemFile" ).IsString ()) {
267+ rtcConfig.certificatePemFile = config.Get (" certificatePemFile" ).As <Napi::String>().ToString ();
268+ }
269+ if (config.Get (" keyPemFile" ).IsString ()) {
270+ rtcConfig.keyPemFile = config.Get (" keyPemFile" ).As <Napi::String>().ToString ();
271+ }
272+ if (config.Get (" keyPemPass" ).IsString ()) {
273+ rtcConfig.keyPemPass = config.Get (" keyPemPass" ).As <Napi::String>().ToString ();
274+ }
275+
260276 // Create peer-connection
261277 try
262278 {
@@ -337,6 +353,7 @@ void PeerConnectionWrapper::setLocalDescription(const Napi::CallbackInfo &info)
337353 }
338354
339355 rtc::Description::Type type = rtc::Description::Type::Unspec;
356+ rtc::LocalDescriptionInit init;
340357
341358 // optional
342359 if (length > 0 )
@@ -362,7 +379,29 @@ void PeerConnectionWrapper::setLocalDescription(const Napi::CallbackInfo &info)
362379 type = rtc::Description::Type::Rollback;
363380 }
364381
365- mRtcPeerConnPtr ->setLocalDescription (type);
382+ // optional
383+ if (length > 1 )
384+ {
385+ PLOG_DEBUG << " setLocalDescription() called with LocalDescriptionInit" ;
386+
387+ if (info[1 ].IsObject ())
388+ {
389+ PLOG_DEBUG << " setLocalDescription() called with LocalDescriptionInit as object" ;
390+ Napi::Object obj = info[1 ].As <Napi::Object>();
391+
392+ if (obj.Get (" iceUfrag" ).IsString ()) {
393+ PLOG_DEBUG << " setLocalDescription() has ufrag" ;
394+ init.iceUfrag = obj.Get (" iceUfrag" ).As <Napi::String>();
395+ }
396+
397+ if (obj.Get (" icePwd" ).IsString ()) {
398+ PLOG_DEBUG << " setLocalDescription() has password" ;
399+ init.icePwd = obj.Get (" icePwd" ).As <Napi::String>();
400+ }
401+ }
402+ }
403+
404+ mRtcPeerConnPtr ->setLocalDescription (type, init);
366405}
367406
368407void PeerConnectionWrapper::setRemoteDescription (const Napi::CallbackInfo &info)
@@ -1008,7 +1047,34 @@ Napi::Value PeerConnectionWrapper::maxMessageSize(const Napi::CallbackInfo &info
10081047
10091048 try
10101049 {
1011- return Napi::Number::New (env, mRtcPeerConnPtr ->remoteMaxMessageSize ());
1050+ return Napi::Array::New (env, mRtcPeerConnPtr ->remoteMaxMessageSize ());
1051+ }
1052+ catch (std::exception &ex)
1053+ {
1054+ Napi::Error::New (env, std::string (" libdatachannel error: " ) + ex.what ()).ThrowAsJavaScriptException ();
1055+ return Napi::Number::New (info.Env (), 0 );
1056+ }
1057+ }
1058+
1059+ Napi::Value PeerConnectionWrapper::remoteFingerprint (const Napi::CallbackInfo &info)
1060+ {
1061+ PLOG_DEBUG << " remoteFingerprints() called" ;
1062+ Napi::Env env = info.Env ();
1063+
1064+ if (!mRtcPeerConnPtr )
1065+ {
1066+ return Napi::Number::New (info.Env (), 0 );
1067+ }
1068+
1069+ try
1070+ {
1071+ auto fingerprint = mRtcPeerConnPtr ->remoteFingerprint ();
1072+
1073+ Napi::Object fingerprintObject = Napi::Object::New (env);
1074+ fingerprintObject.Set (" value" , fingerprint.value );
1075+ fingerprintObject.Set (" algorithm" , rtc::CertificateFingerprint::AlgorithmIdentifier (fingerprint.algorithm ));
1076+
1077+ return fingerprintObject;
10121078 }
10131079 catch (std::exception &ex)
10141080 {
0 commit comments