@sbhjt-gr/react-native-webrtc 124.0.2 → 124.0.4
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 +11 -11
- package/.eslintignore +6 -6
- package/.nvmrc +1 -1
- package/ISSUE_TEMPLATE.md +40 -40
- package/LICENSE +22 -22
- package/README.md +103 -103
- package/android/build.gradle +37 -37
- package/android/consumer-rules.pro +3 -3
- package/android/src/main/AndroidManifest.xml +11 -11
- package/android/src/main/java/com/oney/WebRTCModule/AbstractVideoCaptureController.java +113 -113
- package/android/src/main/java/com/oney/WebRTCModule/CameraCaptureController.java +338 -338
- package/android/src/main/java/com/oney/WebRTCModule/CameraEventsHandler.java +49 -49
- package/android/src/main/java/com/oney/WebRTCModule/DataChannelWrapper.java +99 -99
- package/android/src/main/java/com/oney/WebRTCModule/DataPacketCryptorManager.java +62 -62
- package/android/src/main/java/com/oney/WebRTCModule/DisplayUtils.java +16 -16
- package/android/src/main/java/com/oney/WebRTCModule/EglUtils.java +66 -66
- package/android/src/main/java/com/oney/WebRTCModule/GetUserMediaImpl.java +539 -539
- package/android/src/main/java/com/oney/WebRTCModule/LibraryLoader.java +21 -21
- package/android/src/main/java/com/oney/WebRTCModule/MediaProjectionNotification.java +70 -70
- package/android/src/main/java/com/oney/WebRTCModule/MediaProjectionService.java +82 -82
- package/android/src/main/java/com/oney/WebRTCModule/PeerConnectionObserver.java +588 -588
- package/android/src/main/java/com/oney/WebRTCModule/RTCCryptoManager.java +493 -493
- package/android/src/main/java/com/oney/WebRTCModule/RTCVideoViewManager.java +98 -98
- package/android/src/main/java/com/oney/WebRTCModule/ReactBridgeUtil.java +35 -35
- package/android/src/main/java/com/oney/WebRTCModule/ScreenCaptureController.java +94 -94
- package/android/src/main/java/com/oney/WebRTCModule/SerializeUtils.java +342 -342
- package/android/src/main/java/com/oney/WebRTCModule/StringUtils.java +100 -100
- package/android/src/main/java/com/oney/WebRTCModule/ThreadUtils.java +41 -41
- package/android/src/main/java/com/oney/WebRTCModule/TrackCapturerEventsEmitter.java +34 -34
- package/android/src/main/java/com/oney/WebRTCModule/VideoTrackAdapter.java +137 -137
- package/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java +1649 -1643
- package/android/src/main/java/com/oney/WebRTCModule/WebRTCModuleOptions.java +33 -33
- package/android/src/main/java/com/oney/WebRTCModule/WebRTCModulePackage.java +21 -21
- package/android/src/main/java/com/oney/WebRTCModule/WebRTCView.java +583 -583
- package/android/src/main/java/com/oney/WebRTCModule/palabra/PalabraClient.java +529 -464
- package/android/src/main/java/com/oney/WebRTCModule/palabra/PalabraConfig.java +17 -17
- package/android/src/main/java/com/oney/WebRTCModule/palabra/PalabraListener.java +7 -7
- package/android/src/main/java/com/oney/WebRTCModule/videoEffects/ProcessorProvider.java +38 -38
- package/android/src/main/java/com/oney/WebRTCModule/videoEffects/VideoEffectProcessor.java +59 -59
- package/android/src/main/java/com/oney/WebRTCModule/videoEffects/VideoFrameProcessor.java +19 -19
- package/android/src/main/java/com/oney/WebRTCModule/videoEffects/VideoFrameProcessorFactoryInterface.java +12 -12
- package/android/src/main/java/com/oney/WebRTCModule/webrtcutils/H264AndSoftwareVideoDecoderFactory.java +73 -73
- package/android/src/main/java/com/oney/WebRTCModule/webrtcutils/H264AndSoftwareVideoEncoderFactory.java +73 -73
- package/android/src/main/java/com/oney/WebRTCModule/webrtcutils/SoftwareVideoDecoderFactoryProxy.java +36 -36
- package/android/src/main/java/com/oney/WebRTCModule/webrtcutils/SoftwareVideoEncoderFactoryProxy.java +36 -36
- package/android/src/main/java/org/webrtc/Camera1Helper.java +54 -54
- package/android/src/main/java/org/webrtc/Camera2Helper.java +52 -52
- package/android/src/main/res/values/strings.xml +5 -5
- package/android/src/main/res/values/styles.xml +8 -8
- package/ios/RCTWebRTC/CaptureController.h +18 -18
- package/ios/RCTWebRTC/CaptureController.m +28 -28
- package/ios/RCTWebRTC/CapturerEventsDelegate.h +12 -12
- package/ios/RCTWebRTC/DataChannelWrapper.h +27 -27
- package/ios/RCTWebRTC/DataChannelWrapper.m +42 -42
- package/ios/RCTWebRTC/I420Converter.h +22 -22
- package/ios/RCTWebRTC/I420Converter.m +164 -164
- package/ios/RCTWebRTC/PIPController.h +24 -24
- package/ios/RCTWebRTC/PIPController.m +234 -234
- package/ios/RCTWebRTC/PalabraAudioSink.h +13 -13
- package/ios/RCTWebRTC/PalabraAudioSink.m +18 -18
- package/ios/RCTWebRTC/PalabraClient.h +42 -36
- package/ios/RCTWebRTC/PalabraClient.m +680 -584
- package/ios/RCTWebRTC/RCTConvert+WebRTC.h +16 -16
- package/ios/RCTWebRTC/RCTConvert+WebRTC.m +206 -206
- package/ios/RCTWebRTC/RTCMediaStreamTrack+React.h +10 -10
- package/ios/RCTWebRTC/RTCMediaStreamTrack+React.m +16 -16
- package/ios/RCTWebRTC/RTCVideoViewManager.h +29 -29
- package/ios/RCTWebRTC/RTCVideoViewManager.m +411 -411
- package/ios/RCTWebRTC/SampleBufferVideoCallView.h +12 -12
- package/ios/RCTWebRTC/SampleBufferVideoCallView.m +178 -178
- package/ios/RCTWebRTC/ScreenCaptureController.h +20 -20
- package/ios/RCTWebRTC/ScreenCaptureController.m +82 -82
- package/ios/RCTWebRTC/ScreenCapturePickerViewManager.h +7 -7
- package/ios/RCTWebRTC/ScreenCapturePickerViewManager.m +59 -59
- package/ios/RCTWebRTC/ScreenCapturer.h +19 -19
- package/ios/RCTWebRTC/ScreenCapturer.m +263 -263
- package/ios/RCTWebRTC/SerializeUtils.h +28 -28
- package/ios/RCTWebRTC/SerializeUtils.m +314 -314
- package/ios/RCTWebRTC/SocketConnection.h +13 -13
- package/ios/RCTWebRTC/SocketConnection.m +137 -137
- package/ios/RCTWebRTC/TrackCapturerEventsEmitter.h +14 -14
- package/ios/RCTWebRTC/TrackCapturerEventsEmitter.m +36 -36
- package/ios/RCTWebRTC/VideoCaptureController.h +21 -21
- package/ios/RCTWebRTC/VideoCaptureController.m +328 -328
- package/ios/RCTWebRTC/WLVAudioDevice.h +12 -12
- package/ios/RCTWebRTC/WLVAudioDevice.m +137 -137
- package/ios/RCTWebRTC/WebRTCModule+Palabra.h +4 -4
- package/ios/RCTWebRTC/WebRTCModule+Palabra.m +92 -83
- package/ios/RCTWebRTC/WebRTCModule+Permissions.m +75 -75
- package/ios/RCTWebRTC/WebRTCModule+RTCAudioSession.m +20 -20
- package/ios/RCTWebRTC/WebRTCModule+RTCDataChannel.h +14 -14
- package/ios/RCTWebRTC/WebRTCModule+RTCDataChannel.m +165 -165
- package/ios/RCTWebRTC/WebRTCModule+RTCFrameCryptor.m +611 -611
- package/ios/RCTWebRTC/WebRTCModule+RTCMediaStream.h +13 -13
- package/ios/RCTWebRTC/WebRTCModule+RTCMediaStream.m +728 -728
- package/ios/RCTWebRTC/WebRTCModule+RTCPeerConnection.h +24 -24
- package/ios/RCTWebRTC/WebRTCModule+RTCPeerConnection.m +1004 -1004
- package/ios/RCTWebRTC/WebRTCModule+Transceivers.m +267 -267
- package/ios/RCTWebRTC/WebRTCModule+VideoTrackAdapter.h +12 -12
- package/ios/RCTWebRTC/WebRTCModule+VideoTrackAdapter.m +166 -166
- package/ios/RCTWebRTC/WebRTCModule.h +58 -58
- package/ios/RCTWebRTC/WebRTCModule.m +169 -169
- package/ios/RCTWebRTC/WebRTCModuleOptions.h +24 -24
- package/ios/RCTWebRTC/WebRTCModuleOptions.m +31 -31
- package/ios/RCTWebRTC/videoEffects/ProcessorProvider.h +9 -9
- package/ios/RCTWebRTC/videoEffects/ProcessorProvider.m +23 -23
- package/ios/RCTWebRTC/videoEffects/VideoEffectProcessor.h +13 -13
- package/ios/RCTWebRTC/videoEffects/VideoEffectProcessor.m +23 -23
- package/ios/RCTWebRTC/videoEffects/VideoFrameProcessor.h +8 -8
- package/ios/RCTWebRTC.xcodeproj/project.pbxproj +404 -404
- package/ios/RCTWebRTC.xcworkspace/contents.xcworkspacedata +10 -10
- package/lib/commonjs/Constraints.js.map +1 -1
- package/lib/commonjs/EventEmitter.js.map +1 -1
- package/lib/commonjs/Logger.js.map +1 -1
- package/lib/commonjs/MediaDevices.js +17 -17
- package/lib/commonjs/MediaDevices.js.map +1 -1
- package/lib/commonjs/MediaStream.js +19 -19
- package/lib/commonjs/MediaStream.js.map +1 -1
- package/lib/commonjs/MediaStreamError.js.map +1 -1
- package/lib/commonjs/MediaStreamErrorEvent.js.map +1 -1
- package/lib/commonjs/MediaStreamTrack.js +28 -28
- package/lib/commonjs/MediaStreamTrack.js.map +1 -1
- package/lib/commonjs/MediaStreamTrackEvent.js +6 -6
- package/lib/commonjs/MediaStreamTrackEvent.js.map +1 -1
- package/lib/commonjs/MessageEvent.js +7 -7
- package/lib/commonjs/MessageEvent.js.map +1 -1
- package/lib/commonjs/Permissions.js +28 -28
- package/lib/commonjs/Permissions.js.map +1 -1
- package/lib/commonjs/RTCAudioSession.js +4 -4
- package/lib/commonjs/RTCAudioSession.js.map +1 -1
- package/lib/commonjs/RTCDataChannel.js +2 -2
- package/lib/commonjs/RTCDataChannel.js.map +1 -1
- package/lib/commonjs/RTCDataChannelEvent.js +6 -6
- package/lib/commonjs/RTCDataChannelEvent.js.map +1 -1
- package/lib/commonjs/RTCDataPacketCryptor.js.map +1 -1
- package/lib/commonjs/RTCDataPacketCryptorFactory.js.map +1 -1
- package/lib/commonjs/RTCErrorEvent.js +3 -3
- package/lib/commonjs/RTCErrorEvent.js.map +1 -1
- package/lib/commonjs/RTCFrameCryptor.js +8 -8
- package/lib/commonjs/RTCFrameCryptor.js.map +1 -1
- package/lib/commonjs/RTCFrameCryptorFactory.js.map +1 -1
- package/lib/commonjs/RTCIceCandidate.js.map +1 -1
- package/lib/commonjs/RTCIceCandidateEvent.js +7 -7
- package/lib/commonjs/RTCIceCandidateEvent.js.map +1 -1
- package/lib/commonjs/RTCKeyProvider.js.map +1 -1
- package/lib/commonjs/RTCPIPView.js +2 -2
- package/lib/commonjs/RTCPIPView.js.map +1 -1
- package/lib/commonjs/RTCPIPView.web.js.map +1 -1
- package/lib/commonjs/RTCPeerConnection.js +146 -41
- package/lib/commonjs/RTCPeerConnection.js.map +1 -1
- package/lib/commonjs/RTCRtcpParameters.js.map +1 -1
- package/lib/commonjs/RTCRtpCapabilities.js +2 -2
- package/lib/commonjs/RTCRtpCapabilities.js.map +1 -1
- package/lib/commonjs/RTCRtpCodecCapability.js.map +1 -1
- package/lib/commonjs/RTCRtpCodecParameters.js.map +1 -1
- package/lib/commonjs/RTCRtpEncodingParameters.js.map +1 -1
- package/lib/commonjs/RTCRtpHeaderExtension.js.map +1 -1
- package/lib/commonjs/RTCRtpParameters.js.map +1 -1
- package/lib/commonjs/RTCRtpReceiveParameters.js.map +1 -1
- package/lib/commonjs/RTCRtpReceiver.js +7 -7
- package/lib/commonjs/RTCRtpReceiver.js.map +1 -1
- package/lib/commonjs/RTCRtpSendParameters.js +3 -3
- package/lib/commonjs/RTCRtpSendParameters.js.map +1 -1
- package/lib/commonjs/RTCRtpSender.js +7 -7
- package/lib/commonjs/RTCRtpSender.js.map +1 -1
- package/lib/commonjs/RTCRtpTransceiver.js.map +1 -1
- package/lib/commonjs/RTCSessionDescription.js.map +1 -1
- package/lib/commonjs/RTCTrackEvent.js +6 -6
- package/lib/commonjs/RTCTrackEvent.js.map +1 -1
- package/lib/commonjs/RTCUtil.js +28 -28
- package/lib/commonjs/RTCUtil.js.map +1 -1
- package/lib/commonjs/RTCView.js +5 -5
- package/lib/commonjs/RTCView.js.map +1 -1
- package/lib/commonjs/RTCView.web.js.map +1 -1
- package/lib/commonjs/ScreenCapturePickerView.js.map +1 -1
- package/lib/commonjs/ScreenCapturePickerView.web.js.map +1 -1
- package/lib/commonjs/getDisplayMedia.js.map +1 -1
- package/lib/commonjs/getUserMedia.js +23 -0
- package/lib/commonjs/getUserMedia.js.map +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/webStream.js.map +1 -1
- package/lib/module/Constraints.js.map +1 -1
- package/lib/module/EventEmitter.js.map +1 -1
- package/lib/module/Logger.js.map +1 -1
- package/lib/module/MediaDevices.js +17 -17
- package/lib/module/MediaDevices.js.map +1 -1
- package/lib/module/MediaStream.js +19 -19
- package/lib/module/MediaStream.js.map +1 -1
- package/lib/module/MediaStreamError.js.map +1 -1
- package/lib/module/MediaStreamErrorEvent.js.map +1 -1
- package/lib/module/MediaStreamTrack.js +28 -28
- package/lib/module/MediaStreamTrack.js.map +1 -1
- package/lib/module/MediaStreamTrackEvent.js +6 -6
- package/lib/module/MediaStreamTrackEvent.js.map +1 -1
- package/lib/module/MessageEvent.js +7 -7
- package/lib/module/MessageEvent.js.map +1 -1
- package/lib/module/Permissions.js +28 -28
- package/lib/module/Permissions.js.map +1 -1
- package/lib/module/RTCAudioSession.js +4 -4
- package/lib/module/RTCAudioSession.js.map +1 -1
- package/lib/module/RTCDataChannel.js +2 -2
- package/lib/module/RTCDataChannel.js.map +1 -1
- package/lib/module/RTCDataChannelEvent.js +6 -6
- package/lib/module/RTCDataChannelEvent.js.map +1 -1
- package/lib/module/RTCDataPacketCryptor.js.map +1 -1
- package/lib/module/RTCDataPacketCryptorFactory.js.map +1 -1
- package/lib/module/RTCErrorEvent.js +3 -3
- package/lib/module/RTCErrorEvent.js.map +1 -1
- package/lib/module/RTCFrameCryptor.js +8 -8
- package/lib/module/RTCFrameCryptor.js.map +1 -1
- package/lib/module/RTCFrameCryptorFactory.js.map +1 -1
- package/lib/module/RTCIceCandidate.js.map +1 -1
- package/lib/module/RTCIceCandidateEvent.js +7 -7
- package/lib/module/RTCIceCandidateEvent.js.map +1 -1
- package/lib/module/RTCKeyProvider.js.map +1 -1
- package/lib/module/RTCPIPView.js +2 -2
- package/lib/module/RTCPIPView.js.map +1 -1
- package/lib/module/RTCPIPView.web.js.map +1 -1
- package/lib/module/RTCPeerConnection.js +146 -41
- package/lib/module/RTCPeerConnection.js.map +1 -1
- package/lib/module/RTCRtcpParameters.js.map +1 -1
- package/lib/module/RTCRtpCapabilities.js +2 -2
- package/lib/module/RTCRtpCapabilities.js.map +1 -1
- package/lib/module/RTCRtpCodecCapability.js.map +1 -1
- package/lib/module/RTCRtpCodecParameters.js.map +1 -1
- package/lib/module/RTCRtpEncodingParameters.js.map +1 -1
- package/lib/module/RTCRtpHeaderExtension.js.map +1 -1
- package/lib/module/RTCRtpParameters.js.map +1 -1
- package/lib/module/RTCRtpReceiveParameters.js.map +1 -1
- package/lib/module/RTCRtpReceiver.js +7 -7
- package/lib/module/RTCRtpReceiver.js.map +1 -1
- package/lib/module/RTCRtpSendParameters.js +3 -3
- package/lib/module/RTCRtpSendParameters.js.map +1 -1
- package/lib/module/RTCRtpSender.js +7 -7
- package/lib/module/RTCRtpSender.js.map +1 -1
- package/lib/module/RTCRtpTransceiver.js.map +1 -1
- package/lib/module/RTCSessionDescription.js.map +1 -1
- package/lib/module/RTCTrackEvent.js +6 -6
- package/lib/module/RTCTrackEvent.js.map +1 -1
- package/lib/module/RTCUtil.js +28 -28
- package/lib/module/RTCUtil.js.map +1 -1
- package/lib/module/RTCView.js +5 -5
- package/lib/module/RTCView.js.map +1 -1
- package/lib/module/RTCView.web.js.map +1 -1
- package/lib/module/ScreenCapturePickerView.js.map +1 -1
- package/lib/module/ScreenCapturePickerView.web.js.map +1 -1
- package/lib/module/getDisplayMedia.js.map +1 -1
- package/lib/module/getUserMedia.js +23 -0
- package/lib/module/getUserMedia.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/webStream.js.map +1 -1
- package/lib/typescript/Constraints.d.ts +19 -19
- package/lib/typescript/EventEmitter.d.ts +6 -6
- package/lib/typescript/Logger.d.ts +13 -13
- package/lib/typescript/MediaDevices.d.ts +30 -30
- package/lib/typescript/MediaStream.d.ts +48 -48
- package/lib/typescript/MediaStreamError.d.ts +6 -6
- package/lib/typescript/MediaStreamErrorEvent.d.ts +6 -6
- package/lib/typescript/MediaStreamTrack.d.ts +101 -101
- package/lib/typescript/MediaStreamTrackEvent.d.ts +19 -19
- package/lib/typescript/MessageEvent.d.ts +20 -20
- package/lib/typescript/Permissions.d.ts +55 -55
- package/lib/typescript/RTCAudioSession.d.ts +10 -10
- package/lib/typescript/RTCDataChannel.d.ts +43 -43
- package/lib/typescript/RTCDataChannelEvent.d.ts +19 -19
- package/lib/typescript/RTCDataPacketCryptor.d.ts +12 -12
- package/lib/typescript/RTCDataPacketCryptorFactory.d.ts +6 -6
- package/lib/typescript/RTCErrorEvent.d.ts +12 -12
- package/lib/typescript/RTCFrameCryptor.d.ts +47 -47
- package/lib/typescript/RTCFrameCryptorFactory.d.ts +21 -21
- package/lib/typescript/RTCIceCandidate.d.ts +17 -17
- package/lib/typescript/RTCIceCandidateEvent.d.ts +20 -20
- package/lib/typescript/RTCKeyProvider.d.ts +21 -21
- package/lib/typescript/RTCPIPView.d.ts +15 -15
- package/lib/typescript/RTCPIPView.web.d.ts +13 -13
- package/lib/typescript/RTCPeerConnection.d.ts +117 -117
- package/lib/typescript/RTCRtcpParameters.d.ts +10 -10
- package/lib/typescript/RTCRtpCapabilities.d.ts +9 -9
- package/lib/typescript/RTCRtpCodecCapability.d.ts +7 -7
- package/lib/typescript/RTCRtpCodecParameters.d.ts +16 -16
- package/lib/typescript/RTCRtpEncodingParameters.d.ts +23 -23
- package/lib/typescript/RTCRtpHeaderExtension.d.ts +12 -12
- package/lib/typescript/RTCRtpParameters.d.ts +19 -19
- package/lib/typescript/RTCRtpReceiveParameters.d.ts +4 -4
- package/lib/typescript/RTCRtpReceiver.d.ts +21 -21
- package/lib/typescript/RTCRtpSendParameters.d.ts +20 -20
- package/lib/typescript/RTCRtpSender.d.ts +22 -22
- package/lib/typescript/RTCRtpTransceiver.d.ts +31 -31
- package/lib/typescript/RTCSessionDescription.d.ts +12 -12
- package/lib/typescript/RTCTrackEvent.d.ts +29 -29
- package/lib/typescript/RTCUtil.d.ts +37 -37
- package/lib/typescript/RTCView.d.ts +117 -117
- package/lib/typescript/RTCView.web.d.ts +25 -25
- package/lib/typescript/ScreenCapturePickerView.d.ts +2 -2
- package/lib/typescript/ScreenCapturePickerView.web.d.ts +1 -1
- package/lib/typescript/getDisplayMedia.d.ts +2 -2
- package/lib/typescript/getUserMedia.d.ts +7 -7
- package/lib/typescript/index.d.ts +22 -22
- package/lib/typescript/index.web.d.ts +101 -101
- package/lib/typescript/webStream.d.ts +3 -3
- package/livekit-react-native-webrtc.podspec +29 -29
- package/macos/RCTWebRTC.xcodeproj/project.pbxproj +324 -324
- package/macos/RCTWebRTC.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -7
- package/macos/RCTWebRTC.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -8
- package/metro.config.js +7 -7
- package/metro.config.macos.js +14 -14
- package/package.json +66 -66
- package/react-native.config.js +11 -11
- package/src/.eslintrc.cjs +67 -67
- package/src/Constraints.ts +20 -20
- package/src/EventEmitter.ts +65 -65
- package/src/Logger.ts +49 -49
- package/src/MediaDevices.ts +53 -53
- package/src/MediaStream.ts +161 -161
- package/src/MediaStreamError.ts +12 -12
- package/src/MediaStreamErrorEvent.ts +11 -11
- package/src/MediaStreamTrack.ts +282 -282
- package/src/MediaStreamTrackEvent.ts +25 -25
- package/src/MessageEvent.ts +26 -26
- package/src/Permissions.ts +133 -133
- package/src/RTCAudioSession.ts +25 -25
- package/src/RTCDataChannel.ts +190 -190
- package/src/RTCDataChannelEvent.ts +28 -28
- package/src/RTCDataPacketCryptor.ts +90 -90
- package/src/RTCDataPacketCryptorFactory.ts +24 -24
- package/src/RTCErrorEvent.ts +20 -20
- package/src/RTCFrameCryptor.ts +162 -162
- package/src/RTCFrameCryptorFactory.ts +101 -101
- package/src/RTCIceCandidate.ts +29 -29
- package/src/RTCIceCandidateEvent.ts +26 -26
- package/src/RTCKeyProvider.ts +117 -117
- package/src/RTCPIPView.tsx +46 -46
- package/src/RTCPIPView.web.tsx +18 -18
- package/src/RTCPeerConnection.ts +935 -832
- package/src/RTCRtcpParameters.ts +23 -23
- package/src/RTCRtpCapabilities.ts +16 -16
- package/src/RTCRtpCodecCapability.ts +12 -12
- package/src/RTCRtpCodecParameters.ts +44 -44
- package/src/RTCRtpEncodingParameters.ts +90 -90
- package/src/RTCRtpHeaderExtension.ts +27 -27
- package/src/RTCRtpParameters.ts +37 -37
- package/src/RTCRtpReceiveParameters.ts +7 -7
- package/src/RTCRtpReceiver.ts +60 -60
- package/src/RTCRtpSendParameters.ts +63 -63
- package/src/RTCRtpSender.ts +78 -78
- package/src/RTCRtpTransceiver.ts +107 -107
- package/src/RTCSessionDescription.ts +30 -30
- package/src/RTCTrackEvent.ts +42 -42
- package/src/RTCUtil.ts +211 -211
- package/src/RTCView.ts +122 -122
- package/src/RTCView.web.tsx +80 -80
- package/src/ScreenCapturePickerView.ts +4 -4
- package/src/ScreenCapturePickerView.web.tsx +3 -3
- package/src/getDisplayMedia.ts +30 -30
- package/src/getUserMedia.ts +136 -111
- package/src/index.ts +107 -107
- package/src/index.web.ts +191 -191
- package/src/webStream.ts +31 -31
- package/tools/format.sh +6 -6
- package/tools/release.sh +45 -45
- package/tsconfig.json +17 -17
|
@@ -1,611 +1,611 @@
|
|
|
1
|
-
#include <Foundation/Foundation.h>
|
|
2
|
-
#import <objc/runtime.h>
|
|
3
|
-
|
|
4
|
-
#import <React/RCTBridge.h>
|
|
5
|
-
#import <React/RCTBridgeModule.h>
|
|
6
|
-
|
|
7
|
-
#import "WebRTCModule+RTCPeerConnection.h"
|
|
8
|
-
#import "WebRTCModule.h"
|
|
9
|
-
|
|
10
|
-
// Key for objc_set/getAssociatedObject, value of NSString*
|
|
11
|
-
static char frameCryptorUUIDKey;
|
|
12
|
-
|
|
13
|
-
@interface WebRTCModule ()<RTCFrameCryptorDelegate>
|
|
14
|
-
@end
|
|
15
|
-
|
|
16
|
-
@implementation WebRTCModule (RTCFrameCryptor)
|
|
17
|
-
|
|
18
|
-
- (RTCCryptorAlgorithm)getAlgorithm:(NSNumber *)algorithm {
|
|
19
|
-
switch ([algorithm intValue]) {
|
|
20
|
-
// case 0:
|
|
21
|
-
// return RTCCryptorAlgorithmAesGcm;
|
|
22
|
-
// case 1:
|
|
23
|
-
// return RTCCryptorAlgorithmAesCbc;
|
|
24
|
-
default:
|
|
25
|
-
return RTCCryptorAlgorithmAesGcm;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
- (NSData *)bytesFromMap:(NSDictionary *)map key:(NSString *)key isBase64Key:(nullable NSString *)isBase64Key {
|
|
30
|
-
BOOL isBase64 = YES;
|
|
31
|
-
if (isBase64Key) {
|
|
32
|
-
isBase64 = [map[isBase64Key] boolValue];
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
if (isBase64) {
|
|
36
|
-
return [[NSData alloc] initWithBase64EncodedString:map[key] options:0];
|
|
37
|
-
} else {
|
|
38
|
-
return [map[key] dataUsingEncoding:NSUTF8StringEncoding];
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(frameCryptorFactoryCreateFrameCryptor : (nonnull NSDictionary *)constraints) {
|
|
43
|
-
__block NSString *frameCryptorId = nil;
|
|
44
|
-
dispatch_sync(self.workerQueue, ^{
|
|
45
|
-
NSNumber *peerConnectionId = constraints[@"peerConnectionId"];
|
|
46
|
-
NSNumber *algorithm = constraints[@"algorithm"];
|
|
47
|
-
if (algorithm == nil) {
|
|
48
|
-
NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Invalid algorithm");
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
NSString *participantId = constraints[@"participantId"];
|
|
53
|
-
if (participantId == nil) {
|
|
54
|
-
NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Invalid participantId");
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
NSString *keyProviderId = constraints[@"keyProviderId"];
|
|
59
|
-
if (keyProviderId == nil) {
|
|
60
|
-
NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Invalid keyProviderId");
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
RTCFrameCryptorKeyProvider *keyProvider = self.keyProviders[keyProviderId];
|
|
65
|
-
if (keyProvider == nil) {
|
|
66
|
-
NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Invalid keyProvider");
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
NSString *type = constraints[@"type"];
|
|
71
|
-
NSString *rtpSenderId = constraints[@"rtpSenderId"];
|
|
72
|
-
NSString *rtpReceiverId = constraints[@"rtpReceiverId"];
|
|
73
|
-
|
|
74
|
-
if ([type isEqualToString:@"sender"]) {
|
|
75
|
-
RTCRtpSender *sender = [self getSenderByPeerConnectionId:peerConnectionId senderId:rtpSenderId];
|
|
76
|
-
|
|
77
|
-
if (sender == nil) {
|
|
78
|
-
NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Error: sender not found!");
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
RTCFrameCryptor *frameCryptor = [[RTCFrameCryptor alloc] initWithFactory:self.peerConnectionFactory
|
|
83
|
-
rtpSender:sender
|
|
84
|
-
participantId:participantId
|
|
85
|
-
algorithm:[self getAlgorithm:algorithm]
|
|
86
|
-
keyProvider:keyProvider];
|
|
87
|
-
frameCryptorId = [[NSUUID UUID] UUIDString];
|
|
88
|
-
|
|
89
|
-
frameCryptor.delegate = self;
|
|
90
|
-
|
|
91
|
-
self.frameCryptors[frameCryptorId] = frameCryptor;
|
|
92
|
-
objc_setAssociatedObject(frameCryptor, &frameCryptorUUIDKey, frameCryptorId, OBJC_ASSOCIATION_COPY);
|
|
93
|
-
return;
|
|
94
|
-
} else if ([type isEqualToString:@"receiver"]) {
|
|
95
|
-
RTCRtpReceiver *receiver = [self getReceiverByPeerConnectionId:peerConnectionId receiverId:rtpReceiverId];
|
|
96
|
-
if (receiver == nil) {
|
|
97
|
-
NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Error: receiver not found!");
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
RTCFrameCryptor *frameCryptor = [[RTCFrameCryptor alloc] initWithFactory:self.peerConnectionFactory
|
|
101
|
-
rtpReceiver:receiver
|
|
102
|
-
participantId:participantId
|
|
103
|
-
algorithm:[self getAlgorithm:algorithm]
|
|
104
|
-
keyProvider:keyProvider];
|
|
105
|
-
frameCryptorId = [[NSUUID UUID] UUIDString];
|
|
106
|
-
|
|
107
|
-
frameCryptor.delegate = self;
|
|
108
|
-
|
|
109
|
-
self.frameCryptors[frameCryptorId] = frameCryptor;
|
|
110
|
-
objc_setAssociatedObject(frameCryptor, &frameCryptorUUIDKey, frameCryptorId, OBJC_ASSOCIATION_COPY);
|
|
111
|
-
return;
|
|
112
|
-
} else {
|
|
113
|
-
NSLog(@"InvalidArgument: Invalid type");
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
return frameCryptorId;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
RCT_EXPORT_METHOD(frameCryptorSetKeyIndex
|
|
122
|
-
: (nonnull NSDictionary *)constraints resolver
|
|
123
|
-
: (RCTPromiseResolveBlock)resolve rejecter
|
|
124
|
-
: (RCTPromiseRejectBlock)reject) {
|
|
125
|
-
NSString *frameCryptorId = constraints[@"frameCryptorId"];
|
|
126
|
-
if (frameCryptorId == nil) {
|
|
127
|
-
reject(@"frameCryptorSetKeyIndexFailed", @"Invalid frameCryptorId", nil);
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
RTCFrameCryptor *frameCryptor = self.frameCryptors[frameCryptorId];
|
|
131
|
-
if (frameCryptor == nil) {
|
|
132
|
-
reject(@"frameCryptorSetKeyIndexFailed", @"Invalid frameCryptor", nil);
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
NSNumber *keyIndex = constraints[@"keyIndex"];
|
|
137
|
-
if (keyIndex == nil) {
|
|
138
|
-
reject(@"frameCryptorSetKeyIndexFailed", @"Invalid keyIndex", nil);
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
[frameCryptor setKeyIndex:[keyIndex intValue]];
|
|
142
|
-
resolve(@{@"result" : @YES});
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
RCT_EXPORT_METHOD(frameCryptorGetKeyIndex
|
|
146
|
-
: (nonnull NSDictionary *)constraints resolver
|
|
147
|
-
: (RCTPromiseResolveBlock)resolve rejecter
|
|
148
|
-
: (RCTPromiseRejectBlock)reject) {
|
|
149
|
-
NSString *frameCryptorId = constraints[@"frameCryptorId"];
|
|
150
|
-
if (frameCryptorId == nil) {
|
|
151
|
-
reject(@"frameCryptorGetKeyIndexFailed", @"Invalid frameCryptorId", nil);
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
RTCFrameCryptor *frameCryptor = self.frameCryptors[frameCryptorId];
|
|
155
|
-
if (frameCryptor == nil) {
|
|
156
|
-
reject(@"frameCryptorGetKeyIndexFailed", @"Invalid frameCryptor", nil);
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
resolve(@{@"keyIndex" : [NSNumber numberWithInt:frameCryptor.keyIndex]});
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
RCT_EXPORT_METHOD(frameCryptorSetEnabled
|
|
163
|
-
: (nonnull NSDictionary *)constraints resolver
|
|
164
|
-
: (RCTPromiseResolveBlock)resolve rejecter
|
|
165
|
-
: (RCTPromiseRejectBlock)reject) {
|
|
166
|
-
NSString *frameCryptorId = constraints[@"frameCryptorId"];
|
|
167
|
-
if (frameCryptorId == nil) {
|
|
168
|
-
reject(@"frameCryptorSetEnabledFailed", @"Invalid frameCryptorId", nil);
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
RTCFrameCryptor *frameCryptor = self.frameCryptors[frameCryptorId];
|
|
172
|
-
if (frameCryptor == nil) {
|
|
173
|
-
reject(@"frameCryptorSetEnabledFailed", @"Invalid frameCryptor", nil);
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
NSNumber *enabled = constraints[@"enabled"];
|
|
178
|
-
if (enabled == nil) {
|
|
179
|
-
reject(@"frameCryptorSetEnabledFailed", @"Invalid enabled", nil);
|
|
180
|
-
return;
|
|
181
|
-
}
|
|
182
|
-
frameCryptor.enabled = [enabled boolValue];
|
|
183
|
-
resolve(@{@"result" : enabled});
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
RCT_EXPORT_METHOD(frameCryptorGetEnabled
|
|
187
|
-
: (nonnull NSDictionary *)constraints resolver
|
|
188
|
-
: (RCTPromiseResolveBlock)resolve rejecter
|
|
189
|
-
: (RCTPromiseRejectBlock)reject) {
|
|
190
|
-
NSString *frameCryptorId = constraints[@"frameCryptorId"];
|
|
191
|
-
if (frameCryptorId == nil) {
|
|
192
|
-
reject(@"frameCryptorGetEnabledFailed", @"Invalid frameCryptorId", nil);
|
|
193
|
-
return;
|
|
194
|
-
}
|
|
195
|
-
RTCFrameCryptor *frameCryptor = self.frameCryptors[frameCryptorId];
|
|
196
|
-
if (frameCryptor == nil) {
|
|
197
|
-
reject(@"frameCryptorGetEnabledFailed", @"Invalid frameCryptor", nil);
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
resolve(@{@"enabled" : [NSNumber numberWithBool:frameCryptor.enabled]});
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
RCT_EXPORT_METHOD(frameCryptorDispose
|
|
204
|
-
: (nonnull NSDictionary *)constraints resolver
|
|
205
|
-
: (RCTPromiseResolveBlock)resolve rejecter
|
|
206
|
-
: (RCTPromiseRejectBlock)reject) {
|
|
207
|
-
NSString *frameCryptorId = constraints[@"frameCryptorId"];
|
|
208
|
-
if (frameCryptorId == nil) {
|
|
209
|
-
reject(@"frameCryptorDisposeFailed", @"Invalid frameCryptorId", nil);
|
|
210
|
-
return;
|
|
211
|
-
}
|
|
212
|
-
RTCFrameCryptor *frameCryptor = self.frameCryptors[frameCryptorId];
|
|
213
|
-
if (frameCryptor == nil) {
|
|
214
|
-
reject(@"frameCryptorDisposeFailed", @"Invalid frameCryptor", nil);
|
|
215
|
-
return;
|
|
216
|
-
}
|
|
217
|
-
[self.frameCryptors removeObjectForKey:frameCryptorId];
|
|
218
|
-
frameCryptor.enabled = NO;
|
|
219
|
-
resolve(@{@"result" : @"success"});
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(frameCryptorFactoryCreateKeyProvider
|
|
223
|
-
: (nonnull NSDictionary *)keyProviderOptions) {
|
|
224
|
-
__block NSString *keyProviderId = [[NSUUID UUID] UUIDString];
|
|
225
|
-
|
|
226
|
-
dispatch_sync(self.workerQueue, ^{
|
|
227
|
-
NSNumber *sharedKey = keyProviderOptions[@"sharedKey"];
|
|
228
|
-
if (sharedKey == nil) {
|
|
229
|
-
NSLog(@"frameCryptorFactoryCreateKeyProviderFailed: Invalid sharedKey");
|
|
230
|
-
keyProviderId = nil;
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
if (keyProviderOptions[@"ratchetSalt"] == nil) {
|
|
235
|
-
NSLog(@"frameCryptorFactoryCreateKeyProviderFailed: Invalid ratchetSalt");
|
|
236
|
-
keyProviderId = nil;
|
|
237
|
-
return;
|
|
238
|
-
}
|
|
239
|
-
NSData *ratchetSalt = [self bytesFromMap:keyProviderOptions
|
|
240
|
-
key:@"ratchetSalt"
|
|
241
|
-
isBase64Key:@"ratchetSaltIsBase64"];
|
|
242
|
-
|
|
243
|
-
NSNumber *ratchetWindowSize = keyProviderOptions[@"ratchetWindowSize"];
|
|
244
|
-
if (ratchetWindowSize == nil) {
|
|
245
|
-
NSLog(@"frameCryptorFactoryCreateKeyProviderFailed: Invalid ratchetWindowSize");
|
|
246
|
-
keyProviderId = nil;
|
|
247
|
-
return;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
NSNumber *failureTolerance = keyProviderOptions[@"failureTolerance"];
|
|
251
|
-
NSData *uncryptedMagicBytes = nil;
|
|
252
|
-
|
|
253
|
-
if (keyProviderOptions[@"uncryptedMagicBytes"] != nil) {
|
|
254
|
-
uncryptedMagicBytes = [[NSData alloc] initWithBase64EncodedString:keyProviderOptions[@"uncryptedMagicBytes"]
|
|
255
|
-
options:0];
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
NSNumber *keyRingSize = keyProviderOptions[@"keyRingSize"];
|
|
259
|
-
NSNumber *discardFrameWhenCryptorNotReady = keyProviderOptions[@"discardFrameWhenCryptorNotReady"];
|
|
260
|
-
|
|
261
|
-
RTCFrameCryptorKeyProvider *keyProvider = [[RTCFrameCryptorKeyProvider alloc]
|
|
262
|
-
initWithRatchetSalt:ratchetSalt
|
|
263
|
-
ratchetWindowSize:[ratchetWindowSize intValue]
|
|
264
|
-
sharedKeyMode:[sharedKey boolValue]
|
|
265
|
-
uncryptedMagicBytes:uncryptedMagicBytes
|
|
266
|
-
failureTolerance:failureTolerance != nil ? [failureTolerance intValue] : -1
|
|
267
|
-
keyRingSize:keyRingSize != nil ? [keyRingSize intValue] : 0
|
|
268
|
-
discardFrameWhenCryptorNotReady:discardFrameWhenCryptorNotReady != nil
|
|
269
|
-
? [discardFrameWhenCryptorNotReady boolValue]
|
|
270
|
-
: NO];
|
|
271
|
-
self.keyProviders[keyProviderId] = keyProvider;
|
|
272
|
-
return;
|
|
273
|
-
});
|
|
274
|
-
return keyProviderId;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
- (nullable RTCFrameCryptorKeyProvider *)getKeyProviderForId:(NSString *)keyProviderId
|
|
278
|
-
rejecter:(RCTPromiseRejectBlock)reject {
|
|
279
|
-
if (keyProviderId == nil) {
|
|
280
|
-
reject(@"getKeyProviderForIdFailed", @"Invalid keyProviderId", nil);
|
|
281
|
-
return nil;
|
|
282
|
-
}
|
|
283
|
-
RTCFrameCryptorKeyProvider *keyProvider = self.keyProviders[keyProviderId];
|
|
284
|
-
if (keyProvider == nil) {
|
|
285
|
-
reject(@"getKeyProviderForIdFailed", @"Invalid keyProvider", nil);
|
|
286
|
-
return nil;
|
|
287
|
-
}
|
|
288
|
-
return keyProvider;
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
RCT_EXPORT_METHOD(keyProviderSetSharedKey
|
|
292
|
-
: (nonnull NSDictionary *)constraints resolver
|
|
293
|
-
: (RCTPromiseResolveBlock)resolve rejecter
|
|
294
|
-
: (RCTPromiseRejectBlock)reject) {
|
|
295
|
-
RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
|
|
296
|
-
if (keyProvider == nil) {
|
|
297
|
-
return;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
NSNumber *keyIndex = constraints[@"keyIndex"];
|
|
301
|
-
if (keyIndex == nil) {
|
|
302
|
-
reject(@"keyProviderSetSharedKey", @"Invalid keyIndex", nil);
|
|
303
|
-
return;
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
if (constraints[@"key"] == nil) {
|
|
307
|
-
reject(@"keyProviderSetSharedKey", @"Invalid key", nil);
|
|
308
|
-
return;
|
|
309
|
-
}
|
|
310
|
-
NSData *key = [self bytesFromMap:constraints key:@"key" isBase64Key:@"keyIsBase64"];
|
|
311
|
-
|
|
312
|
-
[keyProvider setSharedKey:key withIndex:[keyIndex intValue]];
|
|
313
|
-
resolve(@{@"result" : @YES});
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
RCT_EXPORT_METHOD(keyProviderRatchetSharedKey
|
|
317
|
-
: (nonnull NSDictionary *)constraints resolver
|
|
318
|
-
: (RCTPromiseResolveBlock)resolve rejecter
|
|
319
|
-
: (RCTPromiseRejectBlock)reject) {
|
|
320
|
-
RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
|
|
321
|
-
if (keyProvider == nil) {
|
|
322
|
-
return;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
NSNumber *keyIndex = constraints[@"keyIndex"];
|
|
326
|
-
if (keyIndex == nil) {
|
|
327
|
-
reject(@"keyProviderRatchetSharedKeyFailed", @"Invalid keyIndex", nil);
|
|
328
|
-
return;
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
NSData *newKey = [keyProvider ratchetSharedKey:[keyIndex intValue]];
|
|
332
|
-
resolve(@{@"result" : [newKey base64EncodedStringWithOptions:0]});
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
RCT_EXPORT_METHOD(keyProviderExportSharedKey
|
|
336
|
-
: (nonnull NSDictionary *)constraints resolver
|
|
337
|
-
: (RCTPromiseResolveBlock)resolve rejecter
|
|
338
|
-
: (RCTPromiseRejectBlock)reject) {
|
|
339
|
-
RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
|
|
340
|
-
if (keyProvider == nil) {
|
|
341
|
-
return;
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
NSNumber *keyIndex = constraints[@"keyIndex"];
|
|
345
|
-
if (keyIndex == nil) {
|
|
346
|
-
reject(@"keyProviderExportSharedKeyFailed", @"Invalid keyIndex", nil);
|
|
347
|
-
return;
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
NSData *key = [keyProvider exportSharedKey:[keyIndex intValue]];
|
|
351
|
-
resolve(@{@"result" : [key base64EncodedStringWithOptions:0]});
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
RCT_EXPORT_METHOD(keyProviderSetKey
|
|
355
|
-
: (nonnull NSDictionary *)constraints resolver
|
|
356
|
-
: (RCTPromiseResolveBlock)resolve rejecter
|
|
357
|
-
: (RCTPromiseRejectBlock)reject) {
|
|
358
|
-
RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
|
|
359
|
-
if (keyProvider == nil) {
|
|
360
|
-
return;
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
NSNumber *keyIndex = constraints[@"keyIndex"];
|
|
364
|
-
if (keyIndex == nil) {
|
|
365
|
-
reject(@"keyProviderSetKeyFailed", @"Invalid keyIndex", nil);
|
|
366
|
-
return;
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
if (constraints[@"key"] == nil) {
|
|
370
|
-
reject(@"keyProviderSetKeyFailed", @"Invalid key", nil);
|
|
371
|
-
return;
|
|
372
|
-
}
|
|
373
|
-
NSData *key = [self bytesFromMap:constraints key:@"key" isBase64Key:@"keyIsBase64"];
|
|
374
|
-
|
|
375
|
-
NSString *participantId = constraints[@"participantId"];
|
|
376
|
-
if (participantId == nil) {
|
|
377
|
-
reject(@"keyProviderSetKeyFailed", @"Invalid participantId", nil);
|
|
378
|
-
return;
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
[keyProvider setKey:key withIndex:[keyIndex intValue] forParticipant:participantId];
|
|
382
|
-
resolve(@{@"result" : @YES});
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
RCT_EXPORT_METHOD(keyProviderRatchetKey
|
|
386
|
-
: (nonnull NSDictionary *)constraints resolver
|
|
387
|
-
: (RCTPromiseResolveBlock)resolve rejecter
|
|
388
|
-
: (RCTPromiseRejectBlock)reject) {
|
|
389
|
-
RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
|
|
390
|
-
if (keyProvider == nil) {
|
|
391
|
-
return;
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
NSNumber *keyIndex = constraints[@"keyIndex"];
|
|
395
|
-
if (keyIndex == nil) {
|
|
396
|
-
reject(@"keyProviderRatchetKeyFailed", @"Invalid keyIndex", nil);
|
|
397
|
-
return;
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
NSString *participantId = constraints[@"participantId"];
|
|
401
|
-
if (participantId == nil) {
|
|
402
|
-
reject(@"keyProviderRatchetKeyFailed", @"Invalid participantId", nil);
|
|
403
|
-
return;
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
NSData *newKey = [keyProvider ratchetKey:participantId withIndex:[keyIndex intValue]];
|
|
407
|
-
resolve(@{@"result" : [newKey base64EncodedStringWithOptions:0]});
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
RCT_EXPORT_METHOD(keyProviderExportKey
|
|
411
|
-
: (nonnull NSDictionary *)constraints resolver
|
|
412
|
-
: (RCTPromiseResolveBlock)resolve rejecter
|
|
413
|
-
: (RCTPromiseRejectBlock)reject) {
|
|
414
|
-
RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
|
|
415
|
-
if (keyProvider == nil) {
|
|
416
|
-
return;
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
NSNumber *keyIndex = constraints[@"keyIndex"];
|
|
420
|
-
if (keyIndex == nil) {
|
|
421
|
-
reject(@"keyProviderExportKeyFailed", @"Invalid keyIndex", nil);
|
|
422
|
-
return;
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
NSString *participantId = constraints[@"participantId"];
|
|
426
|
-
if (participantId == nil) {
|
|
427
|
-
reject(@"keyProviderExportKeyFailed", @"Invalid participantId", nil);
|
|
428
|
-
return;
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
NSData *key = [keyProvider exportKey:participantId withIndex:[keyIndex intValue]];
|
|
432
|
-
resolve(@{@"result" : [key base64EncodedStringWithOptions:0]});
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
RCT_EXPORT_METHOD(keyProviderSetSifTrailer
|
|
436
|
-
: (nonnull NSDictionary *)constraints resolver
|
|
437
|
-
: (RCTPromiseResolveBlock)resolve rejecter
|
|
438
|
-
: (RCTPromiseRejectBlock)reject) {
|
|
439
|
-
RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
|
|
440
|
-
if (keyProvider == nil) {
|
|
441
|
-
return;
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
if (constraints[@"sifTrailer"] == nil) {
|
|
445
|
-
reject(@"keyProviderSetSifTrailerFailed", @"Invalid key", nil);
|
|
446
|
-
return;
|
|
447
|
-
}
|
|
448
|
-
NSData *sifTrailer = [[NSData alloc] initWithBase64EncodedString:constraints[@"sifTrailer"] options:0];
|
|
449
|
-
|
|
450
|
-
[keyProvider setSifTrailer:sifTrailer];
|
|
451
|
-
resolve(nil);
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
RCT_EXPORT_METHOD(keyProviderDispose
|
|
455
|
-
: (nonnull NSDictionary *)constraints resolver
|
|
456
|
-
: (RCTPromiseResolveBlock)resolve rejecter
|
|
457
|
-
: (RCTPromiseRejectBlock)reject) {
|
|
458
|
-
NSString *keyProviderId = constraints[@"keyProviderId"];
|
|
459
|
-
if (keyProviderId == nil) {
|
|
460
|
-
reject(@"getKeyProviderForIdFailed", @"Invalid keyProviderId", nil);
|
|
461
|
-
return;
|
|
462
|
-
}
|
|
463
|
-
[self.keyProviders removeObjectForKey:keyProviderId];
|
|
464
|
-
resolve(@{@"result" : @"success"});
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
- (NSString *)stringFromState:(RTCFrameCryptorState)state {
|
|
468
|
-
switch (state) {
|
|
469
|
-
case RTCFrameCryptorStateNew:
|
|
470
|
-
return @"new";
|
|
471
|
-
case RTCFrameCryptorStateOk:
|
|
472
|
-
return @"ok";
|
|
473
|
-
case RTCFrameCryptorStateEncryptionFailed:
|
|
474
|
-
return @"encryptionFailed";
|
|
475
|
-
case RTCFrameCryptorStateDecryptionFailed:
|
|
476
|
-
return @"decryptionFailed";
|
|
477
|
-
case RTCFrameCryptorStateMissingKey:
|
|
478
|
-
return @"missingKey";
|
|
479
|
-
case RTCFrameCryptorStateKeyRatcheted:
|
|
480
|
-
return @"keyRatcheted";
|
|
481
|
-
case RTCFrameCryptorStateInternalError:
|
|
482
|
-
return @"internalError";
|
|
483
|
-
default:
|
|
484
|
-
return @"unknown";
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
RCT_EXPORT_METHOD(dataPacketCryptorFactoryCreateDataPacketCryptor
|
|
489
|
-
: (nonnull NSDictionary *)constraints resolver
|
|
490
|
-
: (RCTPromiseResolveBlock)resolve rejecter
|
|
491
|
-
: (RCTPromiseRejectBlock)reject) {
|
|
492
|
-
NSNumber *algorithm = constraints[@"algorithm"];
|
|
493
|
-
NSString *keyProviderId = constraints[@"keyProviderId"];
|
|
494
|
-
if (keyProviderId == nil) {
|
|
495
|
-
reject(@"dataPacketCryptorFactoryCreateDataPacketCryptorFailed", @"Invalid keyProviderId", nil);
|
|
496
|
-
return;
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
RTCFrameCryptorKeyProvider *keyProvider = self.keyProviders[keyProviderId];
|
|
500
|
-
if (keyProvider == nil) {
|
|
501
|
-
reject(@"getKeyProviderForIdFailed", @"Invalid keyProviderId", nil);
|
|
502
|
-
return;
|
|
503
|
-
}
|
|
504
|
-
|
|
505
|
-
RTCDataPacketCryptor *cryptor = [[RTCDataPacketCryptor alloc] initWithAlgorithm:[self getAlgorithm:algorithm]
|
|
506
|
-
keyProvider:keyProvider];
|
|
507
|
-
NSString *cryptorId = [[NSUUID UUID] UUIDString];
|
|
508
|
-
|
|
509
|
-
self.dataPacketCryptors[cryptorId] = cryptor;
|
|
510
|
-
|
|
511
|
-
resolve(@{@"dataPacketCryptorId" : cryptorId});
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
RCT_EXPORT_METHOD(dataPacketCryptorEncrypt
|
|
515
|
-
: (nonnull NSDictionary *)constraints resolver
|
|
516
|
-
: (RCTPromiseResolveBlock)resolve rejecter
|
|
517
|
-
: (RCTPromiseRejectBlock)reject) {
|
|
518
|
-
NSString *cryptorId = constraints[@"dataPacketCryptorId"];
|
|
519
|
-
NSString *participantId = constraints[@"participantId"];
|
|
520
|
-
NSNumber *keyIndex = constraints[@"keyIndex"];
|
|
521
|
-
NSData *data = [self bytesFromMap:constraints key:@"data" isBase64Key:nil];
|
|
522
|
-
|
|
523
|
-
RTCDataPacketCryptor *cryptor = self.dataPacketCryptors[cryptorId];
|
|
524
|
-
|
|
525
|
-
if (cryptor == nil) {
|
|
526
|
-
reject(@"dataPacketCryptorEncryptFailed", @"data packet cryptor not found", nil);
|
|
527
|
-
return;
|
|
528
|
-
}
|
|
529
|
-
|
|
530
|
-
RTCEncryptedPacket *packet = [cryptor encrypt:participantId keyIndex:[keyIndex unsignedIntValue] data:data];
|
|
531
|
-
|
|
532
|
-
if (packet == nil) {
|
|
533
|
-
reject(@"dataPacketCryptorEncryptFailed", @"packet encryption failed", nil);
|
|
534
|
-
return;
|
|
535
|
-
}
|
|
536
|
-
|
|
537
|
-
resolve(@{
|
|
538
|
-
@"payload" : [packet.data base64EncodedStringWithOptions:0],
|
|
539
|
-
@"iv" : [packet.iv base64EncodedStringWithOptions:0],
|
|
540
|
-
@"keyIndex" : [NSNumber numberWithUnsignedInt:packet.keyIndex]
|
|
541
|
-
});
|
|
542
|
-
}
|
|
543
|
-
|
|
544
|
-
RCT_EXPORT_METHOD(dataPacketCryptorDecrypt
|
|
545
|
-
: (nonnull NSDictionary *)constraints resolver
|
|
546
|
-
: (RCTPromiseResolveBlock)resolve rejecter
|
|
547
|
-
: (RCTPromiseRejectBlock)reject) {
|
|
548
|
-
NSString *cryptorId = constraints[@"dataPacketCryptorId"];
|
|
549
|
-
NSString *participantId = constraints[@"participantId"];
|
|
550
|
-
NSNumber *keyIndex = constraints[@"keyIndex"];
|
|
551
|
-
NSData *payload = [self bytesFromMap:constraints key:@"payload" isBase64Key:nil];
|
|
552
|
-
NSData *iv = [self bytesFromMap:constraints key:@"iv" isBase64Key:nil];
|
|
553
|
-
|
|
554
|
-
RTCDataPacketCryptor *cryptor = self.dataPacketCryptors[cryptorId];
|
|
555
|
-
|
|
556
|
-
if (cryptor == nil) {
|
|
557
|
-
reject(@"dataPacketCryptorDecryptFailed", @"data packet cryptor not found", nil);
|
|
558
|
-
return;
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
RTCEncryptedPacket *packet = [[RTCEncryptedPacket alloc] initWithData:payload
|
|
562
|
-
iv:iv
|
|
563
|
-
keyIndex:[keyIndex unsignedIntValue]];
|
|
564
|
-
NSData *decryptedData = [cryptor decrypt:participantId encryptedPacket:packet];
|
|
565
|
-
|
|
566
|
-
if (decryptedData == nil) {
|
|
567
|
-
reject(@"dataPacketCryptorDecryptFailed", @"packet decryption failed", nil);
|
|
568
|
-
return;
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
resolve(@{@"data" : [decryptedData base64EncodedStringWithOptions:0]});
|
|
572
|
-
}
|
|
573
|
-
RCT_EXPORT_METHOD(dataPacketCryptorDispose
|
|
574
|
-
: (nonnull NSDictionary *)constraints resolver
|
|
575
|
-
: (RCTPromiseResolveBlock)resolve rejecter
|
|
576
|
-
: (RCTPromiseRejectBlock)reject) {
|
|
577
|
-
NSString *cryptorId = constraints[@"dataPacketCryptorId"];
|
|
578
|
-
|
|
579
|
-
RTCDataPacketCryptor *cryptor = self.dataPacketCryptors[cryptorId];
|
|
580
|
-
|
|
581
|
-
if (cryptor == nil) {
|
|
582
|
-
reject(@"dataPacketCryptorDisposeFailed", @"data packet cryptor not found", nil);
|
|
583
|
-
return;
|
|
584
|
-
}
|
|
585
|
-
|
|
586
|
-
[self.dataPacketCryptors removeObjectForKey:cryptorId];
|
|
587
|
-
resolve(@{@"result" : @"success"});
|
|
588
|
-
}
|
|
589
|
-
|
|
590
|
-
#pragma mark - RTCFrameCryptorDelegate methods
|
|
591
|
-
|
|
592
|
-
- (void)frameCryptor:(RTC_OBJC_TYPE(RTCFrameCryptor) *)frameCryptor
|
|
593
|
-
didStateChangeWithParticipantId:(NSString *)participantId
|
|
594
|
-
withState:(RTCFrameCryptorState)stateChanged {
|
|
595
|
-
id frameCryptorId = objc_getAssociatedObject(frameCryptor, &frameCryptorUUIDKey);
|
|
596
|
-
|
|
597
|
-
if (![frameCryptorId isKindOfClass:[NSString class]]) {
|
|
598
|
-
NSLog(@"Received frameCryptordidStateChangeWithParticipantId event for frame cryptor without UUID!");
|
|
599
|
-
return;
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
NSDictionary *event = @{
|
|
603
|
-
@"event" : kEventFrameCryptionStateChanged,
|
|
604
|
-
@"participantId" : participantId,
|
|
605
|
-
@"frameCryptorId" : (NSString *)frameCryptorId,
|
|
606
|
-
@"state" : [self stringFromState:stateChanged]
|
|
607
|
-
};
|
|
608
|
-
[self sendEventWithName:kEventFrameCryptionStateChanged body:event];
|
|
609
|
-
}
|
|
610
|
-
|
|
611
|
-
@end
|
|
1
|
+
#include <Foundation/Foundation.h>
|
|
2
|
+
#import <objc/runtime.h>
|
|
3
|
+
|
|
4
|
+
#import <React/RCTBridge.h>
|
|
5
|
+
#import <React/RCTBridgeModule.h>
|
|
6
|
+
|
|
7
|
+
#import "WebRTCModule+RTCPeerConnection.h"
|
|
8
|
+
#import "WebRTCModule.h"
|
|
9
|
+
|
|
10
|
+
// Key for objc_set/getAssociatedObject, value of NSString*
|
|
11
|
+
static char frameCryptorUUIDKey;
|
|
12
|
+
|
|
13
|
+
@interface WebRTCModule ()<RTCFrameCryptorDelegate>
|
|
14
|
+
@end
|
|
15
|
+
|
|
16
|
+
@implementation WebRTCModule (RTCFrameCryptor)
|
|
17
|
+
|
|
18
|
+
- (RTCCryptorAlgorithm)getAlgorithm:(NSNumber *)algorithm {
|
|
19
|
+
switch ([algorithm intValue]) {
|
|
20
|
+
// case 0:
|
|
21
|
+
// return RTCCryptorAlgorithmAesGcm;
|
|
22
|
+
// case 1:
|
|
23
|
+
// return RTCCryptorAlgorithmAesCbc;
|
|
24
|
+
default:
|
|
25
|
+
return RTCCryptorAlgorithmAesGcm;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
- (NSData *)bytesFromMap:(NSDictionary *)map key:(NSString *)key isBase64Key:(nullable NSString *)isBase64Key {
|
|
30
|
+
BOOL isBase64 = YES;
|
|
31
|
+
if (isBase64Key) {
|
|
32
|
+
isBase64 = [map[isBase64Key] boolValue];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (isBase64) {
|
|
36
|
+
return [[NSData alloc] initWithBase64EncodedString:map[key] options:0];
|
|
37
|
+
} else {
|
|
38
|
+
return [map[key] dataUsingEncoding:NSUTF8StringEncoding];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(frameCryptorFactoryCreateFrameCryptor : (nonnull NSDictionary *)constraints) {
|
|
43
|
+
__block NSString *frameCryptorId = nil;
|
|
44
|
+
dispatch_sync(self.workerQueue, ^{
|
|
45
|
+
NSNumber *peerConnectionId = constraints[@"peerConnectionId"];
|
|
46
|
+
NSNumber *algorithm = constraints[@"algorithm"];
|
|
47
|
+
if (algorithm == nil) {
|
|
48
|
+
NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Invalid algorithm");
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
NSString *participantId = constraints[@"participantId"];
|
|
53
|
+
if (participantId == nil) {
|
|
54
|
+
NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Invalid participantId");
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
NSString *keyProviderId = constraints[@"keyProviderId"];
|
|
59
|
+
if (keyProviderId == nil) {
|
|
60
|
+
NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Invalid keyProviderId");
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
RTCFrameCryptorKeyProvider *keyProvider = self.keyProviders[keyProviderId];
|
|
65
|
+
if (keyProvider == nil) {
|
|
66
|
+
NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Invalid keyProvider");
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
NSString *type = constraints[@"type"];
|
|
71
|
+
NSString *rtpSenderId = constraints[@"rtpSenderId"];
|
|
72
|
+
NSString *rtpReceiverId = constraints[@"rtpReceiverId"];
|
|
73
|
+
|
|
74
|
+
if ([type isEqualToString:@"sender"]) {
|
|
75
|
+
RTCRtpSender *sender = [self getSenderByPeerConnectionId:peerConnectionId senderId:rtpSenderId];
|
|
76
|
+
|
|
77
|
+
if (sender == nil) {
|
|
78
|
+
NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Error: sender not found!");
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
RTCFrameCryptor *frameCryptor = [[RTCFrameCryptor alloc] initWithFactory:self.peerConnectionFactory
|
|
83
|
+
rtpSender:sender
|
|
84
|
+
participantId:participantId
|
|
85
|
+
algorithm:[self getAlgorithm:algorithm]
|
|
86
|
+
keyProvider:keyProvider];
|
|
87
|
+
frameCryptorId = [[NSUUID UUID] UUIDString];
|
|
88
|
+
|
|
89
|
+
frameCryptor.delegate = self;
|
|
90
|
+
|
|
91
|
+
self.frameCryptors[frameCryptorId] = frameCryptor;
|
|
92
|
+
objc_setAssociatedObject(frameCryptor, &frameCryptorUUIDKey, frameCryptorId, OBJC_ASSOCIATION_COPY);
|
|
93
|
+
return;
|
|
94
|
+
} else if ([type isEqualToString:@"receiver"]) {
|
|
95
|
+
RTCRtpReceiver *receiver = [self getReceiverByPeerConnectionId:peerConnectionId receiverId:rtpReceiverId];
|
|
96
|
+
if (receiver == nil) {
|
|
97
|
+
NSLog(@"frameCryptorFactoryCreateFrameCryptorFailed: Error: receiver not found!");
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
RTCFrameCryptor *frameCryptor = [[RTCFrameCryptor alloc] initWithFactory:self.peerConnectionFactory
|
|
101
|
+
rtpReceiver:receiver
|
|
102
|
+
participantId:participantId
|
|
103
|
+
algorithm:[self getAlgorithm:algorithm]
|
|
104
|
+
keyProvider:keyProvider];
|
|
105
|
+
frameCryptorId = [[NSUUID UUID] UUIDString];
|
|
106
|
+
|
|
107
|
+
frameCryptor.delegate = self;
|
|
108
|
+
|
|
109
|
+
self.frameCryptors[frameCryptorId] = frameCryptor;
|
|
110
|
+
objc_setAssociatedObject(frameCryptor, &frameCryptorUUIDKey, frameCryptorId, OBJC_ASSOCIATION_COPY);
|
|
111
|
+
return;
|
|
112
|
+
} else {
|
|
113
|
+
NSLog(@"InvalidArgument: Invalid type");
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
return frameCryptorId;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
RCT_EXPORT_METHOD(frameCryptorSetKeyIndex
|
|
122
|
+
: (nonnull NSDictionary *)constraints resolver
|
|
123
|
+
: (RCTPromiseResolveBlock)resolve rejecter
|
|
124
|
+
: (RCTPromiseRejectBlock)reject) {
|
|
125
|
+
NSString *frameCryptorId = constraints[@"frameCryptorId"];
|
|
126
|
+
if (frameCryptorId == nil) {
|
|
127
|
+
reject(@"frameCryptorSetKeyIndexFailed", @"Invalid frameCryptorId", nil);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
RTCFrameCryptor *frameCryptor = self.frameCryptors[frameCryptorId];
|
|
131
|
+
if (frameCryptor == nil) {
|
|
132
|
+
reject(@"frameCryptorSetKeyIndexFailed", @"Invalid frameCryptor", nil);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
NSNumber *keyIndex = constraints[@"keyIndex"];
|
|
137
|
+
if (keyIndex == nil) {
|
|
138
|
+
reject(@"frameCryptorSetKeyIndexFailed", @"Invalid keyIndex", nil);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
[frameCryptor setKeyIndex:[keyIndex intValue]];
|
|
142
|
+
resolve(@{@"result" : @YES});
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
RCT_EXPORT_METHOD(frameCryptorGetKeyIndex
|
|
146
|
+
: (nonnull NSDictionary *)constraints resolver
|
|
147
|
+
: (RCTPromiseResolveBlock)resolve rejecter
|
|
148
|
+
: (RCTPromiseRejectBlock)reject) {
|
|
149
|
+
NSString *frameCryptorId = constraints[@"frameCryptorId"];
|
|
150
|
+
if (frameCryptorId == nil) {
|
|
151
|
+
reject(@"frameCryptorGetKeyIndexFailed", @"Invalid frameCryptorId", nil);
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
RTCFrameCryptor *frameCryptor = self.frameCryptors[frameCryptorId];
|
|
155
|
+
if (frameCryptor == nil) {
|
|
156
|
+
reject(@"frameCryptorGetKeyIndexFailed", @"Invalid frameCryptor", nil);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
resolve(@{@"keyIndex" : [NSNumber numberWithInt:frameCryptor.keyIndex]});
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
RCT_EXPORT_METHOD(frameCryptorSetEnabled
|
|
163
|
+
: (nonnull NSDictionary *)constraints resolver
|
|
164
|
+
: (RCTPromiseResolveBlock)resolve rejecter
|
|
165
|
+
: (RCTPromiseRejectBlock)reject) {
|
|
166
|
+
NSString *frameCryptorId = constraints[@"frameCryptorId"];
|
|
167
|
+
if (frameCryptorId == nil) {
|
|
168
|
+
reject(@"frameCryptorSetEnabledFailed", @"Invalid frameCryptorId", nil);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
RTCFrameCryptor *frameCryptor = self.frameCryptors[frameCryptorId];
|
|
172
|
+
if (frameCryptor == nil) {
|
|
173
|
+
reject(@"frameCryptorSetEnabledFailed", @"Invalid frameCryptor", nil);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
NSNumber *enabled = constraints[@"enabled"];
|
|
178
|
+
if (enabled == nil) {
|
|
179
|
+
reject(@"frameCryptorSetEnabledFailed", @"Invalid enabled", nil);
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
frameCryptor.enabled = [enabled boolValue];
|
|
183
|
+
resolve(@{@"result" : enabled});
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
RCT_EXPORT_METHOD(frameCryptorGetEnabled
|
|
187
|
+
: (nonnull NSDictionary *)constraints resolver
|
|
188
|
+
: (RCTPromiseResolveBlock)resolve rejecter
|
|
189
|
+
: (RCTPromiseRejectBlock)reject) {
|
|
190
|
+
NSString *frameCryptorId = constraints[@"frameCryptorId"];
|
|
191
|
+
if (frameCryptorId == nil) {
|
|
192
|
+
reject(@"frameCryptorGetEnabledFailed", @"Invalid frameCryptorId", nil);
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
RTCFrameCryptor *frameCryptor = self.frameCryptors[frameCryptorId];
|
|
196
|
+
if (frameCryptor == nil) {
|
|
197
|
+
reject(@"frameCryptorGetEnabledFailed", @"Invalid frameCryptor", nil);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
resolve(@{@"enabled" : [NSNumber numberWithBool:frameCryptor.enabled]});
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
RCT_EXPORT_METHOD(frameCryptorDispose
|
|
204
|
+
: (nonnull NSDictionary *)constraints resolver
|
|
205
|
+
: (RCTPromiseResolveBlock)resolve rejecter
|
|
206
|
+
: (RCTPromiseRejectBlock)reject) {
|
|
207
|
+
NSString *frameCryptorId = constraints[@"frameCryptorId"];
|
|
208
|
+
if (frameCryptorId == nil) {
|
|
209
|
+
reject(@"frameCryptorDisposeFailed", @"Invalid frameCryptorId", nil);
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
RTCFrameCryptor *frameCryptor = self.frameCryptors[frameCryptorId];
|
|
213
|
+
if (frameCryptor == nil) {
|
|
214
|
+
reject(@"frameCryptorDisposeFailed", @"Invalid frameCryptor", nil);
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
[self.frameCryptors removeObjectForKey:frameCryptorId];
|
|
218
|
+
frameCryptor.enabled = NO;
|
|
219
|
+
resolve(@{@"result" : @"success"});
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(frameCryptorFactoryCreateKeyProvider
|
|
223
|
+
: (nonnull NSDictionary *)keyProviderOptions) {
|
|
224
|
+
__block NSString *keyProviderId = [[NSUUID UUID] UUIDString];
|
|
225
|
+
|
|
226
|
+
dispatch_sync(self.workerQueue, ^{
|
|
227
|
+
NSNumber *sharedKey = keyProviderOptions[@"sharedKey"];
|
|
228
|
+
if (sharedKey == nil) {
|
|
229
|
+
NSLog(@"frameCryptorFactoryCreateKeyProviderFailed: Invalid sharedKey");
|
|
230
|
+
keyProviderId = nil;
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
if (keyProviderOptions[@"ratchetSalt"] == nil) {
|
|
235
|
+
NSLog(@"frameCryptorFactoryCreateKeyProviderFailed: Invalid ratchetSalt");
|
|
236
|
+
keyProviderId = nil;
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
NSData *ratchetSalt = [self bytesFromMap:keyProviderOptions
|
|
240
|
+
key:@"ratchetSalt"
|
|
241
|
+
isBase64Key:@"ratchetSaltIsBase64"];
|
|
242
|
+
|
|
243
|
+
NSNumber *ratchetWindowSize = keyProviderOptions[@"ratchetWindowSize"];
|
|
244
|
+
if (ratchetWindowSize == nil) {
|
|
245
|
+
NSLog(@"frameCryptorFactoryCreateKeyProviderFailed: Invalid ratchetWindowSize");
|
|
246
|
+
keyProviderId = nil;
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
NSNumber *failureTolerance = keyProviderOptions[@"failureTolerance"];
|
|
251
|
+
NSData *uncryptedMagicBytes = nil;
|
|
252
|
+
|
|
253
|
+
if (keyProviderOptions[@"uncryptedMagicBytes"] != nil) {
|
|
254
|
+
uncryptedMagicBytes = [[NSData alloc] initWithBase64EncodedString:keyProviderOptions[@"uncryptedMagicBytes"]
|
|
255
|
+
options:0];
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
NSNumber *keyRingSize = keyProviderOptions[@"keyRingSize"];
|
|
259
|
+
NSNumber *discardFrameWhenCryptorNotReady = keyProviderOptions[@"discardFrameWhenCryptorNotReady"];
|
|
260
|
+
|
|
261
|
+
RTCFrameCryptorKeyProvider *keyProvider = [[RTCFrameCryptorKeyProvider alloc]
|
|
262
|
+
initWithRatchetSalt:ratchetSalt
|
|
263
|
+
ratchetWindowSize:[ratchetWindowSize intValue]
|
|
264
|
+
sharedKeyMode:[sharedKey boolValue]
|
|
265
|
+
uncryptedMagicBytes:uncryptedMagicBytes
|
|
266
|
+
failureTolerance:failureTolerance != nil ? [failureTolerance intValue] : -1
|
|
267
|
+
keyRingSize:keyRingSize != nil ? [keyRingSize intValue] : 0
|
|
268
|
+
discardFrameWhenCryptorNotReady:discardFrameWhenCryptorNotReady != nil
|
|
269
|
+
? [discardFrameWhenCryptorNotReady boolValue]
|
|
270
|
+
: NO];
|
|
271
|
+
self.keyProviders[keyProviderId] = keyProvider;
|
|
272
|
+
return;
|
|
273
|
+
});
|
|
274
|
+
return keyProviderId;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
- (nullable RTCFrameCryptorKeyProvider *)getKeyProviderForId:(NSString *)keyProviderId
|
|
278
|
+
rejecter:(RCTPromiseRejectBlock)reject {
|
|
279
|
+
if (keyProviderId == nil) {
|
|
280
|
+
reject(@"getKeyProviderForIdFailed", @"Invalid keyProviderId", nil);
|
|
281
|
+
return nil;
|
|
282
|
+
}
|
|
283
|
+
RTCFrameCryptorKeyProvider *keyProvider = self.keyProviders[keyProviderId];
|
|
284
|
+
if (keyProvider == nil) {
|
|
285
|
+
reject(@"getKeyProviderForIdFailed", @"Invalid keyProvider", nil);
|
|
286
|
+
return nil;
|
|
287
|
+
}
|
|
288
|
+
return keyProvider;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
RCT_EXPORT_METHOD(keyProviderSetSharedKey
|
|
292
|
+
: (nonnull NSDictionary *)constraints resolver
|
|
293
|
+
: (RCTPromiseResolveBlock)resolve rejecter
|
|
294
|
+
: (RCTPromiseRejectBlock)reject) {
|
|
295
|
+
RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
|
|
296
|
+
if (keyProvider == nil) {
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
NSNumber *keyIndex = constraints[@"keyIndex"];
|
|
301
|
+
if (keyIndex == nil) {
|
|
302
|
+
reject(@"keyProviderSetSharedKey", @"Invalid keyIndex", nil);
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
if (constraints[@"key"] == nil) {
|
|
307
|
+
reject(@"keyProviderSetSharedKey", @"Invalid key", nil);
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
NSData *key = [self bytesFromMap:constraints key:@"key" isBase64Key:@"keyIsBase64"];
|
|
311
|
+
|
|
312
|
+
[keyProvider setSharedKey:key withIndex:[keyIndex intValue]];
|
|
313
|
+
resolve(@{@"result" : @YES});
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
RCT_EXPORT_METHOD(keyProviderRatchetSharedKey
|
|
317
|
+
: (nonnull NSDictionary *)constraints resolver
|
|
318
|
+
: (RCTPromiseResolveBlock)resolve rejecter
|
|
319
|
+
: (RCTPromiseRejectBlock)reject) {
|
|
320
|
+
RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
|
|
321
|
+
if (keyProvider == nil) {
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
NSNumber *keyIndex = constraints[@"keyIndex"];
|
|
326
|
+
if (keyIndex == nil) {
|
|
327
|
+
reject(@"keyProviderRatchetSharedKeyFailed", @"Invalid keyIndex", nil);
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
NSData *newKey = [keyProvider ratchetSharedKey:[keyIndex intValue]];
|
|
332
|
+
resolve(@{@"result" : [newKey base64EncodedStringWithOptions:0]});
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
RCT_EXPORT_METHOD(keyProviderExportSharedKey
|
|
336
|
+
: (nonnull NSDictionary *)constraints resolver
|
|
337
|
+
: (RCTPromiseResolveBlock)resolve rejecter
|
|
338
|
+
: (RCTPromiseRejectBlock)reject) {
|
|
339
|
+
RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
|
|
340
|
+
if (keyProvider == nil) {
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
NSNumber *keyIndex = constraints[@"keyIndex"];
|
|
345
|
+
if (keyIndex == nil) {
|
|
346
|
+
reject(@"keyProviderExportSharedKeyFailed", @"Invalid keyIndex", nil);
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
NSData *key = [keyProvider exportSharedKey:[keyIndex intValue]];
|
|
351
|
+
resolve(@{@"result" : [key base64EncodedStringWithOptions:0]});
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
RCT_EXPORT_METHOD(keyProviderSetKey
|
|
355
|
+
: (nonnull NSDictionary *)constraints resolver
|
|
356
|
+
: (RCTPromiseResolveBlock)resolve rejecter
|
|
357
|
+
: (RCTPromiseRejectBlock)reject) {
|
|
358
|
+
RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
|
|
359
|
+
if (keyProvider == nil) {
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
NSNumber *keyIndex = constraints[@"keyIndex"];
|
|
364
|
+
if (keyIndex == nil) {
|
|
365
|
+
reject(@"keyProviderSetKeyFailed", @"Invalid keyIndex", nil);
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
if (constraints[@"key"] == nil) {
|
|
370
|
+
reject(@"keyProviderSetKeyFailed", @"Invalid key", nil);
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
NSData *key = [self bytesFromMap:constraints key:@"key" isBase64Key:@"keyIsBase64"];
|
|
374
|
+
|
|
375
|
+
NSString *participantId = constraints[@"participantId"];
|
|
376
|
+
if (participantId == nil) {
|
|
377
|
+
reject(@"keyProviderSetKeyFailed", @"Invalid participantId", nil);
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
[keyProvider setKey:key withIndex:[keyIndex intValue] forParticipant:participantId];
|
|
382
|
+
resolve(@{@"result" : @YES});
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
RCT_EXPORT_METHOD(keyProviderRatchetKey
|
|
386
|
+
: (nonnull NSDictionary *)constraints resolver
|
|
387
|
+
: (RCTPromiseResolveBlock)resolve rejecter
|
|
388
|
+
: (RCTPromiseRejectBlock)reject) {
|
|
389
|
+
RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
|
|
390
|
+
if (keyProvider == nil) {
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
NSNumber *keyIndex = constraints[@"keyIndex"];
|
|
395
|
+
if (keyIndex == nil) {
|
|
396
|
+
reject(@"keyProviderRatchetKeyFailed", @"Invalid keyIndex", nil);
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
NSString *participantId = constraints[@"participantId"];
|
|
401
|
+
if (participantId == nil) {
|
|
402
|
+
reject(@"keyProviderRatchetKeyFailed", @"Invalid participantId", nil);
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
NSData *newKey = [keyProvider ratchetKey:participantId withIndex:[keyIndex intValue]];
|
|
407
|
+
resolve(@{@"result" : [newKey base64EncodedStringWithOptions:0]});
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
RCT_EXPORT_METHOD(keyProviderExportKey
|
|
411
|
+
: (nonnull NSDictionary *)constraints resolver
|
|
412
|
+
: (RCTPromiseResolveBlock)resolve rejecter
|
|
413
|
+
: (RCTPromiseRejectBlock)reject) {
|
|
414
|
+
RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
|
|
415
|
+
if (keyProvider == nil) {
|
|
416
|
+
return;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
NSNumber *keyIndex = constraints[@"keyIndex"];
|
|
420
|
+
if (keyIndex == nil) {
|
|
421
|
+
reject(@"keyProviderExportKeyFailed", @"Invalid keyIndex", nil);
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
NSString *participantId = constraints[@"participantId"];
|
|
426
|
+
if (participantId == nil) {
|
|
427
|
+
reject(@"keyProviderExportKeyFailed", @"Invalid participantId", nil);
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
NSData *key = [keyProvider exportKey:participantId withIndex:[keyIndex intValue]];
|
|
432
|
+
resolve(@{@"result" : [key base64EncodedStringWithOptions:0]});
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
RCT_EXPORT_METHOD(keyProviderSetSifTrailer
|
|
436
|
+
: (nonnull NSDictionary *)constraints resolver
|
|
437
|
+
: (RCTPromiseResolveBlock)resolve rejecter
|
|
438
|
+
: (RCTPromiseRejectBlock)reject) {
|
|
439
|
+
RTCFrameCryptorKeyProvider *keyProvider = [self getKeyProviderForId:constraints[@"keyProviderId"] rejecter:reject];
|
|
440
|
+
if (keyProvider == nil) {
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
if (constraints[@"sifTrailer"] == nil) {
|
|
445
|
+
reject(@"keyProviderSetSifTrailerFailed", @"Invalid key", nil);
|
|
446
|
+
return;
|
|
447
|
+
}
|
|
448
|
+
NSData *sifTrailer = [[NSData alloc] initWithBase64EncodedString:constraints[@"sifTrailer"] options:0];
|
|
449
|
+
|
|
450
|
+
[keyProvider setSifTrailer:sifTrailer];
|
|
451
|
+
resolve(nil);
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
RCT_EXPORT_METHOD(keyProviderDispose
|
|
455
|
+
: (nonnull NSDictionary *)constraints resolver
|
|
456
|
+
: (RCTPromiseResolveBlock)resolve rejecter
|
|
457
|
+
: (RCTPromiseRejectBlock)reject) {
|
|
458
|
+
NSString *keyProviderId = constraints[@"keyProviderId"];
|
|
459
|
+
if (keyProviderId == nil) {
|
|
460
|
+
reject(@"getKeyProviderForIdFailed", @"Invalid keyProviderId", nil);
|
|
461
|
+
return;
|
|
462
|
+
}
|
|
463
|
+
[self.keyProviders removeObjectForKey:keyProviderId];
|
|
464
|
+
resolve(@{@"result" : @"success"});
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
- (NSString *)stringFromState:(RTCFrameCryptorState)state {
|
|
468
|
+
switch (state) {
|
|
469
|
+
case RTCFrameCryptorStateNew:
|
|
470
|
+
return @"new";
|
|
471
|
+
case RTCFrameCryptorStateOk:
|
|
472
|
+
return @"ok";
|
|
473
|
+
case RTCFrameCryptorStateEncryptionFailed:
|
|
474
|
+
return @"encryptionFailed";
|
|
475
|
+
case RTCFrameCryptorStateDecryptionFailed:
|
|
476
|
+
return @"decryptionFailed";
|
|
477
|
+
case RTCFrameCryptorStateMissingKey:
|
|
478
|
+
return @"missingKey";
|
|
479
|
+
case RTCFrameCryptorStateKeyRatcheted:
|
|
480
|
+
return @"keyRatcheted";
|
|
481
|
+
case RTCFrameCryptorStateInternalError:
|
|
482
|
+
return @"internalError";
|
|
483
|
+
default:
|
|
484
|
+
return @"unknown";
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
RCT_EXPORT_METHOD(dataPacketCryptorFactoryCreateDataPacketCryptor
|
|
489
|
+
: (nonnull NSDictionary *)constraints resolver
|
|
490
|
+
: (RCTPromiseResolveBlock)resolve rejecter
|
|
491
|
+
: (RCTPromiseRejectBlock)reject) {
|
|
492
|
+
NSNumber *algorithm = constraints[@"algorithm"];
|
|
493
|
+
NSString *keyProviderId = constraints[@"keyProviderId"];
|
|
494
|
+
if (keyProviderId == nil) {
|
|
495
|
+
reject(@"dataPacketCryptorFactoryCreateDataPacketCryptorFailed", @"Invalid keyProviderId", nil);
|
|
496
|
+
return;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
RTCFrameCryptorKeyProvider *keyProvider = self.keyProviders[keyProviderId];
|
|
500
|
+
if (keyProvider == nil) {
|
|
501
|
+
reject(@"getKeyProviderForIdFailed", @"Invalid keyProviderId", nil);
|
|
502
|
+
return;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
RTCDataPacketCryptor *cryptor = [[RTCDataPacketCryptor alloc] initWithAlgorithm:[self getAlgorithm:algorithm]
|
|
506
|
+
keyProvider:keyProvider];
|
|
507
|
+
NSString *cryptorId = [[NSUUID UUID] UUIDString];
|
|
508
|
+
|
|
509
|
+
self.dataPacketCryptors[cryptorId] = cryptor;
|
|
510
|
+
|
|
511
|
+
resolve(@{@"dataPacketCryptorId" : cryptorId});
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
RCT_EXPORT_METHOD(dataPacketCryptorEncrypt
|
|
515
|
+
: (nonnull NSDictionary *)constraints resolver
|
|
516
|
+
: (RCTPromiseResolveBlock)resolve rejecter
|
|
517
|
+
: (RCTPromiseRejectBlock)reject) {
|
|
518
|
+
NSString *cryptorId = constraints[@"dataPacketCryptorId"];
|
|
519
|
+
NSString *participantId = constraints[@"participantId"];
|
|
520
|
+
NSNumber *keyIndex = constraints[@"keyIndex"];
|
|
521
|
+
NSData *data = [self bytesFromMap:constraints key:@"data" isBase64Key:nil];
|
|
522
|
+
|
|
523
|
+
RTCDataPacketCryptor *cryptor = self.dataPacketCryptors[cryptorId];
|
|
524
|
+
|
|
525
|
+
if (cryptor == nil) {
|
|
526
|
+
reject(@"dataPacketCryptorEncryptFailed", @"data packet cryptor not found", nil);
|
|
527
|
+
return;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
RTCEncryptedPacket *packet = [cryptor encrypt:participantId keyIndex:[keyIndex unsignedIntValue] data:data];
|
|
531
|
+
|
|
532
|
+
if (packet == nil) {
|
|
533
|
+
reject(@"dataPacketCryptorEncryptFailed", @"packet encryption failed", nil);
|
|
534
|
+
return;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
resolve(@{
|
|
538
|
+
@"payload" : [packet.data base64EncodedStringWithOptions:0],
|
|
539
|
+
@"iv" : [packet.iv base64EncodedStringWithOptions:0],
|
|
540
|
+
@"keyIndex" : [NSNumber numberWithUnsignedInt:packet.keyIndex]
|
|
541
|
+
});
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
RCT_EXPORT_METHOD(dataPacketCryptorDecrypt
|
|
545
|
+
: (nonnull NSDictionary *)constraints resolver
|
|
546
|
+
: (RCTPromiseResolveBlock)resolve rejecter
|
|
547
|
+
: (RCTPromiseRejectBlock)reject) {
|
|
548
|
+
NSString *cryptorId = constraints[@"dataPacketCryptorId"];
|
|
549
|
+
NSString *participantId = constraints[@"participantId"];
|
|
550
|
+
NSNumber *keyIndex = constraints[@"keyIndex"];
|
|
551
|
+
NSData *payload = [self bytesFromMap:constraints key:@"payload" isBase64Key:nil];
|
|
552
|
+
NSData *iv = [self bytesFromMap:constraints key:@"iv" isBase64Key:nil];
|
|
553
|
+
|
|
554
|
+
RTCDataPacketCryptor *cryptor = self.dataPacketCryptors[cryptorId];
|
|
555
|
+
|
|
556
|
+
if (cryptor == nil) {
|
|
557
|
+
reject(@"dataPacketCryptorDecryptFailed", @"data packet cryptor not found", nil);
|
|
558
|
+
return;
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
RTCEncryptedPacket *packet = [[RTCEncryptedPacket alloc] initWithData:payload
|
|
562
|
+
iv:iv
|
|
563
|
+
keyIndex:[keyIndex unsignedIntValue]];
|
|
564
|
+
NSData *decryptedData = [cryptor decrypt:participantId encryptedPacket:packet];
|
|
565
|
+
|
|
566
|
+
if (decryptedData == nil) {
|
|
567
|
+
reject(@"dataPacketCryptorDecryptFailed", @"packet decryption failed", nil);
|
|
568
|
+
return;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
resolve(@{@"data" : [decryptedData base64EncodedStringWithOptions:0]});
|
|
572
|
+
}
|
|
573
|
+
RCT_EXPORT_METHOD(dataPacketCryptorDispose
|
|
574
|
+
: (nonnull NSDictionary *)constraints resolver
|
|
575
|
+
: (RCTPromiseResolveBlock)resolve rejecter
|
|
576
|
+
: (RCTPromiseRejectBlock)reject) {
|
|
577
|
+
NSString *cryptorId = constraints[@"dataPacketCryptorId"];
|
|
578
|
+
|
|
579
|
+
RTCDataPacketCryptor *cryptor = self.dataPacketCryptors[cryptorId];
|
|
580
|
+
|
|
581
|
+
if (cryptor == nil) {
|
|
582
|
+
reject(@"dataPacketCryptorDisposeFailed", @"data packet cryptor not found", nil);
|
|
583
|
+
return;
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
[self.dataPacketCryptors removeObjectForKey:cryptorId];
|
|
587
|
+
resolve(@{@"result" : @"success"});
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
#pragma mark - RTCFrameCryptorDelegate methods
|
|
591
|
+
|
|
592
|
+
- (void)frameCryptor:(RTC_OBJC_TYPE(RTCFrameCryptor) *)frameCryptor
|
|
593
|
+
didStateChangeWithParticipantId:(NSString *)participantId
|
|
594
|
+
withState:(RTCFrameCryptorState)stateChanged {
|
|
595
|
+
id frameCryptorId = objc_getAssociatedObject(frameCryptor, &frameCryptorUUIDKey);
|
|
596
|
+
|
|
597
|
+
if (![frameCryptorId isKindOfClass:[NSString class]]) {
|
|
598
|
+
NSLog(@"Received frameCryptordidStateChangeWithParticipantId event for frame cryptor without UUID!");
|
|
599
|
+
return;
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
NSDictionary *event = @{
|
|
603
|
+
@"event" : kEventFrameCryptionStateChanged,
|
|
604
|
+
@"participantId" : participantId,
|
|
605
|
+
@"frameCryptorId" : (NSString *)frameCryptorId,
|
|
606
|
+
@"state" : [self stringFromState:stateChanged]
|
|
607
|
+
};
|
|
608
|
+
[self sendEventWithName:kEventFrameCryptionStateChanged body:event];
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
@end
|