react-native-update 10.59.2 → 10.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README-CN.md +13 -7
- package/README.md +15 -6
- package/android/build.gradle +25 -33
- package/android/jni/Android.mk +18 -24
- package/android/jni/Application.mk +3 -1
- package/android/lib/arm64-v8a/librnpushy.so +0 -0
- package/android/lib/armeabi-v7a/librnpushy.so +0 -0
- package/android/lib/x86/librnpushy.so +0 -0
- package/android/lib/x86_64/librnpushy.so +0 -0
- package/android/proguard.pro +9 -7
- package/android/src/main/java/cn/reactnative/modules/update/ApkInstaller.java +3 -8
- package/android/src/main/java/cn/reactnative/modules/update/ArchiveLimits.java +24 -6
- package/android/src/main/java/cn/reactnative/modules/update/BundlePreparationResult.java +2 -0
- package/android/src/main/java/cn/reactnative/modules/update/BundledResourceCopier.java +50 -51
- package/android/src/main/java/cn/reactnative/modules/update/CleanupKeepNames.java +12 -13
- package/android/src/main/java/cn/reactnative/modules/update/CopyGroupResult.java +3 -0
- package/android/src/main/java/cn/reactnative/modules/update/CrashHold.java +22 -30
- package/android/src/main/java/cn/reactnative/modules/update/DownloadTask.java +284 -452
- package/android/src/main/java/cn/reactnative/modules/update/DownloadTaskParams.java +8 -4
- package/android/src/main/java/cn/reactnative/modules/update/ErrorCodes.java +32 -3
- package/android/src/main/java/cn/reactnative/modules/update/FileOperationException.java +1 -1
- package/android/src/main/java/cn/reactnative/modules/update/FlowBridge.java +39 -8
- package/android/src/main/java/cn/reactnative/modules/update/HttpClients.java +63 -0
- package/android/src/main/java/cn/reactnative/modules/update/HttpUtils.java +0 -45
- package/android/src/main/java/cn/reactnative/modules/update/InstallRecord.java +68 -116
- package/android/src/main/java/cn/reactnative/modules/update/NativeCore.java +10 -2
- package/android/src/main/java/cn/reactnative/modules/update/PatchFailedException.java +1 -1
- package/android/src/main/java/cn/reactnative/modules/update/PushyRuntime.java +53 -62
- package/android/src/main/java/cn/reactnative/modules/update/ReactReloadManager.java +9 -24
- package/android/src/main/java/cn/reactnative/modules/update/ResumePlan.java +31 -0
- package/android/src/main/java/cn/reactnative/modules/update/SafeZipFile.java +42 -80
- package/android/src/main/java/cn/reactnative/modules/update/StateSerialRunner.java +22 -39
- package/android/src/main/java/cn/reactnative/modules/update/SyncCoordinator.java +474 -500
- package/android/src/main/java/cn/reactnative/modules/update/Texts.java +15 -1
- package/android/src/main/java/cn/reactnative/modules/update/Threads.java +44 -0
- package/android/src/main/java/cn/reactnative/modules/update/UpdateContext.java +265 -188
- package/android/src/main/java/cn/reactnative/modules/update/UpdateEventEmitter.java +1 -1
- package/android/src/main/java/cn/reactnative/modules/update/UpdateFileUtils.java +75 -17
- package/android/src/main/java/cn/reactnative/modules/update/{UpdateModuleImpl.java → UpdateModule.java} +114 -96
- package/android/src/main/java/cn/reactnative/modules/update/UpdatePackage.java +16 -19
- package/android/src/main/java/cn/reactnative/modules/update/VersionScopedKeys.java +64 -0
- package/android/src/oldarch/cn/reactnative/modules/update/NativePushySpec.java +71 -0
- package/cpp/android_jni/archive_limits_jni.cpp +83 -0
- package/cpp/android_jni/install_record_jni.cpp +89 -0
- package/cpp/android_jni/jni_log.h +30 -0
- package/cpp/android_jni/jni_natives.h +46 -0
- package/cpp/android_jni/jni_registration.cpp +146 -0
- package/cpp/android_jni/jni_util.h +160 -0
- package/cpp/android_jni/resume_plan_jni.cpp +58 -0
- package/cpp/android_jni/update_core_android.cpp +448 -0
- package/cpp/android_jni/update_flow_jni.cpp +150 -0
- package/{android/jni → cpp/hpatch}/hpatch.c +5 -5
- package/{android/jni → cpp/hpatch}/hpatch.h +4 -1
- package/cpp/patch_core/archive_limits.cpp +194 -0
- package/cpp/patch_core/archive_limits.h +101 -10
- package/cpp/patch_core/archive_patch_core.cpp +98 -15
- package/cpp/patch_core/archive_patch_core.h +51 -0
- package/cpp/patch_core/digest.h +5 -4
- package/cpp/patch_core/error_codes.h +15 -11
- package/cpp/patch_core/install_record.cpp +430 -0
- package/cpp/patch_core/install_record.h +165 -9
- package/cpp/patch_core/native_texts.h +102 -0
- package/cpp/patch_core/patch_core.cpp +62 -16
- package/cpp/patch_core/patch_core.h +27 -7
- package/cpp/patch_core/patch_manifest.cpp +201 -0
- package/cpp/patch_core/patch_manifest.h +74 -0
- package/cpp/patch_core/resume_plan.cpp +226 -0
- package/cpp/patch_core/resume_plan.h +88 -0
- package/cpp/patch_core/state_ops.h +5 -3
- package/cpp/update_flow_core/flow_json.cpp +82 -8
- package/cpp/update_flow_core/flow_json.h +21 -0
- package/cpp/update_flow_core/native_config.cpp +436 -0
- package/cpp/update_flow_core/native_config.h +84 -0
- package/cpp/update_flow_core/native_round.cpp +321 -0
- package/cpp/update_flow_core/native_round.h +94 -0
- package/cpp/update_flow_core/round_engine.cpp +456 -0
- package/cpp/update_flow_core/round_engine.h +106 -0
- package/cpp/update_flow_core/update_flow_core.cpp +5 -14
- package/cpp/update_flow_core/update_flow_core.h +2 -2
- package/harmony/hvigor-plugin.ts +11 -19
- package/harmony/pushy/src/main/cpp/CMakeLists.txt +19 -26
- package/harmony/pushy/src/main/cpp/PushyPackage.h +2 -2
- package/harmony/pushy/src/main/cpp/PushyTurboModule.cpp +57 -94
- package/harmony/pushy/src/main/cpp/pushy.cpp +817 -518
- package/harmony/pushy/src/main/ets/ArchiveLimits.ts +55 -75
- package/harmony/pushy/src/main/ets/DownloadTask.ts +279 -539
- package/harmony/pushy/src/main/ets/DownloadTaskParams.ts +6 -6
- package/harmony/pushy/src/main/ets/ErrorCodes.ts +3 -15
- package/harmony/pushy/src/main/ets/EventHub.ts +1 -1
- package/harmony/pushy/src/main/ets/InstallRecord.ts +54 -151
- package/harmony/pushy/src/main/ets/Logger.ts +20 -34
- package/harmony/pushy/src/main/ets/NativePatchCore.ts +150 -41
- package/harmony/pushy/src/main/ets/PushyConfiguration.ts +8 -85
- package/harmony/pushy/src/main/ets/PushyFileJSBundleProvider.ets +8 -3
- package/harmony/pushy/src/main/ets/PushyTurboModule.ts +11 -25
- package/harmony/pushy/src/main/ets/SaveFile.ts +99 -18
- package/harmony/pushy/src/main/ets/SyncCoordinator.ts +291 -543
- package/harmony/pushy/src/main/ets/Texts.ts +8 -7
- package/harmony/pushy/src/main/ets/UpdateContext.ts +245 -152
- package/harmony/pushy.har +0 -0
- package/ios/RCTPushy/RCTPushy+Launch.mm +190 -0
- package/ios/RCTPushy/RCTPushy.h +12 -0
- package/ios/RCTPushy/RCTPushy.mm +135 -2666
- package/ios/RCTPushy/RCTPushyCommon.h +28 -0
- package/ios/RCTPushy/RCTPushyConfiguration.h +0 -8
- package/ios/RCTPushy/RCTPushyConfiguration.mm +40 -123
- package/ios/RCTPushy/RCTPushyDownloader.mm +152 -198
- package/ios/RCTPushy/RCTPushyInstallRecord.mm +101 -0
- package/ios/RCTPushy/RCTPushyInstaller.mm +732 -0
- package/ios/RCTPushy/RCTPushyInternal.h +185 -0
- package/ios/RCTPushy/RCTPushyOrchestrator.mm +969 -0
- package/ios/RCTPushy/RCTPushyState.mm +382 -0
- package/package.json +46 -25
- package/react-native-update.podspec +73 -82
- package/src/client.ts +126 -1633
- package/src/clientActivation.ts +324 -0
- package/src/clientCheck.ts +405 -0
- package/src/clientDownload.ts +448 -0
- package/src/clientNativeConfig.ts +171 -0
- package/src/clientReporter.ts +398 -0
- package/src/clientState.ts +51 -0
- package/src/context.ts +1 -1
- package/src/core.ts +39 -10
- package/src/endpoint.ts +22 -8
- package/src/error.ts +18 -35
- package/src/i18n.ts +18 -83
- package/src/locales/en.ts +1 -5
- package/src/locales/zh.ts +1 -5
- package/src/provider.tsx +86 -67
- package/src/telemetry.ts +0 -13
- package/src/type.ts +0 -15
- package/src/updateFlowCore.ts +116 -10
- package/src/utils.ts +49 -42
- package/android/jni/HDiffPatch/.travis.yml +0 -33
- package/android/jni/HDiffPatch/CHANGELOG.md +0 -153
- package/android/jni/HDiffPatch/Makefile +0 -157
- package/android/jni/HDiffPatch/_atosize.h +0 -83
- package/android/jni/HDiffPatch/_clock_for_demo.h +0 -47
- package/android/jni/HDiffPatch/_dir_ignore.h +0 -191
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/Android.mk +0 -37
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/Application.mk +0 -7
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/build_libs.bat +0 -1
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/build_libs.sh +0 -1
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch.c +0 -18
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch.h +0 -20
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch_jni.c +0 -28
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/java/com/github/sisong/HPatch.java +0 -8
- package/android/jni/HDiffPatch/builds/codeblocks/HDiffPatch.workspace +0 -8
- package/android/jni/HDiffPatch/builds/codeblocks/HDiffZ.cbp +0 -219
- package/android/jni/HDiffPatch/builds/codeblocks/HPatchZ.cbp +0 -156
- package/android/jni/HDiffPatch/builds/codeblocks/unitTest.cbp +0 -65
- package/android/jni/HDiffPatch/builds/vc/HDiffPatch.sln +0 -105
- package/android/jni/HDiffPatch/builds/vc/HDiffZ.vcxproj +0 -237
- package/android/jni/HDiffPatch/builds/vc/HDiffZ.vcxproj.user +0 -3
- package/android/jni/HDiffPatch/builds/vc/HPatchZ.vcxproj +0 -318
- package/android/jni/HDiffPatch/builds/vc/HPatchZ.vcxproj.user +0 -3
- package/android/jni/HDiffPatch/builds/vc/unitTest.vcxproj +0 -182
- package/android/jni/HDiffPatch/builds/vc/unitTest.vcxproj.user +0 -3
- package/android/jni/HDiffPatch/builds/xcode/HDiffPatch.xcworkspace/contents.xcworkspacedata +0 -30
- package/android/jni/HDiffPatch/builds/xcode/HDiffPatch.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/android/jni/HDiffPatch/builds/xcode/bestParams.xcodeproj/project.pbxproj +0 -408
- package/android/jni/HDiffPatch/builds/xcode/bestParams.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.pbxproj +0 -573
- package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/android/jni/HDiffPatch/builds/xcode/hpatchz.xcodeproj/project.pbxproj +0 -396
- package/android/jni/HDiffPatch/builds/xcode/hpatchz.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/android/jni/HDiffPatch/builds/xcode/lz4.xcodeproj/project.pbxproj +0 -268
- package/android/jni/HDiffPatch/builds/xcode/lz4.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/android/jni/HDiffPatch/builds/xcode/lzma.xcodeproj/project.pbxproj +0 -361
- package/android/jni/HDiffPatch/builds/xcode/lzma.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.pbxproj +0 -301
- package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/android/jni/HDiffPatch/builds/xcode/unitTest.xcodeproj/project.pbxproj +0 -411
- package/android/jni/HDiffPatch/builds/xcode/unitTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/android/jni/HDiffPatch/builds/xcode/zstd.xcodeproj/project.pbxproj +0 -504
- package/android/jni/HDiffPatch/builds/xcode/zstd.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/android/jni/HDiffPatch/checksum_plugin_demo.h +0 -344
- package/android/jni/HDiffPatch/compress_parallel.cpp +0 -166
- package/android/jni/HDiffPatch/compress_parallel.h +0 -59
- package/android/jni/HDiffPatch/compress_plugin_demo.h +0 -1152
- package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff.cpp +0 -797
- package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff.h +0 -65
- package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff_tools.cpp +0 -200
- package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff_tools.h +0 -178
- package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_manifest.cpp +0 -357
- package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_manifest.h +0 -87
- package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/file_for_dirDiff.h +0 -151
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch.c +0 -770
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch.h +0 -236
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_private.h +0 -47
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_tools.c +0 -112
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_tools.h +0 -53
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_dir_output.c +0 -331
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_dir_output.h +0 -144
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_stream.c +0 -176
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_stream.h +0 -84
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/ref_stream.c +0 -146
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/ref_stream.h +0 -61
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/res_handle_limit.c +0 -152
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/res_handle_limit.h +0 -76
- package/android/jni/HDiffPatch/hdiffz.cpp +0 -1570
- package/android/jni/HDiffPatch/hpatch_dir_listener.h +0 -290
- package/android/jni/HDiffPatch/hpatchz.c +0 -1221
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff.cpp +0 -1025
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff.h +0 -116
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff_types.h +0 -72
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/bytes_rle.cpp +0 -213
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/bytes_rle.h +0 -63
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/compress_detect.cpp +0 -170
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/compress_detect.h +0 -86
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/config.h +0 -89
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.c +0 -13
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.c.inc.h +0 -398
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.h +0 -194
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort64.c +0 -13
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort64.h +0 -204
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort_private.h +0 -207
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/sssort.c.inc.h +0 -815
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/trsort.c.inc.h +0 -586
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/utils.c.inc.h +0 -381
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/adler_roll.c +0 -352
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/adler_roll.h +0 -137
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/bloom_filter.h +0 -137
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/covers.h +0 -70
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/digest_matcher.cpp +0 -628
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/digest_matcher.h +0 -87
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/stream_serialize.cpp +0 -363
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/stream_serialize.h +0 -139
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/mem_buf.h +0 -68
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/pack_uint.h +0 -115
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/suffix_string.cpp +0 -342
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/suffix_string.h +0 -94
- package/android/jni/HDiffPatch/libHDiffPatch/HPatch/checksum_plugin.h +0 -52
- package/android/jni/HDiffPatch/libParallel/parallel_channel.cpp +0 -174
- package/android/jni/HDiffPatch/libParallel/parallel_channel.h +0 -73
- package/android/jni/HDiffPatch/libParallel/parallel_import.cpp +0 -367
- package/android/jni/HDiffPatch/libParallel/parallel_import.h +0 -92
- package/android/jni/lzma/Asm/arm/7zCrcOpt.asm +0 -100
- package/android/jni/lzma/Asm/x86/7zAsm.asm +0 -147
- package/android/jni/lzma/Asm/x86/7zCrcOpt.asm +0 -147
- package/android/jni/lzma/Asm/x86/AesOpt.asm +0 -237
- package/android/jni/lzma/Asm/x86/LzmaDecOpt.asm +0 -1258
- package/android/jni/lzma/Asm/x86/XzCrc64Opt.asm +0 -205
- package/android/jni/lzma/C/7z.h +0 -202
- package/android/jni/lzma/C/7zAlloc.c +0 -80
- package/android/jni/lzma/C/7zAlloc.h +0 -19
- package/android/jni/lzma/C/7zArcIn.c +0 -1771
- package/android/jni/lzma/C/7zBuf.c +0 -36
- package/android/jni/lzma/C/7zBuf.h +0 -35
- package/android/jni/lzma/C/7zBuf2.c +0 -52
- package/android/jni/lzma/C/7zCrc.c +0 -128
- package/android/jni/lzma/C/7zCrc.h +0 -25
- package/android/jni/lzma/C/7zCrcOpt.c +0 -115
- package/android/jni/lzma/C/7zDec.c +0 -591
- package/android/jni/lzma/C/7zFile.c +0 -286
- package/android/jni/lzma/C/7zFile.h +0 -83
- package/android/jni/lzma/C/7zStream.c +0 -176
- package/android/jni/lzma/C/7zVersion.h +0 -27
- package/android/jni/lzma/C/7zVersion.rc +0 -55
- package/android/jni/lzma/C/Aes.c +0 -306
- package/android/jni/lzma/C/Aes.h +0 -38
- package/android/jni/lzma/C/AesOpt.c +0 -184
- package/android/jni/lzma/C/Alloc.c +0 -455
- package/android/jni/lzma/C/Alloc.h +0 -51
- package/android/jni/lzma/C/Bcj2.c +0 -257
- package/android/jni/lzma/C/Bcj2.h +0 -146
- package/android/jni/lzma/C/Bcj2Enc.c +0 -311
- package/android/jni/lzma/C/Bra.c +0 -230
- package/android/jni/lzma/C/Bra.h +0 -64
- package/android/jni/lzma/C/Bra86.c +0 -82
- package/android/jni/lzma/C/BraIA64.c +0 -53
- package/android/jni/lzma/C/CpuArch.c +0 -218
- package/android/jni/lzma/C/CpuArch.h +0 -336
- package/android/jni/lzma/C/Delta.c +0 -64
- package/android/jni/lzma/C/Delta.h +0 -19
- package/android/jni/lzma/C/DllSecur.c +0 -108
- package/android/jni/lzma/C/DllSecur.h +0 -20
- package/android/jni/lzma/C/LzFind.c +0 -1127
- package/android/jni/lzma/C/LzFind.h +0 -121
- package/android/jni/lzma/C/LzFindMt.c +0 -853
- package/android/jni/lzma/C/LzFindMt.h +0 -101
- package/android/jni/lzma/C/LzHash.h +0 -57
- package/android/jni/lzma/C/Lzma2DecMt.c +0 -1082
- package/android/jni/lzma/C/Lzma2DecMt.h +0 -79
- package/android/jni/lzma/C/Lzma2Enc.c +0 -803
- package/android/jni/lzma/C/Lzma2Enc.h +0 -55
- package/android/jni/lzma/C/Lzma86.h +0 -111
- package/android/jni/lzma/C/Lzma86Dec.c +0 -54
- package/android/jni/lzma/C/Lzma86Enc.c +0 -106
- package/android/jni/lzma/C/LzmaEnc.c +0 -2976
- package/android/jni/lzma/C/LzmaEnc.h +0 -76
- package/android/jni/lzma/C/LzmaLib.c +0 -40
- package/android/jni/lzma/C/LzmaLib.h +0 -131
- package/android/jni/lzma/C/MtCoder.c +0 -601
- package/android/jni/lzma/C/MtCoder.h +0 -141
- package/android/jni/lzma/C/MtDec.c +0 -1138
- package/android/jni/lzma/C/MtDec.h +0 -201
- package/android/jni/lzma/C/Ppmd.h +0 -85
- package/android/jni/lzma/C/Ppmd7.c +0 -712
- package/android/jni/lzma/C/Ppmd7.h +0 -142
- package/android/jni/lzma/C/Ppmd7Dec.c +0 -191
- package/android/jni/lzma/C/Ppmd7Enc.c +0 -187
- package/android/jni/lzma/C/RotateDefs.h +0 -30
- package/android/jni/lzma/C/Sha256.c +0 -248
- package/android/jni/lzma/C/Sha256.h +0 -26
- package/android/jni/lzma/C/Sort.c +0 -141
- package/android/jni/lzma/C/Sort.h +0 -18
- package/android/jni/lzma/C/Threads.c +0 -95
- package/android/jni/lzma/C/Threads.h +0 -70
- package/android/jni/lzma/C/ThreadsP.c +0 -396
- package/android/jni/lzma/C/ThreadsP.h +0 -31
- package/android/jni/lzma/C/Util/7z/7z.dsp +0 -241
- package/android/jni/lzma/C/Util/7z/7z.dsw +0 -29
- package/android/jni/lzma/C/Util/7z/7zMain.c +0 -686
- package/android/jni/lzma/C/Util/7z/Precomp.c +0 -4
- package/android/jni/lzma/C/Util/7z/Precomp.h +0 -10
- package/android/jni/lzma/C/Util/7z/makefile +0 -40
- package/android/jni/lzma/C/Util/7z/makefile.gcc +0 -75
- package/android/jni/lzma/C/Util/Lzma/LzmaUtil.c +0 -258
- package/android/jni/lzma/C/Util/Lzma/LzmaUtil.dsp +0 -168
- package/android/jni/lzma/C/Util/Lzma/LzmaUtil.dsw +0 -29
- package/android/jni/lzma/C/Util/Lzma/makefile +0 -28
- package/android/jni/lzma/C/Util/Lzma/makefile.gcc +0 -44
- package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.def +0 -4
- package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.dsp +0 -178
- package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.dsw +0 -29
- package/android/jni/lzma/C/Util/LzmaLib/LzmaLibExports.c +0 -14
- package/android/jni/lzma/C/Util/LzmaLib/makefile +0 -34
- package/android/jni/lzma/C/Util/LzmaLib/resource.rc +0 -3
- package/android/jni/lzma/C/Util/SfxSetup/Precomp.c +0 -4
- package/android/jni/lzma/C/Util/SfxSetup/Precomp.h +0 -10
- package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.c +0 -640
- package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.dsp +0 -231
- package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.dsw +0 -29
- package/android/jni/lzma/C/Util/SfxSetup/makefile +0 -37
- package/android/jni/lzma/C/Util/SfxSetup/makefile_con +0 -38
- package/android/jni/lzma/C/Util/SfxSetup/resource.rc +0 -5
- package/android/jni/lzma/C/Util/SfxSetup/setup.ico +0 -0
- package/android/jni/lzma/C/Xz.c +0 -90
- package/android/jni/lzma/C/Xz.h +0 -460
- package/android/jni/lzma/C/XzCrc64.c +0 -86
- package/android/jni/lzma/C/XzCrc64.h +0 -26
- package/android/jni/lzma/C/XzCrc64Opt.c +0 -69
- package/android/jni/lzma/C/XzDec.c +0 -2766
- package/android/jni/lzma/C/XzEnc.c +0 -1329
- package/android/jni/lzma/C/XzEnc.h +0 -60
- package/android/jni/lzma/C/XzIn.c +0 -319
- package/android/jni/lzma/CPP/7zip/7zip.mak +0 -240
- package/android/jni/lzma/CPP/7zip/Aes.mak +0 -7
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zCompressionMode.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zCompressionMode.h +0 -76
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zDecode.cpp +0 -569
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zDecode.h +0 -70
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zEncode.cpp +0 -678
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zEncode.h +0 -92
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zExtract.cpp +0 -423
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zFolderInStream.cpp +0 -139
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zFolderInStream.h +0 -61
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandler.cpp +0 -763
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandler.h +0 -181
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandlerOut.cpp +0 -942
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zHeader.cpp +0 -19
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zHeader.h +0 -148
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zIn.cpp +0 -1666
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zIn.h +0 -445
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zItem.h +0 -202
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zOut.cpp +0 -901
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zOut.h +0 -335
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zProperties.cpp +0 -174
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zProperties.h +0 -22
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zRegister.cpp +0 -21
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zSpecStream.cpp +0 -22
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zSpecStream.h +0 -35
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zUpdate.cpp +0 -2500
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zUpdate.h +0 -139
- package/android/jni/lzma/CPP/7zip/Archive/7z/StdAfx.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Archive/7z/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/Archive/Archive.def +0 -12
- package/android/jni/lzma/CPP/7zip/Archive/Archive2.def +0 -19
- package/android/jni/lzma/CPP/7zip/Archive/ArchiveExports.cpp +0 -151
- package/android/jni/lzma/CPP/7zip/Archive/Common/CoderMixer2.cpp +0 -1125
- package/android/jni/lzma/CPP/7zip/Archive/Common/CoderMixer2.h +0 -447
- package/android/jni/lzma/CPP/7zip/Archive/Common/DummyOutStream.cpp +0 -17
- package/android/jni/lzma/CPP/7zip/Archive/Common/DummyOutStream.h +0 -25
- package/android/jni/lzma/CPP/7zip/Archive/Common/HandlerOut.cpp +0 -232
- package/android/jni/lzma/CPP/7zip/Archive/Common/HandlerOut.h +0 -110
- package/android/jni/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.cpp +0 -46
- package/android/jni/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.h +0 -67
- package/android/jni/lzma/CPP/7zip/Archive/Common/ItemNameUtils.cpp +0 -88
- package/android/jni/lzma/CPP/7zip/Archive/Common/ItemNameUtils.h +0 -28
- package/android/jni/lzma/CPP/7zip/Archive/Common/MultiStream.cpp +0 -191
- package/android/jni/lzma/CPP/7zip/Archive/Common/MultiStream.h +0 -89
- package/android/jni/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp +0 -18
- package/android/jni/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.h +0 -37
- package/android/jni/lzma/CPP/7zip/Archive/Common/ParseProperties.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Archive/Common/ParseProperties.h +0 -6
- package/android/jni/lzma/CPP/7zip/Archive/Common/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/Archive/DllExports2.cpp +0 -122
- package/android/jni/lzma/CPP/7zip/Archive/IArchive.h +0 -608
- package/android/jni/lzma/CPP/7zip/Archive/Icons/7z.ico +0 -0
- package/android/jni/lzma/CPP/7zip/Archive/LzmaHandler.cpp +0 -629
- package/android/jni/lzma/CPP/7zip/Archive/SplitHandler.cpp +0 -359
- package/android/jni/lzma/CPP/7zip/Archive/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/Archive/XzHandler.cpp +0 -1308
- package/android/jni/lzma/CPP/7zip/Archive/XzHandler.h +0 -11
- package/android/jni/lzma/CPP/7zip/Asm.mak +0 -9
- package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsp +0 -1910
- package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsw +0 -29
- package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/makefile +0 -154
- package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/resource.rc +0 -7
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/makefile +0 -96
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/resource.rc +0 -5
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/makefile +0 -116
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/resource.rc +0 -5
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaAlone.cpp +0 -799
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaCon.dsp +0 -477
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaCon.dsw +0 -29
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/StdAfx.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/makefile +0 -59
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/makefile.gcc +0 -195
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/resource.rc +0 -3
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaSpec/LzmaSpec.cpp +0 -715
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/7z.ico +0 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SFXCon.dsp +0 -912
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SFXCon.dsw +0 -29
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SfxCon.cpp +0 -482
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/StdAfx.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/makefile +0 -134
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/resource.rc +0 -5
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.cpp +0 -246
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.h +0 -86
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.cpp +0 -137
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.h +0 -11
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SFXSetup.dsp +0 -803
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SFXSetup.dsw +0 -29
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SfxSetup.cpp +0 -364
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/StdAfx.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/StdAfx.h +0 -13
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/makefile +0 -117
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/resource.h +0 -6
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/resource.rc +0 -16
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/setup.ico +0 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/7z.ico +0 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SFXWin.dsp +0 -988
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SFXWin.dsw +0 -29
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SfxWin.cpp +0 -241
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/StdAfx.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/StdAfx.h +0 -14
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/makefile +0 -153
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/resource.h +0 -1
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/resource.rc +0 -50
- package/android/jni/lzma/CPP/7zip/Common/CWrappers.cpp +0 -250
- package/android/jni/lzma/CPP/7zip/Common/CWrappers.h +0 -120
- package/android/jni/lzma/CPP/7zip/Common/CreateCoder.cpp +0 -536
- package/android/jni/lzma/CPP/7zip/Common/CreateCoder.h +0 -192
- package/android/jni/lzma/CPP/7zip/Common/FilePathAutoRename.cpp +0 -46
- package/android/jni/lzma/CPP/7zip/Common/FilePathAutoRename.h +0 -10
- package/android/jni/lzma/CPP/7zip/Common/FileStreams.cpp +0 -475
- package/android/jni/lzma/CPP/7zip/Common/FileStreams.h +0 -166
- package/android/jni/lzma/CPP/7zip/Common/FilterCoder.cpp +0 -435
- package/android/jni/lzma/CPP/7zip/Common/FilterCoder.h +0 -205
- package/android/jni/lzma/CPP/7zip/Common/InBuffer.cpp +0 -163
- package/android/jni/lzma/CPP/7zip/Common/InBuffer.h +0 -92
- package/android/jni/lzma/CPP/7zip/Common/InOutTempBuffer.cpp +0 -127
- package/android/jni/lzma/CPP/7zip/Common/InOutTempBuffer.h +0 -48
- package/android/jni/lzma/CPP/7zip/Common/LimitedStreams.cpp +0 -367
- package/android/jni/lzma/CPP/7zip/Common/LimitedStreams.h +0 -252
- package/android/jni/lzma/CPP/7zip/Common/LockedStream.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Common/LockedStream.h +0 -6
- package/android/jni/lzma/CPP/7zip/Common/MethodId.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/Common/MethodId.h +0 -10
- package/android/jni/lzma/CPP/7zip/Common/MethodProps.cpp +0 -509
- package/android/jni/lzma/CPP/7zip/Common/MethodProps.h +0 -264
- package/android/jni/lzma/CPP/7zip/Common/OffsetStream.cpp +0 -39
- package/android/jni/lzma/CPP/7zip/Common/OffsetStream.h +0 -26
- package/android/jni/lzma/CPP/7zip/Common/OutBuffer.cpp +0 -111
- package/android/jni/lzma/CPP/7zip/Common/OutBuffer.h +0 -66
- package/android/jni/lzma/CPP/7zip/Common/ProgressUtils.cpp +0 -51
- package/android/jni/lzma/CPP/7zip/Common/ProgressUtils.h +0 -35
- package/android/jni/lzma/CPP/7zip/Common/PropId.cpp +0 -108
- package/android/jni/lzma/CPP/7zip/Common/RegisterArc.h +0 -78
- package/android/jni/lzma/CPP/7zip/Common/RegisterCodec.h +0 -106
- package/android/jni/lzma/CPP/7zip/Common/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/Common/StreamBinder.cpp +0 -156
- package/android/jni/lzma/CPP/7zip/Common/StreamBinder.h +0 -60
- package/android/jni/lzma/CPP/7zip/Common/StreamObjects.cpp +0 -285
- package/android/jni/lzma/CPP/7zip/Common/StreamObjects.h +0 -157
- package/android/jni/lzma/CPP/7zip/Common/StreamUtils.cpp +0 -56
- package/android/jni/lzma/CPP/7zip/Common/StreamUtils.h +0 -13
- package/android/jni/lzma/CPP/7zip/Common/UniqBlocks.cpp +0 -57
- package/android/jni/lzma/CPP/7zip/Common/UniqBlocks.h +0 -26
- package/android/jni/lzma/CPP/7zip/Common/VirtThread.cpp +0 -48
- package/android/jni/lzma/CPP/7zip/Common/VirtThread.h +0 -24
- package/android/jni/lzma/CPP/7zip/Compress/Bcj2Coder.cpp +0 -666
- package/android/jni/lzma/CPP/7zip/Compress/Bcj2Coder.h +0 -120
- package/android/jni/lzma/CPP/7zip/Compress/Bcj2Register.cpp +0 -24
- package/android/jni/lzma/CPP/7zip/Compress/BcjCoder.cpp +0 -24
- package/android/jni/lzma/CPP/7zip/Compress/BcjCoder.h +0 -31
- package/android/jni/lzma/CPP/7zip/Compress/BcjRegister.cpp +0 -17
- package/android/jni/lzma/CPP/7zip/Compress/BranchMisc.cpp +0 -23
- package/android/jni/lzma/CPP/7zip/Compress/BranchMisc.h +0 -35
- package/android/jni/lzma/CPP/7zip/Compress/BranchRegister.cpp +0 -41
- package/android/jni/lzma/CPP/7zip/Compress/ByteSwap.cpp +0 -92
- package/android/jni/lzma/CPP/7zip/Compress/CodecExports.cpp +0 -344
- package/android/jni/lzma/CPP/7zip/Compress/CopyCoder.cpp +0 -120
- package/android/jni/lzma/CPP/7zip/Compress/CopyCoder.h +0 -49
- package/android/jni/lzma/CPP/7zip/Compress/CopyRegister.cpp +0 -15
- package/android/jni/lzma/CPP/7zip/Compress/DeltaFilter.cpp +0 -128
- package/android/jni/lzma/CPP/7zip/Compress/Lzma2Decoder.cpp +0 -265
- package/android/jni/lzma/CPP/7zip/Compress/Lzma2Decoder.h +0 -96
- package/android/jni/lzma/CPP/7zip/Compress/Lzma2Encoder.cpp +0 -122
- package/android/jni/lzma/CPP/7zip/Compress/Lzma2Encoder.h +0 -42
- package/android/jni/lzma/CPP/7zip/Compress/Lzma2Register.cpp +0 -22
- package/android/jni/lzma/CPP/7zip/Compress/LzmaDecoder.cpp +0 -343
- package/android/jni/lzma/CPP/7zip/Compress/LzmaDecoder.h +0 -113
- package/android/jni/lzma/CPP/7zip/Compress/LzmaEncoder.cpp +0 -182
- package/android/jni/lzma/CPP/7zip/Compress/LzmaEncoder.h +0 -46
- package/android/jni/lzma/CPP/7zip/Compress/LzmaRegister.cpp +0 -22
- package/android/jni/lzma/CPP/7zip/Compress/PpmdDecoder.cpp +0 -170
- package/android/jni/lzma/CPP/7zip/Compress/PpmdDecoder.h +0 -86
- package/android/jni/lzma/CPP/7zip/Compress/PpmdEncoder.cpp +0 -152
- package/android/jni/lzma/CPP/7zip/Compress/PpmdEncoder.h +0 -58
- package/android/jni/lzma/CPP/7zip/Compress/PpmdRegister.cpp +0 -22
- package/android/jni/lzma/CPP/7zip/Compress/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/Compress/XzDecoder.cpp +0 -150
- package/android/jni/lzma/CPP/7zip/Compress/XzDecoder.h +0 -92
- package/android/jni/lzma/CPP/7zip/Compress/XzEncoder.cpp +0 -245
- package/android/jni/lzma/CPP/7zip/Compress/XzEncoder.h +0 -46
- package/android/jni/lzma/CPP/7zip/Crc.mak +0 -8
- package/android/jni/lzma/CPP/7zip/Crc64.mak +0 -8
- package/android/jni/lzma/CPP/7zip/Crypto/7zAes.cpp +0 -280
- package/android/jni/lzma/CPP/7zip/Crypto/7zAes.h +0 -118
- package/android/jni/lzma/CPP/7zip/Crypto/7zAesRegister.cpp +0 -17
- package/android/jni/lzma/CPP/7zip/Crypto/MyAes.cpp +0 -112
- package/android/jni/lzma/CPP/7zip/Crypto/MyAes.h +0 -57
- package/android/jni/lzma/CPP/7zip/Crypto/MyAesReg.cpp +0 -16
- package/android/jni/lzma/CPP/7zip/Crypto/RandGen.cpp +0 -233
- package/android/jni/lzma/CPP/7zip/Crypto/RandGen.h +0 -40
- package/android/jni/lzma/CPP/7zip/Crypto/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/GuiCommon.rc +0 -84
- package/android/jni/lzma/CPP/7zip/Guid.txt +0 -220
- package/android/jni/lzma/CPP/7zip/ICoder.h +0 -399
- package/android/jni/lzma/CPP/7zip/IDecl.h +0 -28
- package/android/jni/lzma/CPP/7zip/IPassword.h +0 -23
- package/android/jni/lzma/CPP/7zip/IProgress.h +0 -19
- package/android/jni/lzma/CPP/7zip/IStream.h +0 -127
- package/android/jni/lzma/CPP/7zip/LzmaDec.mak +0 -5
- package/android/jni/lzma/CPP/7zip/MyVersion.h +0 -2
- package/android/jni/lzma/CPP/7zip/MyVersionInfo.rc +0 -2
- package/android/jni/lzma/CPP/7zip/PropID.h +0 -127
- package/android/jni/lzma/CPP/7zip/SubBuild.mak +0 -3
- package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.cpp +0 -993
- package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.dsp +0 -235
- package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.dsw +0 -29
- package/android/jni/lzma/CPP/7zip/UI/Client7z/StdAfx.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/UI/Client7z/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/UI/Client7z/makefile +0 -28
- package/android/jni/lzma/CPP/7zip/UI/Client7z/resource.rc +0 -3
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.cpp +0 -1295
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.h +0 -136
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.cpp +0 -1715
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.h +0 -403
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveName.cpp +0 -155
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveName.h +0 -10
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.cpp +0 -161
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.h +0 -112
- package/android/jni/lzma/CPP/7zip/UI/Common/Bench.cpp +0 -3618
- package/android/jni/lzma/CPP/7zip/UI/Common/Bench.h +0 -77
- package/android/jni/lzma/CPP/7zip/UI/Common/DefaultName.cpp +0 -37
- package/android/jni/lzma/CPP/7zip/UI/Common/DefaultName.h +0 -11
- package/android/jni/lzma/CPP/7zip/UI/Common/DirItem.h +0 -190
- package/android/jni/lzma/CPP/7zip/UI/Common/EnumDirItems.cpp +0 -1096
- package/android/jni/lzma/CPP/7zip/UI/Common/EnumDirItems.h +0 -42
- package/android/jni/lzma/CPP/7zip/UI/Common/ExitCode.h +0 -27
- package/android/jni/lzma/CPP/7zip/UI/Common/Extract.cpp +0 -482
- package/android/jni/lzma/CPP/7zip/UI/Common/Extract.h +0 -94
- package/android/jni/lzma/CPP/7zip/UI/Common/ExtractMode.h +0 -34
- package/android/jni/lzma/CPP/7zip/UI/Common/ExtractingFilePath.cpp +0 -280
- package/android/jni/lzma/CPP/7zip/UI/Common/ExtractingFilePath.h +0 -31
- package/android/jni/lzma/CPP/7zip/UI/Common/HashCalc.cpp +0 -347
- package/android/jni/lzma/CPP/7zip/UI/Common/HashCalc.h +0 -110
- package/android/jni/lzma/CPP/7zip/UI/Common/IFileExtractCallback.h +0 -114
- package/android/jni/lzma/CPP/7zip/UI/Common/LoadCodecs.cpp +0 -1074
- package/android/jni/lzma/CPP/7zip/UI/Common/LoadCodecs.h +0 -424
- package/android/jni/lzma/CPP/7zip/UI/Common/OpenArchive.cpp +0 -3553
- package/android/jni/lzma/CPP/7zip/UI/Common/OpenArchive.h +0 -436
- package/android/jni/lzma/CPP/7zip/UI/Common/PropIDUtils.cpp +0 -668
- package/android/jni/lzma/CPP/7zip/UI/Common/PropIDUtils.h +0 -18
- package/android/jni/lzma/CPP/7zip/UI/Common/Property.h +0 -14
- package/android/jni/lzma/CPP/7zip/UI/Common/SetProperties.cpp +0 -80
- package/android/jni/lzma/CPP/7zip/UI/Common/SetProperties.h +0 -10
- package/android/jni/lzma/CPP/7zip/UI/Common/SortUtils.cpp +0 -25
- package/android/jni/lzma/CPP/7zip/UI/Common/SortUtils.h +0 -10
- package/android/jni/lzma/CPP/7zip/UI/Common/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/UI/Common/TempFiles.cpp +0 -19
- package/android/jni/lzma/CPP/7zip/UI/Common/TempFiles.h +0 -16
- package/android/jni/lzma/CPP/7zip/UI/Common/Update.cpp +0 -1704
- package/android/jni/lzma/CPP/7zip/UI/Common/Update.h +0 -200
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdateAction.cpp +0 -64
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdateAction.h +0 -66
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdateCallback.cpp +0 -771
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdateCallback.h +0 -162
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdatePair.cpp +0 -233
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdatePair.h +0 -27
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdateProduce.cpp +0 -70
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdateProduce.h +0 -55
- package/android/jni/lzma/CPP/7zip/UI/Common/WorkDir.cpp +0 -94
- package/android/jni/lzma/CPP/7zip/UI/Common/WorkDir.h +0 -26
- package/android/jni/lzma/CPP/7zip/UI/Common/ZipRegistry.h +0 -130
- package/android/jni/lzma/CPP/7zip/UI/Console/BenchCon.cpp +0 -41
- package/android/jni/lzma/CPP/7zip/UI/Console/BenchCon.h +0 -14
- package/android/jni/lzma/CPP/7zip/UI/Console/Console.mak +0 -43
- package/android/jni/lzma/CPP/7zip/UI/Console/Console.manifest +0 -13
- package/android/jni/lzma/CPP/7zip/UI/Console/ConsoleClose.cpp +0 -69
- package/android/jni/lzma/CPP/7zip/UI/Console/ConsoleClose.h +0 -33
- package/android/jni/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp +0 -825
- package/android/jni/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.h +0 -164
- package/android/jni/lzma/CPP/7zip/UI/Console/HashCon.cpp +0 -367
- package/android/jni/lzma/CPP/7zip/UI/Console/HashCon.h +0 -48
- package/android/jni/lzma/CPP/7zip/UI/Console/List.cpp +0 -1359
- package/android/jni/lzma/CPP/7zip/UI/Console/List.h +0 -27
- package/android/jni/lzma/CPP/7zip/UI/Console/Main.cpp +0 -1154
- package/android/jni/lzma/CPP/7zip/UI/Console/MainAr.cpp +0 -175
- package/android/jni/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.cpp +0 -115
- package/android/jni/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.h +0 -66
- package/android/jni/lzma/CPP/7zip/UI/Console/PercentPrinter.cpp +0 -183
- package/android/jni/lzma/CPP/7zip/UI/Console/PercentPrinter.h +0 -62
- package/android/jni/lzma/CPP/7zip/UI/Console/StdAfx.cpp +0 -3
- package/android/jni/lzma/CPP/7zip/UI/Console/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.cpp +0 -702
- package/android/jni/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.h +0 -124
- package/android/jni/lzma/CPP/7zip/UI/Console/UserInputUtils.cpp +0 -110
- package/android/jni/lzma/CPP/7zip/UI/Console/UserInputUtils.h +0 -27
- package/android/jni/lzma/CPP/7zip/UI/Console/makefile +0 -64
- package/android/jni/lzma/CPP/7zip/UI/Console/resource.rc +0 -7
- package/android/jni/lzma/CPP/7zip/UI/Explorer/MyMessages.cpp +0 -37
- package/android/jni/lzma/CPP/7zip/UI/Explorer/MyMessages.h +0 -16
- package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialog.cpp +0 -1025
- package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialog.h +0 -21
- package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialogRes.h +0 -9
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialog.cpp +0 -64
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialog.h +0 -28
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialogRes.h +0 -4
- package/android/jni/lzma/CPP/7zip/UI/FileManager/DialogSize.h +0 -16
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ExtractCallback.cpp +0 -1037
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ExtractCallback.h +0 -328
- package/android/jni/lzma/CPP/7zip/UI/FileManager/FormatUtils.cpp +0 -28
- package/android/jni/lzma/CPP/7zip/UI/FileManager/FormatUtils.h +0 -14
- package/android/jni/lzma/CPP/7zip/UI/FileManager/LangUtils.h +0 -40
- package/android/jni/lzma/CPP/7zip/UI/FileManager/MyWindowsNew.h +0 -76
- package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.cpp +0 -122
- package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.h +0 -69
- package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.rc +0 -91
- package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialogRes.h +0 -17
- package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.cpp +0 -58
- package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.h +0 -28
- package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.rc +0 -14
- package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialogRes.h +0 -5
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.cpp +0 -196
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.h +0 -170
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.rc +0 -12
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.cpp +0 -1337
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.h +0 -351
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.rc +0 -40
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2Res.h +0 -48
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2a.rc +0 -80
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialogRes.h +0 -3
- package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyName.cpp +0 -23
- package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyName.h +0 -10
- package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyNameRes.h +0 -95
- package/android/jni/lzma/CPP/7zip/UI/FileManager/SysIconUtils.cpp +0 -255
- package/android/jni/lzma/CPP/7zip/UI/FileManager/SysIconUtils.h +0 -62
- package/android/jni/lzma/CPP/7zip/UI/FileManager/resource.h +0 -177
- package/android/jni/lzma/CPP/7zip/UI/FileManager/resourceGui.h +0 -15
- package/android/jni/lzma/CPP/7zip/UI/GUI/Extract.rc +0 -59
- package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.cpp +0 -418
- package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.h +0 -113
- package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.rc +0 -98
- package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialogRes.h +0 -24
- package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractGUI.cpp +0 -280
- package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractGUI.h +0 -38
- package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractRes.h +0 -51
- package/android/jni/lzma/CPP/7zip/UI/GUI/HashGUI.h +0 -27
- package/android/jni/lzma/CPP/7zip/UI/GUI/resource2.h +0 -2
- package/android/jni/lzma/CPP/Build.mak +0 -156
- package/android/jni/lzma/CPP/Common/AutoPtr.h +0 -35
- package/android/jni/lzma/CPP/Common/CRC.cpp +0 -7
- package/android/jni/lzma/CPP/Common/C_FileIO.cpp +0 -92
- package/android/jni/lzma/CPP/Common/C_FileIO.h +0 -53
- package/android/jni/lzma/CPP/Common/ComTry.h +0 -21
- package/android/jni/lzma/CPP/Common/CommandLineParser.cpp +0 -197
- package/android/jni/lzma/CPP/Common/CommandLineParser.h +0 -63
- package/android/jni/lzma/CPP/Common/Common.h +0 -43
- package/android/jni/lzma/CPP/Common/CrcReg.cpp +0 -98
- package/android/jni/lzma/CPP/Common/Defs.h +0 -15
- package/android/jni/lzma/CPP/Common/DynamicBuffer.h +0 -64
- package/android/jni/lzma/CPP/Common/IntToString.cpp +0 -193
- package/android/jni/lzma/CPP/Common/IntToString.h +0 -28
- package/android/jni/lzma/CPP/Common/Lang.h +0 -23
- package/android/jni/lzma/CPP/Common/ListFileUtils.cpp +0 -132
- package/android/jni/lzma/CPP/Common/ListFileUtils.h +0 -18
- package/android/jni/lzma/CPP/Common/MyBuffer.h +0 -259
- package/android/jni/lzma/CPP/Common/MyBuffer2.h +0 -100
- package/android/jni/lzma/CPP/Common/MyCom.h +0 -277
- package/android/jni/lzma/CPP/Common/MyException.h +0 -14
- package/android/jni/lzma/CPP/Common/MyGuidDef.h +0 -54
- package/android/jni/lzma/CPP/Common/MyInitGuid.h +0 -45
- package/android/jni/lzma/CPP/Common/MyLinux.h +0 -42
- package/android/jni/lzma/CPP/Common/MyString.cpp +0 -1659
- package/android/jni/lzma/CPP/Common/MyString.h +0 -868
- package/android/jni/lzma/CPP/Common/MyTypes.h +0 -35
- package/android/jni/lzma/CPP/Common/MyUnknown.h +0 -17
- package/android/jni/lzma/CPP/Common/MyVector.cpp +0 -3
- package/android/jni/lzma/CPP/Common/MyVector.h +0 -634
- package/android/jni/lzma/CPP/Common/MyWindows.cpp +0 -145
- package/android/jni/lzma/CPP/Common/MyWindows.h +0 -231
- package/android/jni/lzma/CPP/Common/NewHandler.cpp +0 -163
- package/android/jni/lzma/CPP/Common/NewHandler.h +0 -88
- package/android/jni/lzma/CPP/Common/Sha256Reg.cpp +0 -40
- package/android/jni/lzma/CPP/Common/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/Common/StdInStream.cpp +0 -89
- package/android/jni/lzma/CPP/Common/StdInStream.h +0 -38
- package/android/jni/lzma/CPP/Common/StdOutStream.cpp +0 -163
- package/android/jni/lzma/CPP/Common/StdOutStream.h +0 -71
- package/android/jni/lzma/CPP/Common/StringConvert.cpp +0 -319
- package/android/jni/lzma/CPP/Common/StringConvert.h +0 -88
- package/android/jni/lzma/CPP/Common/StringToInt.cpp +0 -144
- package/android/jni/lzma/CPP/Common/StringToInt.h +0 -21
- package/android/jni/lzma/CPP/Common/TextConfig.cpp +0 -124
- package/android/jni/lzma/CPP/Common/TextConfig.h +0 -19
- package/android/jni/lzma/CPP/Common/UTFConvert.cpp +0 -288
- package/android/jni/lzma/CPP/Common/UTFConvert.h +0 -12
- package/android/jni/lzma/CPP/Common/Wildcard.cpp +0 -676
- package/android/jni/lzma/CPP/Common/Wildcard.h +0 -149
- package/android/jni/lzma/CPP/Common/XzCrc64Init.cpp +0 -7
- package/android/jni/lzma/CPP/Common/XzCrc64Reg.cpp +0 -42
- package/android/jni/lzma/CPP/Windows/COM.h +0 -70
- package/android/jni/lzma/CPP/Windows/CommonDialog.cpp +0 -185
- package/android/jni/lzma/CPP/Windows/CommonDialog.h +0 -23
- package/android/jni/lzma/CPP/Windows/Control/ComboBox.cpp +0 -66
- package/android/jni/lzma/CPP/Windows/Control/ComboBox.h +0 -65
- package/android/jni/lzma/CPP/Windows/Control/CommandBar.h +0 -52
- package/android/jni/lzma/CPP/Windows/Control/Dialog.cpp +0 -251
- package/android/jni/lzma/CPP/Windows/Control/Dialog.h +0 -170
- package/android/jni/lzma/CPP/Windows/Control/Edit.h +0 -19
- package/android/jni/lzma/CPP/Windows/Control/ImageList.cpp +0 -10
- package/android/jni/lzma/CPP/Windows/Control/ImageList.h +0 -87
- package/android/jni/lzma/CPP/Windows/Control/ListView.cpp +0 -155
- package/android/jni/lzma/CPP/Windows/Control/ListView.h +0 -146
- package/android/jni/lzma/CPP/Windows/Control/ProgressBar.h +0 -35
- package/android/jni/lzma/CPP/Windows/Control/PropertyPage.cpp +0 -143
- package/android/jni/lzma/CPP/Windows/Control/PropertyPage.h +0 -50
- package/android/jni/lzma/CPP/Windows/Control/ReBar.h +0 -34
- package/android/jni/lzma/CPP/Windows/Control/Static.h +0 -28
- package/android/jni/lzma/CPP/Windows/Control/StatusBar.h +0 -42
- package/android/jni/lzma/CPP/Windows/Control/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/Windows/Control/ToolBar.h +0 -43
- package/android/jni/lzma/CPP/Windows/Control/Trackbar.h +0 -27
- package/android/jni/lzma/CPP/Windows/Control/Window2.cpp +0 -200
- package/android/jni/lzma/CPP/Windows/Control/Window2.h +0 -51
- package/android/jni/lzma/CPP/Windows/DLL.cpp +0 -109
- package/android/jni/lzma/CPP/Windows/DLL.h +0 -58
- package/android/jni/lzma/CPP/Windows/Defs.h +0 -17
- package/android/jni/lzma/CPP/Windows/ErrorMsg.cpp +0 -66
- package/android/jni/lzma/CPP/Windows/ErrorMsg.h +0 -15
- package/android/jni/lzma/CPP/Windows/FileDir.cpp +0 -714
- package/android/jni/lzma/CPP/Windows/FileDir.h +0 -117
- package/android/jni/lzma/CPP/Windows/FileFind.cpp +0 -749
- package/android/jni/lzma/CPP/Windows/FileFind.h +0 -161
- package/android/jni/lzma/CPP/Windows/FileIO.cpp +0 -432
- package/android/jni/lzma/CPP/Windows/FileIO.h +0 -212
- package/android/jni/lzma/CPP/Windows/FileLink.cpp +0 -440
- package/android/jni/lzma/CPP/Windows/FileMapping.cpp +0 -12
- package/android/jni/lzma/CPP/Windows/FileMapping.h +0 -66
- package/android/jni/lzma/CPP/Windows/FileName.cpp +0 -839
- package/android/jni/lzma/CPP/Windows/FileName.h +0 -115
- package/android/jni/lzma/CPP/Windows/FileSystem.cpp +0 -131
- package/android/jni/lzma/CPP/Windows/FileSystem.h +0 -27
- package/android/jni/lzma/CPP/Windows/Handle.h +0 -37
- package/android/jni/lzma/CPP/Windows/MemoryLock.cpp +0 -112
- package/android/jni/lzma/CPP/Windows/MemoryLock.h +0 -40
- package/android/jni/lzma/CPP/Windows/NtCheck.h +0 -46
- package/android/jni/lzma/CPP/Windows/PropVariant.cpp +0 -347
- package/android/jni/lzma/CPP/Windows/PropVariant.h +0 -114
- package/android/jni/lzma/CPP/Windows/PropVariantConv.cpp +0 -138
- package/android/jni/lzma/CPP/Windows/PropVariantConv.h +0 -37
- package/android/jni/lzma/CPP/Windows/Registry.cpp +0 -390
- package/android/jni/lzma/CPP/Windows/Registry.h +0 -84
- package/android/jni/lzma/CPP/Windows/ResourceString.cpp +0 -103
- package/android/jni/lzma/CPP/Windows/ResourceString.h +0 -16
- package/android/jni/lzma/CPP/Windows/SecurityUtils.cpp +0 -181
- package/android/jni/lzma/CPP/Windows/SecurityUtils.h +0 -167
- package/android/jni/lzma/CPP/Windows/Shell.cpp +0 -358
- package/android/jni/lzma/CPP/Windows/Shell.h +0 -94
- package/android/jni/lzma/CPP/Windows/StdAfx.h +0 -8
- package/android/jni/lzma/CPP/Windows/Synchronization.cpp +0 -10
- package/android/jni/lzma/CPP/Windows/Synchronization.h +0 -164
- package/android/jni/lzma/CPP/Windows/System.cpp +0 -142
- package/android/jni/lzma/CPP/Windows/System.h +0 -40
- package/android/jni/lzma/CPP/Windows/Thread.h +0 -38
- package/android/jni/lzma/CPP/Windows/TimeUtils.cpp +0 -213
- package/android/jni/lzma/CPP/Windows/TimeUtils.h +0 -32
- package/android/jni/lzma/CPP/Windows/Window.cpp +0 -179
- package/android/jni/lzma/CPP/Windows/Window.h +0 -284
- package/android/jni/lzma/CS/7zip/Common/CRC.cs +0 -55
- package/android/jni/lzma/CS/7zip/Common/CommandLineParser.cs +0 -274
- package/android/jni/lzma/CS/7zip/Common/InBuffer.cs +0 -72
- package/android/jni/lzma/CS/7zip/Common/OutBuffer.cs +0 -47
- package/android/jni/lzma/CS/7zip/Compress/LZ/IMatchFinder.cs +0 -24
- package/android/jni/lzma/CS/7zip/Compress/LZ/LzBinTree.cs +0 -367
- package/android/jni/lzma/CS/7zip/Compress/LZ/LzInWindow.cs +0 -132
- package/android/jni/lzma/CS/7zip/Compress/LZ/LzOutWindow.cs +0 -110
- package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaBase.cs +0 -76
- package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaDecoder.cs +0 -398
- package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaEncoder.cs +0 -1480
- package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.cs +0 -364
- package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.csproj +0 -90
- package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.sln +0 -20
- package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaBench.cs +0 -340
- package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/AssemblyInfo.cs +0 -29
- package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/Resources.cs +0 -70
- package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/Settings.cs +0 -42
- package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoder.cs +0 -234
- package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBit.cs +0 -117
- package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBitTree.cs +0 -157
- package/android/jni/lzma/CS/7zip/ICoder.cs +0 -157
- package/android/jni/lzma/DOC/7zC.txt +0 -187
- package/android/jni/lzma/DOC/7zFormat.txt +0 -469
- package/android/jni/lzma/DOC/Methods.txt +0 -173
- package/android/jni/lzma/DOC/installer.txt +0 -166
- package/android/jni/lzma/DOC/lzma-history.txt +0 -446
- package/android/jni/lzma/DOC/lzma-specification.txt +0 -1176
- package/android/jni/lzma/DOC/lzma.txt +0 -328
- package/android/jni/lzma/Java/SevenZip/CRC.java +0 -52
- package/android/jni/lzma/Java/SevenZip/Compression/LZ/BinTree.java +0 -382
- package/android/jni/lzma/Java/SevenZip/Compression/LZ/InWindow.java +0 -131
- package/android/jni/lzma/Java/SevenZip/Compression/LZ/OutWindow.java +0 -85
- package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Base.java +0 -88
- package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Decoder.java +0 -329
- package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Encoder.java +0 -1416
- package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java +0 -55
- package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeEncoder.java +0 -99
- package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/Decoder.java +0 -88
- package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/Encoder.java +0 -151
- package/android/jni/lzma/Java/SevenZip/ICodeProgress.java +0 -6
- package/android/jni/lzma/Java/SevenZip/LzmaAlone.java +0 -253
- package/android/jni/lzma/Java/SevenZip/LzmaBench.java +0 -392
- package/android/jni/lzma/bin/7zS2.sfx +0 -0
- package/android/jni/lzma/bin/7zS2con.sfx +0 -0
- package/android/jni/lzma/bin/7zSD.sfx +0 -0
- package/android/jni/lzma/bin/7zdec.exe +0 -0
- package/android/jni/lzma/bin/7zr.exe +0 -0
- package/android/jni/lzma/bin/installer/config.txt +0 -5
- package/android/jni/lzma/bin/installer/cr.bat +0 -5
- package/android/jni/lzma/bin/lzma.exe +0 -0
- package/android/jni/lzma/bin/x64/7zr.exe +0 -0
- package/android/src/main/java/cn/reactnative/modules/update/ArchivePatchPlanResult.java +0 -6
- package/android/src/main/java/cn/reactnative/modules/update/PushyConfiguration.java +0 -104
- package/android/src/main/java/cn/reactnative/modules/update/UiThreadRunner.java +0 -37
- package/android/src/newarch/cn/reactnative/modules/update/UpdateModule.java +0 -121
- package/android/src/oldarch/cn/reactnative/modules/update/UpdateModule.java +0 -125
- package/cpp/patch_core/jni_natives.h +0 -27
- package/cpp/patch_core/jni_registration.cpp +0 -103
- package/cpp/patch_core/jni_util.h +0 -60
- package/cpp/patch_core/patch_core_android.cpp +0 -97
- package/cpp/patch_core/update_core_android.cpp +0 -485
- package/cpp/update_flow_core/update_flow_jni.cpp +0 -150
|
@@ -0,0 +1,969 @@
|
|
|
1
|
+
#import "RCTPushyInternal.h"
|
|
2
|
+
#include "../../cpp/patch_core/error_codes.h"
|
|
3
|
+
#include "../../cpp/patch_core/native_texts.h"
|
|
4
|
+
#include "../../cpp/update_flow_core/flow_json.h"
|
|
5
|
+
#include "../../cpp/update_flow_core/native_config.h"
|
|
6
|
+
#include "../../cpp/update_flow_core/round_engine.h"
|
|
7
|
+
|
|
8
|
+
#if TARGET_OS_TV
|
|
9
|
+
#import <Network/Network.h>
|
|
10
|
+
#include <sys/sysctl.h>
|
|
11
|
+
#include <sys/time.h>
|
|
12
|
+
#endif
|
|
13
|
+
|
|
14
|
+
// Raw JSON persisted by JS (syncNativeConfig) or the host (configure) for the
|
|
15
|
+
// native round; parsed on read (PushyLoadRunnableConfig). Absent = no round.
|
|
16
|
+
static NSString *const keyNativeConfig = @"REACTNATIVECN_PUSHY_NATIVE_CONFIG_KEY";
|
|
17
|
+
// Set when a native check round starts, cleared when it ends (§11.4). Residue
|
|
18
|
+
// on the next launch means the previous process died mid-round (a crash
|
|
19
|
+
// rescue was truncated): that launch resumes immediately instead of waiting.
|
|
20
|
+
static NSString *const keyNativeCheckIncomplete = @"REACTNATIVECN_PUSHY_NATIVE_CHECK_INCOMPLETE_KEY";
|
|
21
|
+
|
|
22
|
+
// The crash-hold version-info flag read by JS, stored encoded
|
|
23
|
+
// (cpp/patch_core/native_texts.h) so it does not appear as a plain binary
|
|
24
|
+
// string.
|
|
25
|
+
static NSString *PushyInfoCrashHold(void) {
|
|
26
|
+
static NSString *value = PushyFromStdString(pushy::texts::InfoCrashHold());
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// YES when `semaphore` was signalled within `seconds`.
|
|
31
|
+
static BOOL PushyWaitSeconds(dispatch_semaphore_t semaphore, NSTimeInterval seconds) {
|
|
32
|
+
return dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW,
|
|
33
|
+
(int64_t)(seconds * NSEC_PER_SEC))) == 0;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// cInfo.os label prefix; must match the JS side (core.ts) so the server
|
|
37
|
+
// buckets tvOS devices apart from iOS ones.
|
|
38
|
+
#if TARGET_OS_TV
|
|
39
|
+
static NSString * const PushyOsName = @"tvos";
|
|
40
|
+
#else
|
|
41
|
+
static NSString * const PushyOsName = @"ios";
|
|
42
|
+
#endif
|
|
43
|
+
|
|
44
|
+
// One round per process, whoever starts it first — the delayed cold-start
|
|
45
|
+
// path or the crash-rescue thread (§11.3). The semaphore lets the rescue
|
|
46
|
+
// wait out an in-flight round instead of racing it.
|
|
47
|
+
static std::atomic<bool> pushyRoundStarted{false};
|
|
48
|
+
static std::atomic<bool> pushyRoundCompleted{false};
|
|
49
|
+
// Flipped the moment a crash is being held. JS is dead from that point on,
|
|
50
|
+
// so there is no second decision maker: the round force-activates whatever
|
|
51
|
+
// it downloads (§11.3).
|
|
52
|
+
static std::atomic<bool> pushyCrashHoldActive{false};
|
|
53
|
+
static std::atomic<bool> pushyHoldAttempted{false};
|
|
54
|
+
// Set when this process's round is the tvOS purged-version restore.
|
|
55
|
+
static std::atomic<bool> pushyPurgeRestoreActive{false};
|
|
56
|
+
// True while +bundleURL waits for that restore. Only then may the round
|
|
57
|
+
// activate what it downloads on its own (JS has not started to decide), since
|
|
58
|
+
// the launch resolves the bundle again afterwards. Closed once the wait ends,
|
|
59
|
+
// timeout or not; guarded by the state lock that every activation commits
|
|
60
|
+
// under, so a commit lands either before the close (and launches) or after it
|
|
61
|
+
// (and is left to JS) — never selected behind the packaged bundle's back.
|
|
62
|
+
static bool pushyPurgeRestoreWindowOpen = false;
|
|
63
|
+
static dispatch_semaphore_t pushyRoundDone;
|
|
64
|
+
static NSString *pushyLaunchRolledBackForHold = nil;
|
|
65
|
+
// A version this process downloaded but left for JS to activate. If the
|
|
66
|
+
// process then crashes, JS will never activate it — the crash handler
|
|
67
|
+
// activates it directly (bounded local work, no network). The generation is
|
|
68
|
+
// the one the round committed under: a reset that lands afterwards bumps it,
|
|
69
|
+
// and the late activation must lose to that reset exactly like the round
|
|
70
|
+
// itself would. Guarded by @synchronized (RCTPushyOrchestrator class).
|
|
71
|
+
static NSString *pushyUnactivatedHash = nil;
|
|
72
|
+
static uint64_t pushyUnactivatedGeneration = 0;
|
|
73
|
+
static uint64_t pushyUnactivatedConfigGeneration = 0;
|
|
74
|
+
static NSUncaughtExceptionHandler *pushyPreviousExceptionHandler = NULL;
|
|
75
|
+
// ≈ process start: scheduleFromColdStart runs during the first bundleURL.
|
|
76
|
+
static NSTimeInterval pushyProcessAnchorUptime = 0;
|
|
77
|
+
// Config JSON for which JS reported a completed check in this process
|
|
78
|
+
// (markJsCheckCompleted). Process-scoped by design. Guarded by
|
|
79
|
+
// @synchronized (RCTPushyOrchestrator class).
|
|
80
|
+
static NSString *pushyJsCompletedConfig = nil;
|
|
81
|
+
// The group supplements (rather than consumes) the crash-rescue semaphore.
|
|
82
|
+
static dispatch_group_t pushyHostRoundGroup;
|
|
83
|
+
static std::atomic<bool> pushySyncReady{false};
|
|
84
|
+
static NSDictionary *pushyHostRoundResult = nil;
|
|
85
|
+
static NSString *pushyHostRoundConfig = nil;
|
|
86
|
+
static uint64_t pushyHostRoundGeneration = 0;
|
|
87
|
+
// Bumped by persistConfiguration when the config really changes (C1
|
|
88
|
+
// equivalence fails); resets keep pushyResetGeneration to themselves.
|
|
89
|
+
static std::atomic<uint64_t> pushyNativeConfigGeneration{0};
|
|
90
|
+
static uint64_t pushyHostRoundConfigGeneration = 0;
|
|
91
|
+
|
|
92
|
+
static const NSTimeInterval kPushyHoldTriggerUptime = 60;
|
|
93
|
+
static const NSTimeInterval kPushyHoldBudgetBackgroundThread = 10;
|
|
94
|
+
// A held main thread freezes UI teardown; stay well under the watchdog.
|
|
95
|
+
static const NSTimeInterval kPushyHoldBudgetMainThread = 3.5;
|
|
96
|
+
// The purged-version restore blocks +bundleURL, usually inside
|
|
97
|
+
// application:didFinishLaunching: — stay clear of the launch watchdog. The
|
|
98
|
+
// budget is measured from process start; with less than the minimum left the
|
|
99
|
+
// restore is not attempted.
|
|
100
|
+
#if TARGET_OS_TV && !DEBUG
|
|
101
|
+
static const NSTimeInterval kPushyPurgeRestoreBudget = 12;
|
|
102
|
+
static const NSTimeInterval kPushyPurgeRestoreMinimumBudget = 2;
|
|
103
|
+
|
|
104
|
+
// Seconds since the kernel started this process; 0 when unknown.
|
|
105
|
+
static NSTimeInterval PushyProcessElapsed(void) {
|
|
106
|
+
struct kinfo_proc info;
|
|
107
|
+
size_t size = sizeof(info);
|
|
108
|
+
int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid()};
|
|
109
|
+
if (sysctl(mib, 4, &info, &size, NULL, 0) != 0 || size == 0) {
|
|
110
|
+
return 0;
|
|
111
|
+
}
|
|
112
|
+
struct timeval now;
|
|
113
|
+
gettimeofday(&now, NULL);
|
|
114
|
+
const struct timeval start = info.kp_proc.p_starttime;
|
|
115
|
+
NSTimeInterval elapsed = (now.tv_sec - start.tv_sec)
|
|
116
|
+
+ (now.tv_usec - start.tv_usec) / 1e6;
|
|
117
|
+
return elapsed > 0 ? elapsed : 0;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// NO only when the system positively reports no usable network path; an
|
|
121
|
+
// unknown state (no answer within the short wait) lets the restore try.
|
|
122
|
+
static BOOL PushyHasNetworkPath(void) {
|
|
123
|
+
dispatch_queue_t queue = dispatch_queue_create("cn.reactnative.pushy.path", DISPATCH_QUEUE_SERIAL);
|
|
124
|
+
nw_path_monitor_t monitor = nw_path_monitor_create();
|
|
125
|
+
dispatch_semaphore_t answered = dispatch_semaphore_create(0);
|
|
126
|
+
__block nw_path_status_t status = nw_path_status_invalid;
|
|
127
|
+
nw_path_monitor_set_queue(monitor, queue);
|
|
128
|
+
nw_path_monitor_set_update_handler(monitor, ^(nw_path_t path) {
|
|
129
|
+
BOOL first = status == nw_path_status_invalid;
|
|
130
|
+
status = nw_path_get_status(path);
|
|
131
|
+
if (first) {
|
|
132
|
+
dispatch_semaphore_signal(answered);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
nw_path_monitor_start(monitor);
|
|
136
|
+
PushyWaitSeconds(answered, 0.5);
|
|
137
|
+
nw_path_monitor_cancel(monitor);
|
|
138
|
+
__block nw_path_status_t result;
|
|
139
|
+
dispatch_sync(queue, ^{
|
|
140
|
+
result = status;
|
|
141
|
+
});
|
|
142
|
+
return result != nw_path_status_unsatisfied;
|
|
143
|
+
}
|
|
144
|
+
#endif
|
|
145
|
+
// prepareBundleWithCompletion: (no explicit timeout) waits this long at most:
|
|
146
|
+
// past the longest round (8 query requests, then two 600s download phases).
|
|
147
|
+
static const NSTimeInterval kPushyHostPrepareDefaultTimeout = 1800;
|
|
148
|
+
|
|
149
|
+
@interface RCTPushyOrchestrator ()
|
|
150
|
+
+ (void)runHoldRoundWithDeadline:(NSTimeInterval)deadlineUptime;
|
|
151
|
+
@end
|
|
152
|
+
|
|
153
|
+
static void PushyMaybeHoldProcess(void) {
|
|
154
|
+
// Once per process; a second crashing thread passes straight through
|
|
155
|
+
// instead of waiting behind the first (§11.3: prefer under-rescuing over
|
|
156
|
+
// wedging the teardown).
|
|
157
|
+
bool expected = false;
|
|
158
|
+
if (!pushyHoldAttempted.compare_exchange_strong(expected, true)) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
NSTimeInterval uptime = PushyMonotonicNow() - pushyProcessAnchorUptime;
|
|
162
|
+
bool roundInFlight = pushyRoundStarted.load() && !pushyRoundCompleted.load();
|
|
163
|
+
// Early crashes are the brick signature; a crash with an in-flight round
|
|
164
|
+
// is worth finishing regardless of uptime. Everything else is an ordinary
|
|
165
|
+
// crash whose UX must not be delayed.
|
|
166
|
+
if (uptime >= kPushyHoldTriggerUptime && !roundInFlight) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
NSTimeInterval budget = [NSThread isMainThread]
|
|
170
|
+
? kPushyHoldBudgetMainThread
|
|
171
|
+
: kPushyHoldBudgetBackgroundThread;
|
|
172
|
+
NSTimeInterval deadline = PushyMonotonicNow() + budget;
|
|
173
|
+
NSLog(@"RCTPushy -- crash hold: holding process for up to %.1fs "
|
|
174
|
+
@"(uptime %.1fs)", budget, uptime);
|
|
175
|
+
|
|
176
|
+
// The rescue runs on its own queue and the dying thread only waits with a
|
|
177
|
+
// hard timeout: even a deadlocked rescue (a thread that died holding a
|
|
178
|
+
// lock — uncaught ObjC exceptions skip @finally) can only delay the
|
|
179
|
+
// process death, never prevent it.
|
|
180
|
+
dispatch_semaphore_t done = dispatch_semaphore_create(0);
|
|
181
|
+
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^{
|
|
182
|
+
@try {
|
|
183
|
+
[RCTPushyOrchestrator runHoldRoundWithDeadline:deadline];
|
|
184
|
+
} @catch (...) {
|
|
185
|
+
NSLog(@"RCTPushy -- crash hold failed: %@", PushyCaughtReason(@"unknown exception"));
|
|
186
|
+
}
|
|
187
|
+
dispatch_semaphore_signal(done);
|
|
188
|
+
});
|
|
189
|
+
if (!PushyWaitSeconds(done, budget)) {
|
|
190
|
+
NSLog(@"RCTPushy -- crash hold: budget exhausted, letting go");
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Crash-moment brick rescue (§11): when the app is dying of an uncaught
|
|
195
|
+
// exception during startup (RCTFatal raises NSException in release), the
|
|
196
|
+
// process is still alive and JS will never run again — a natural,
|
|
197
|
+
// false-positive-free window to finish the cold-start check. The previous
|
|
198
|
+
// handler (crash reporters chain the same way) always runs afterwards.
|
|
199
|
+
static void PushyCrashHoldExceptionHandler(NSException *exception) {
|
|
200
|
+
@try {
|
|
201
|
+
PushyMaybeHoldProcess();
|
|
202
|
+
} @catch (...) {
|
|
203
|
+
// The dying process owes the previous handler its turn no matter
|
|
204
|
+
// what the rescue did.
|
|
205
|
+
}
|
|
206
|
+
if (pushyPreviousExceptionHandler != NULL) {
|
|
207
|
+
pushyPreviousExceptionHandler(exception);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
static void PushyInstallCrashHoldHandler(void) {
|
|
212
|
+
static const bool installed = [] {
|
|
213
|
+
pushyPreviousExceptionHandler = NSGetUncaughtExceptionHandler();
|
|
214
|
+
NSSetUncaughtExceptionHandler(&PushyCrashHoldExceptionHandler);
|
|
215
|
+
return true;
|
|
216
|
+
}();
|
|
217
|
+
(void)installed;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
#pragma mark - native cold-start check orchestration
|
|
221
|
+
|
|
222
|
+
// Refuses an https→http downgrade before the redirected request — and with
|
|
223
|
+
// it the POST body (appKey, uuid, versions) — leaves the device. The shared
|
|
224
|
+
// session would follow first and only the response could be rejected; ATS
|
|
225
|
+
// blocks plaintext by default, this covers apps that opted out with
|
|
226
|
+
// NSAllowsArbitraryLoads. Same rule as RCTPushyDownloader
|
|
227
|
+
// (RCTPushyIsHttpsDowngrade). Returning nil
|
|
228
|
+
// delivers the 3xx itself as the final response, which the status check in
|
|
229
|
+
// PushyHttpRequest then treats as a failed endpoint.
|
|
230
|
+
@interface PushyRequestRedirectGuard : NSObject <NSURLSessionTaskDelegate>
|
|
231
|
+
@end
|
|
232
|
+
|
|
233
|
+
@implementation PushyRequestRedirectGuard
|
|
234
|
+
|
|
235
|
+
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
|
|
236
|
+
willPerformHTTPRedirection:(NSHTTPURLResponse *)response
|
|
237
|
+
newRequest:(NSURLRequest *)request
|
|
238
|
+
completionHandler:(void (^)(NSURLRequest *))completionHandler
|
|
239
|
+
{
|
|
240
|
+
completionHandler(RCTPushyIsHttpsDowngrade(task.originalRequest.URL, request.URL) ? nil : request);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
@end
|
|
244
|
+
|
|
245
|
+
// One long-lived delegate session (not the shared one) so the redirect guard
|
|
246
|
+
// sees the 3xx before it is followed; completion handlers still receive the
|
|
247
|
+
// final response. Never invalidated: it lives as long as the process.
|
|
248
|
+
static NSURLSession *PushyRequestSession(void) {
|
|
249
|
+
static NSURLSession *session = [NSURLSession
|
|
250
|
+
sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]
|
|
251
|
+
delegate:[PushyRequestRedirectGuard new]
|
|
252
|
+
delegateQueue:nil];
|
|
253
|
+
return session;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Same shape as -[UIDevice systemVersion] ("17.4", "17.4.1"), which is
|
|
257
|
+
// main-thread-only UIKit; the round runs on a background queue.
|
|
258
|
+
static NSString *PushyOsVersion(void) {
|
|
259
|
+
NSOperatingSystemVersion version = [NSProcessInfo processInfo].operatingSystemVersion;
|
|
260
|
+
if (version.patchVersion > 0) {
|
|
261
|
+
return [NSString stringWithFormat:@"%ld.%ld.%ld", (long)version.majorVersion,
|
|
262
|
+
(long)version.minorVersion, (long)version.patchVersion];
|
|
263
|
+
}
|
|
264
|
+
return [NSString stringWithFormat:@"%ld.%ld", (long)version.majorVersion,
|
|
265
|
+
(long)version.minorVersion];
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// Blocking JSON HTTP round-trip on the orchestrator's utility thread. Returns
|
|
269
|
+
// the response body on 2xx, nil on any failure. `timeout` is the request's
|
|
270
|
+
// idle timeout, `callTimeout` bounds the whole call.
|
|
271
|
+
static NSString *PushyHttpRequest(NSString *urlString, NSString *method,
|
|
272
|
+
NSString *body, NSTimeInterval timeout,
|
|
273
|
+
NSTimeInterval callTimeout) {
|
|
274
|
+
NSURL *url = [NSURL URLWithString:urlString];
|
|
275
|
+
if (url == nil) {
|
|
276
|
+
return nil;
|
|
277
|
+
}
|
|
278
|
+
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
|
|
279
|
+
request.HTTPMethod = method;
|
|
280
|
+
request.timeoutInterval = timeout;
|
|
281
|
+
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
|
|
282
|
+
if (body != nil) {
|
|
283
|
+
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
|
|
284
|
+
request.HTTPBody = [body dataUsingEncoding:NSUTF8StringEncoding];
|
|
285
|
+
}
|
|
286
|
+
dispatch_semaphore_t sem = dispatch_semaphore_create(0);
|
|
287
|
+
__block NSString *result = nil;
|
|
288
|
+
NSURLSessionDataTask *task = [PushyRequestSession() dataTaskWithRequest:request
|
|
289
|
+
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
|
|
290
|
+
NSHTTPURLResponse *httpResponse =
|
|
291
|
+
[response isKindOfClass:[NSHTTPURLResponse class]]
|
|
292
|
+
? (NSHTTPURLResponse *)response
|
|
293
|
+
: nil;
|
|
294
|
+
NSInteger status = httpResponse.statusCode;
|
|
295
|
+
if (error == nil && httpResponse != nil && status >= 200 && status < 300
|
|
296
|
+
&& data != nil) {
|
|
297
|
+
result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
|
|
298
|
+
}
|
|
299
|
+
dispatch_semaphore_signal(sem);
|
|
300
|
+
}];
|
|
301
|
+
[task resume];
|
|
302
|
+
if (!PushyWaitSeconds(sem, callTimeout)) {
|
|
303
|
+
[task cancel];
|
|
304
|
+
return nil;
|
|
305
|
+
}
|
|
306
|
+
return result;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Contract C1 (flowcore::ConfigsEquivalent, shared with Android and Harmony;
|
|
310
|
+
// JS has its own copy): the same config in another serialization — key order,
|
|
311
|
+
// trailing slashes, defaulted keys — is not a change. Lets a host-owned
|
|
312
|
+
// config and the same config as JS serializes it count as one, instead of a
|
|
313
|
+
// "change" that cancels the round. nil (no stored config) never matches.
|
|
314
|
+
static BOOL PushyConfigsEquivalent(NSString *a, NSString *b) {
|
|
315
|
+
return a != nil && b != nil
|
|
316
|
+
&& flowcore::ConfigsEquivalent(PushyToStdString(a), PushyToStdString(b));
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
// The persisted config a round may run with. Every gate (crash-hold handler
|
|
320
|
+
// install, round start, prepareBundle, the round itself) reads it through
|
|
321
|
+
// PushyLoadRunnableConfig, which applies the shared gate
|
|
322
|
+
// (flowcore::ParseRunnableConfig), so they agree on what "configured" and
|
|
323
|
+
// "disabled" mean. YES when a round may run (*json is the config text);
|
|
324
|
+
// otherwise *rejection is the host-facing result (skipped:
|
|
325
|
+
// not_configured/disabled, failed: invalid_config).
|
|
326
|
+
static BOOL PushyLoadRunnableConfig(NSString **json, NSDictionary **rejection) {
|
|
327
|
+
NSString *text = [PushyDefaults() stringForKey:keyNativeConfig];
|
|
328
|
+
if (json != NULL) {
|
|
329
|
+
*json = [text copy];
|
|
330
|
+
}
|
|
331
|
+
flowcore::RunnableConfig gate = flowcore::ParseRunnableConfig(PushyToStdString(text));
|
|
332
|
+
if (!gate.runnable() && rejection != NULL) {
|
|
333
|
+
*rejection = PushyHostResult(PushyFromStdString(gate.status),
|
|
334
|
+
PushyFromStdString(gate.reason));
|
|
335
|
+
}
|
|
336
|
+
return gate.runnable();
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
@implementation RCTPushyOrchestrator
|
|
340
|
+
|
|
341
|
+
+ (void)persistConfiguration:(NSString *)config {
|
|
342
|
+
PushyWithStateLock(^{
|
|
343
|
+
NSUserDefaults *defaults = PushyDefaults();
|
|
344
|
+
if ([defaults stringForKey:keyUuid].length == 0) {
|
|
345
|
+
[defaults setObject:[NSUUID UUID].UUIDString forKey:keyUuid];
|
|
346
|
+
}
|
|
347
|
+
if (PushyConfigsEquivalent([defaults stringForKey:keyNativeConfig], config)) {
|
|
348
|
+
// The same config in another serialization (key order, trailing
|
|
349
|
+
// slashes, defaulted keys). Not a change: the stored text, the
|
|
350
|
+
// response cache and any in-flight round all stay valid.
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
353
|
+
// A different request identity/policy: rounds started under the old
|
|
354
|
+
// one must not commit (pushyNativeConfigGeneration, checked by
|
|
355
|
+
// commitRoundWithGeneration next to the reset generation), and the
|
|
356
|
+
// cached response and JS-completed marker belong to the old one.
|
|
357
|
+
pushyNativeConfigGeneration.fetch_add(1);
|
|
358
|
+
[defaults setObject:config forKey:keyNativeConfig];
|
|
359
|
+
[defaults removeObjectForKey:keyNativeCheckCache];
|
|
360
|
+
[self recordJsRound:nil];
|
|
361
|
+
});
|
|
362
|
+
if (pushySyncReady.load() && [self hasRunnableConfig]) {
|
|
363
|
+
PushyInstallCrashHoldHandler();
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
+ (BOOL)hasRunnableConfig {
|
|
368
|
+
return PushyLoadRunnableConfig(NULL, NULL);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
// Process-wide round state, set up by whichever launch path needs a round
|
|
372
|
+
// first: the delayed cold-start check or the tvOS purged-version restore.
|
|
373
|
+
+ (void)prepareProcess:(NSString *)launchRolledBackVersion {
|
|
374
|
+
static const bool prepared = [launchRolledBackVersion] {
|
|
375
|
+
pushyRoundDone = dispatch_semaphore_create(0);
|
|
376
|
+
pushyHostRoundGroup = dispatch_group_create();
|
|
377
|
+
dispatch_group_enter(pushyHostRoundGroup);
|
|
378
|
+
pushyProcessAnchorUptime = PushyMonotonicNow();
|
|
379
|
+
pushyLaunchRolledBackForHold = [launchRolledBackVersion copy];
|
|
380
|
+
pushySyncReady.store(true);
|
|
381
|
+
// The crash-hold rescue shares the orchestrator's rollout gate: no
|
|
382
|
+
// runnable config, no handler (§11.3). persistConfiguration installs
|
|
383
|
+
// it once a runnable config arrives later in the process.
|
|
384
|
+
if ([RCTPushyOrchestrator hasRunnableConfig]) {
|
|
385
|
+
PushyInstallCrashHoldHandler();
|
|
386
|
+
}
|
|
387
|
+
return true;
|
|
388
|
+
}();
|
|
389
|
+
(void)prepared;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
+ (void)scheduleFromColdStart:(NSString *)launchRolledBackVersion {
|
|
393
|
+
#if !DEBUG
|
|
394
|
+
// Once per process; a few seconds of delay keeps the check away from the
|
|
395
|
+
// cold-start critical path (§7 R5) — its result targets the NEXT launch.
|
|
396
|
+
// Unless the previous process died mid-round (residual incomplete
|
|
397
|
+
// marker), in which case every launch second counts (§11.4).
|
|
398
|
+
// No `self` inside the once-lambdas: a block created in a lambda that
|
|
399
|
+
// captured `self` by reference keeps that (dangling) reference.
|
|
400
|
+
static const bool scheduled = [launchRolledBackVersion] {
|
|
401
|
+
[RCTPushyOrchestrator prepareProcess:launchRolledBackVersion];
|
|
402
|
+
NSUserDefaults *defaults = PushyDefaults();
|
|
403
|
+
int64_t delaySeconds =
|
|
404
|
+
[defaults objectForKey:keyNativeCheckIncomplete] != nil ? 0 : 5;
|
|
405
|
+
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delaySeconds * NSEC_PER_SEC),
|
|
406
|
+
dispatch_get_global_queue(QOS_CLASS_UTILITY, 0), ^{ PushyGuard(@"native sync", ^{
|
|
407
|
+
if ([RCTPushyOrchestrator hasJsRound]) {
|
|
408
|
+
// Not consuming the round: a later crash rescue may still
|
|
409
|
+
// need it.
|
|
410
|
+
NSLog(@"RCTPushy -- native sync skipped: JS already queried in this process");
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
[RCTPushyOrchestrator startRoundWithDeadline:0];
|
|
414
|
+
}); });
|
|
415
|
+
return true;
|
|
416
|
+
}();
|
|
417
|
+
(void)scheduled;
|
|
418
|
+
#endif
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
#if TARGET_OS_TV && !DEBUG
|
|
422
|
+
// Runs this process's round before the first bundle loads, blocking the
|
|
423
|
+
// caller for at most what is left of kPushyPurgeRestoreBudget since process
|
|
424
|
+
// start. The state no longer has a
|
|
425
|
+
// current version, so the server answers with the latest version for the
|
|
426
|
+
// packaged bundle, and the round activates it while the restore window is
|
|
427
|
+
// open. Returns NO when no round can run; otherwise the caller must resolve
|
|
428
|
+
// the launch bundle again: it launches whatever was activated before the
|
|
429
|
+
// window closed, or the packaged bundle. The round stops at the same
|
|
430
|
+
// deadline, keeping a partial download for the next check to resume.
|
|
431
|
+
+ (BOOL)restorePurgedLaunch:(NSString *)purgedVersion
|
|
432
|
+
rolledBack:(NSString *)launchRolledBackVersion {
|
|
433
|
+
[self prepareProcess:launchRolledBackVersion];
|
|
434
|
+
if (![self hasRunnableConfig]) {
|
|
435
|
+
RCTLogWarn(@"RCTPushy -- version %@ was purged and no native sync is "
|
|
436
|
+
@"configured; launching the packaged bundle", purgedVersion);
|
|
437
|
+
return NO;
|
|
438
|
+
}
|
|
439
|
+
// Offline: the round could only burn the launch budget.
|
|
440
|
+
if (!PushyHasNetworkPath()) {
|
|
441
|
+
RCTLogWarn(@"RCTPushy -- version %@ was purged and there is no network; "
|
|
442
|
+
@"launching the packaged bundle", purgedVersion);
|
|
443
|
+
return NO;
|
|
444
|
+
}
|
|
445
|
+
// The launch watchdog counts from process start, not from this call:
|
|
446
|
+
// whatever the host did before resolving the bundle is already spent.
|
|
447
|
+
NSTimeInterval budget = kPushyPurgeRestoreBudget - PushyProcessElapsed();
|
|
448
|
+
if (budget < kPushyPurgeRestoreMinimumBudget) {
|
|
449
|
+
RCTLogWarn(@"RCTPushy -- version %@ was purged and the launch budget is "
|
|
450
|
+
@"spent; launching the packaged bundle", purgedVersion);
|
|
451
|
+
return NO;
|
|
452
|
+
}
|
|
453
|
+
PushyWithStateLock(^{
|
|
454
|
+
pushyPurgeRestoreWindowOpen = true;
|
|
455
|
+
});
|
|
456
|
+
pushyPurgeRestoreActive.store(true);
|
|
457
|
+
NSTimeInterval deadline = PushyMonotonicNow() + budget;
|
|
458
|
+
dispatch_semaphore_t done = dispatch_semaphore_create(0);
|
|
459
|
+
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^{
|
|
460
|
+
PushyGuard(@"purge restore", ^{
|
|
461
|
+
[self startRoundWithDeadline:deadline];
|
|
462
|
+
});
|
|
463
|
+
dispatch_semaphore_signal(done);
|
|
464
|
+
});
|
|
465
|
+
BOOL timedOut = !PushyWaitSeconds(done, budget);
|
|
466
|
+
// The round's deadline does not bound a slow response (the request
|
|
467
|
+
// timeout is an idle timeout) nor a version already on disk, so the close
|
|
468
|
+
// is what stops a late activation — not the deadline.
|
|
469
|
+
PushyWithStateLock(^{
|
|
470
|
+
pushyPurgeRestoreWindowOpen = false;
|
|
471
|
+
});
|
|
472
|
+
if (timedOut) {
|
|
473
|
+
RCTLogWarn(@"RCTPushy -- purged version %@ restore timed out", purgedVersion);
|
|
474
|
+
} else {
|
|
475
|
+
NSDictionary *result = pushyHostRoundResult;
|
|
476
|
+
RCTLogInfo(@"RCTPushy -- purged version %@ restore: %@ %@ %@", purgedVersion,
|
|
477
|
+
result[@"status"], result[@"reason"], result[@"hash"]);
|
|
478
|
+
}
|
|
479
|
+
return YES;
|
|
480
|
+
}
|
|
481
|
+
#endif
|
|
482
|
+
|
|
483
|
+
+ (NSDictionary *)prepareBundle {
|
|
484
|
+
return [self prepareBundleWithin:kPushyHostPrepareDefaultTimeout];
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
// Waits at most `timeout` seconds for this process's round. The round itself
|
|
488
|
+
// is not cut short by the host's wait (its result still serves the next
|
|
489
|
+
// launch); the host gets failed/timeout instead of a result.
|
|
490
|
+
+ (NSDictionary *)prepareBundleWithin:(NSTimeInterval)timeout {
|
|
491
|
+
#if DEBUG
|
|
492
|
+
return PushyHostResult(@"skipped", @"debug");
|
|
493
|
+
#else
|
|
494
|
+
if (!pushySyncReady.load()) {
|
|
495
|
+
return PushyHostResult(@"skipped", @"not_initialized");
|
|
496
|
+
}
|
|
497
|
+
NSString *configJson = nil;
|
|
498
|
+
NSDictionary *rejection = nil;
|
|
499
|
+
if (!PushyLoadRunnableConfig(&configJson, &rejection)) {
|
|
500
|
+
return rejection;
|
|
501
|
+
}
|
|
502
|
+
// Run the round on its own queue rather than this caller's thread, so the
|
|
503
|
+
// wait below can be bounded.
|
|
504
|
+
if ([self claimRound]) {
|
|
505
|
+
dispatch_async(dispatch_get_global_queue(QOS_CLASS_UTILITY, 0), ^{
|
|
506
|
+
PushyGuard(@"native sync", ^{
|
|
507
|
+
[self runClaimedRoundWithDeadline:0];
|
|
508
|
+
});
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
// A group is broadcast-style. Sharing the rescue semaphore would let one
|
|
512
|
+
// waiter consume the only signal and leave the other waiting forever.
|
|
513
|
+
if (!pushyRoundStarted.load()) {
|
|
514
|
+
return PushyHostResult(@"skipped", @"config_changed");
|
|
515
|
+
}
|
|
516
|
+
if (!(timeout > 0)) {
|
|
517
|
+
timeout = 0; // also NaN
|
|
518
|
+
}
|
|
519
|
+
if (dispatch_group_wait(pushyHostRoundGroup, dispatch_time(DISPATCH_TIME_NOW,
|
|
520
|
+
(int64_t)(MIN(timeout, (NSTimeInterval)(INT64_MAX / NSEC_PER_SEC)) * NSEC_PER_SEC))) != 0) {
|
|
521
|
+
return PushyHostResult(@"failed", @"timeout");
|
|
522
|
+
}
|
|
523
|
+
NSString *cancellation = PushyFromStdString(flowcore::HostCancellation(
|
|
524
|
+
PushyToStdString(configJson), PushyToStdString(pushyHostRoundConfig),
|
|
525
|
+
PushyToStdString([PushyDefaults() stringForKey:keyNativeConfig]),
|
|
526
|
+
pushyHostRoundConfigGeneration, pushyNativeConfigGeneration.load(),
|
|
527
|
+
pushyHostRoundGeneration, pushyResetGeneration.load()));
|
|
528
|
+
if (cancellation != nil) {
|
|
529
|
+
return PushyHostResult(@"cancelled", cancellation);
|
|
530
|
+
}
|
|
531
|
+
return pushyHostRoundResult ?: PushyHostResult(@"failed", @"internal_error");
|
|
532
|
+
#endif
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
+ (void)recordJsRound:(NSString *)config {
|
|
536
|
+
@synchronized (RCTPushyOrchestrator.class) {
|
|
537
|
+
pushyJsCompletedConfig = [config copy];
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
// True when JS already obtained a valid response in this process for a config
|
|
542
|
+
// equivalent to the one the native round would use (§10.3): the delayed round is
|
|
543
|
+
// then a duplicate request. Only the scheduled round asks — the crash-rescue
|
|
544
|
+
// path still runs, JS is dead by then.
|
|
545
|
+
+ (BOOL)hasJsRound {
|
|
546
|
+
NSString *jsConfig;
|
|
547
|
+
@synchronized (RCTPushyOrchestrator.class) {
|
|
548
|
+
jsConfig = pushyJsCompletedConfig;
|
|
549
|
+
}
|
|
550
|
+
if (jsConfig == nil) {
|
|
551
|
+
return NO;
|
|
552
|
+
}
|
|
553
|
+
return PushyConfigsEquivalent([PushyDefaults() stringForKey:keyNativeConfig], jsConfig);
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
// Runs the process's single round on the calling thread if nobody has
|
|
557
|
+
// started it yet. deadlineUptime > 0 (crash rescue) caps every HTTP call and
|
|
558
|
+
// download phase to the remaining budget.
|
|
559
|
+
+ (void)startRoundWithDeadline:(NSTimeInterval)deadlineUptime {
|
|
560
|
+
if ([self claimRound]) {
|
|
561
|
+
[self runClaimedRoundWithDeadline:deadlineUptime];
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
// Claims this process's single round. Missing/disabled configuration is a
|
|
566
|
+
// preflight skip, not a used round. A YES must be followed by exactly one
|
|
567
|
+
// runClaimedRoundWithDeadline:.
|
|
568
|
+
+ (BOOL)claimRound {
|
|
569
|
+
if (![self hasRunnableConfig]) {
|
|
570
|
+
return NO;
|
|
571
|
+
}
|
|
572
|
+
bool expected = false;
|
|
573
|
+
return pushyRoundStarted.compare_exchange_strong(expected, true);
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
+ (void)runClaimedRoundWithDeadline:(NSTimeInterval)deadlineUptime {
|
|
577
|
+
@try {
|
|
578
|
+
[self runOnce:pushyLaunchRolledBackForHold deadline:deadlineUptime];
|
|
579
|
+
} @catch (...) {
|
|
580
|
+
// The rescue path must never take the app down with it.
|
|
581
|
+
RCTLogWarn(@"RCTPushy -- native sync crashed: %@", PushyCaughtReason(@"unknown exception"));
|
|
582
|
+
pushyHostRoundResult = PushyHostResult(@"failed", @"internal_error");
|
|
583
|
+
} @finally {
|
|
584
|
+
pushyRoundCompleted.store(true);
|
|
585
|
+
dispatch_semaphore_signal(pushyRoundDone);
|
|
586
|
+
dispatch_group_leave(pushyHostRoundGroup);
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
// Crash-rescue entry (§11.3), called from the handler's worker queue while
|
|
591
|
+
// the uncaught-exception handler holds the dying process. Ensures this
|
|
592
|
+
// process's round runs to completion within the budget, then activates a
|
|
593
|
+
// downloaded-but-unactivated version if one exists — the last chance before
|
|
594
|
+
// the process is gone.
|
|
595
|
+
+ (void)runHoldRoundWithDeadline:(NSTimeInterval)deadlineUptime {
|
|
596
|
+
pushyCrashHoldActive.store(true);
|
|
597
|
+
[self startRoundWithDeadline:deadlineUptime];
|
|
598
|
+
if (pushyRoundStarted.load() && !pushyRoundCompleted.load()) {
|
|
599
|
+
NSTimeInterval remaining = deadlineUptime - PushyMonotonicNow();
|
|
600
|
+
if (remaining > 0) {
|
|
601
|
+
PushyWaitSeconds(pushyRoundDone, remaining);
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
[self activatePendingVersion];
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
// The alert-strategy variant of the §10.7 hole: the round downloaded a fix
|
|
608
|
+
// but deferred activation to JS, and JS is now dead. Activation is local and
|
|
609
|
+
// bounded (a state switch under the commit lock).
|
|
610
|
+
+ (void)activatePendingVersion {
|
|
611
|
+
NSString *hash = nil;
|
|
612
|
+
uint64_t generation = 0;
|
|
613
|
+
uint64_t configGeneration = 0;
|
|
614
|
+
@synchronized (self) {
|
|
615
|
+
hash = pushyUnactivatedHash;
|
|
616
|
+
generation = pushyUnactivatedGeneration;
|
|
617
|
+
configGeneration = pushyUnactivatedConfigGeneration;
|
|
618
|
+
}
|
|
619
|
+
if (hash == nil) {
|
|
620
|
+
return;
|
|
621
|
+
}
|
|
622
|
+
// Cheap early out for bytes that are gone (e.g. wiped by a reset whose
|
|
623
|
+
// generation bump the commit would catch anyway, or by cleanup); the
|
|
624
|
+
// commit itself runs the full activation gate (PushyVerifyActivation).
|
|
625
|
+
if (!PushyHasCompletedVersionAtPath(PushyVersionDir(hash), hash)) {
|
|
626
|
+
NSLog(@"RCTPushy -- crash hold: version %@ no longer on disk, dropping activation", hash);
|
|
627
|
+
return;
|
|
628
|
+
}
|
|
629
|
+
NSDictionary *hashInfoEntry = nil;
|
|
630
|
+
NSDictionary *parsed =
|
|
631
|
+
PushyJsonDictionary([PushyDefaults() stringForKey:PushyHashInfoKey(hash)], NULL);
|
|
632
|
+
if (parsed != nil) {
|
|
633
|
+
NSMutableDictionary *merged = [parsed mutableCopy];
|
|
634
|
+
merged[PushyInfoCrashHold()] = @YES;
|
|
635
|
+
hashInfoEntry = @{@"hash": hash, @"info": merged};
|
|
636
|
+
}
|
|
637
|
+
NSError *verifyError = nil;
|
|
638
|
+
BOOL committed = [self commitRoundWithGeneration:generation
|
|
639
|
+
configGeneration:configGeneration
|
|
640
|
+
hashInfo:hashInfoEntry
|
|
641
|
+
activate:hash
|
|
642
|
+
cache:nil
|
|
643
|
+
activated:NULL
|
|
644
|
+
verifyError:&verifyError];
|
|
645
|
+
if (committed) {
|
|
646
|
+
@synchronized (self) {
|
|
647
|
+
pushyUnactivatedHash = nil;
|
|
648
|
+
}
|
|
649
|
+
NSLog(@"RCTPushy -- crash hold: activated downloaded version %@", hash);
|
|
650
|
+
} else if (verifyError != nil) {
|
|
651
|
+
NSLog(@"RCTPushy -- crash hold: version %@ failed verification, dropping activation: %@",
|
|
652
|
+
hash, verifyError.localizedDescription);
|
|
653
|
+
} else {
|
|
654
|
+
NSLog(@"RCTPushy -- crash hold: reset or new config since download, dropping activation");
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
// The round itself is the shared engine's (cpp/update_flow_core
|
|
659
|
+
// round_engine.h, NATIVE_CHECKUPDATE_DESIGN §12): this drives it on the
|
|
660
|
+
// calling thread and runs what it asks for — the breadcrumb, the launch
|
|
661
|
+
// facts, the requests, the downloads and the commit.
|
|
662
|
+
+ (void)runOnce:(NSString *)launchRolledBackVersion deadline:(NSTimeInterval)deadlineUptime {
|
|
663
|
+
// Generations first, config second: a config replaced in between is
|
|
664
|
+
// caught by the commit's generation check.
|
|
665
|
+
const uint64_t resetGeneration = pushyResetGeneration.load();
|
|
666
|
+
const uint64_t configGeneration = pushyNativeConfigGeneration.load();
|
|
667
|
+
pushyHostRoundGeneration = resetGeneration;
|
|
668
|
+
pushyHostRoundConfigGeneration = configGeneration;
|
|
669
|
+
pushyHostRoundResult = PushyHostResult(@"failed", @"check_failed");
|
|
670
|
+
NSUserDefaults *defaults = PushyDefaults();
|
|
671
|
+
NSString *configJson = [defaults stringForKey:keyNativeConfig];
|
|
672
|
+
pushyHostRoundConfig = configJson;
|
|
673
|
+
|
|
674
|
+
flowjson::Value event = flowjson::Value::Object();
|
|
675
|
+
event.Set("type", flowjson::Value::String("start"));
|
|
676
|
+
event.Set("config", flowjson::Value::String(PushyToStdString(configJson)));
|
|
677
|
+
event.Set("resetGeneration", flowjson::Value::Number(resetGeneration));
|
|
678
|
+
event.Set("configGeneration", flowjson::Value::Number(configGeneration));
|
|
679
|
+
event.Set("sample", flowjson::Value::Number(arc4random() / 4294967296.0));
|
|
680
|
+
event.Set("deadline", flowjson::Value::Number(deadlineUptime > 0 ? deadlineUptime * 1000 : 0));
|
|
681
|
+
flowjson::Value state;
|
|
682
|
+
BOOL marked = NO;
|
|
683
|
+
@try {
|
|
684
|
+
for (;;) {
|
|
685
|
+
event.Set("now", flowjson::Value::Number(PushyMonotonicNow() * 1000));
|
|
686
|
+
event.Set("crashHold", flowjson::Value::Bool(pushyCrashHoldActive.load()));
|
|
687
|
+
event.Set("forceActivate", flowjson::Value::Bool(pushyPurgeRestoreActive.load()));
|
|
688
|
+
flowjson::Value step = flowcore::StepRound(state, event);
|
|
689
|
+
state = step.Get("state");
|
|
690
|
+
event = flowjson::Value::Object();
|
|
691
|
+
for (const flowjson::Value &command : step.Get("commands").elements()) {
|
|
692
|
+
const std::string &type = command.Get("type").AsString();
|
|
693
|
+
if (type == "markIncomplete") {
|
|
694
|
+
[defaults setObject:@YES forKey:keyNativeCheckIncomplete];
|
|
695
|
+
marked = YES;
|
|
696
|
+
} else if (type == "finish") {
|
|
697
|
+
[self finishRound:command
|
|
698
|
+
resetGeneration:resetGeneration
|
|
699
|
+
configGeneration:configGeneration];
|
|
700
|
+
return;
|
|
701
|
+
} else {
|
|
702
|
+
event = [self perform:command
|
|
703
|
+
type:type
|
|
704
|
+
launchRolledBackVersion:launchRolledBackVersion
|
|
705
|
+
configGeneration:configGeneration];
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
} @finally {
|
|
710
|
+
if (marked) {
|
|
711
|
+
[defaults removeObjectForKey:keyNativeCheckIncomplete];
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
// Runs one engine command and returns the event that answers it.
|
|
717
|
+
+ (flowjson::Value)perform:(const flowjson::Value &)command
|
|
718
|
+
type:(const std::string &)type
|
|
719
|
+
launchRolledBackVersion:(NSString *)launchRolledBackVersion
|
|
720
|
+
configGeneration:(uint64_t)configGeneration {
|
|
721
|
+
flowjson::Value event = flowjson::Value::Object();
|
|
722
|
+
if (type == "collectEnv") {
|
|
723
|
+
event.Set("type", flowjson::Value::String("env"));
|
|
724
|
+
event.Set("env", [self launchEnv:launchRolledBackVersion]);
|
|
725
|
+
} else if (type == "http") {
|
|
726
|
+
BOOL post = command.Get("post").Truthy();
|
|
727
|
+
NSString *text = PushyHttpRequest(
|
|
728
|
+
PushyFromStdString(command.Get("url").AsString()), post ? @"POST" : @"GET",
|
|
729
|
+
post ? PushyFromStdString(command.Get("body").AsString()) : nil,
|
|
730
|
+
command.Get("timeoutMs").AsNumber() / 1000,
|
|
731
|
+
command.Get("callTimeoutMs").AsNumber() / 1000);
|
|
732
|
+
event.Set("type", flowjson::Value::String("http"));
|
|
733
|
+
if (text != nil) {
|
|
734
|
+
event.Set("text", flowjson::Value::String(PushyToStdString(text)));
|
|
735
|
+
event.Set("at", flowjson::Value::Number([[NSDate date] timeIntervalSince1970]));
|
|
736
|
+
}
|
|
737
|
+
} else if (type == "checkInstalled") {
|
|
738
|
+
NSString *hash = PushyFromStdString(command.Get("hash").AsString());
|
|
739
|
+
event.Set("type", flowjson::Value::String("installed"));
|
|
740
|
+
event.Set("installed", flowjson::Value::Bool(
|
|
741
|
+
PushyHasCompletedVersionAtPath(PushyVersionDir(hash), hash)));
|
|
742
|
+
} else if (type == "download") {
|
|
743
|
+
event = [self download:command];
|
|
744
|
+
} else if (type == "commit") {
|
|
745
|
+
event = [self commit:command configGeneration:configGeneration];
|
|
746
|
+
}
|
|
747
|
+
return event;
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
// This launch as the shared core sees it (native_round.h); nil values are
|
|
751
|
+
// left out — a version-less launch has no currentVersion, as the JS constant
|
|
752
|
+
// does not.
|
|
753
|
+
+ (flowjson::Value)launchEnv:(NSString *)launchRolledBackVersion {
|
|
754
|
+
__block NSString *currentVersion = nil;
|
|
755
|
+
PushyWithStateLock(^{
|
|
756
|
+
pushy::state::State state = PushyStateFromDefaults(PushyDefaults());
|
|
757
|
+
currentVersion = PushyFromStdString(state.current_version);
|
|
758
|
+
});
|
|
759
|
+
flowjson::Value env = flowjson::Value::Object();
|
|
760
|
+
const auto put = [&env](const char *key, NSString *value) {
|
|
761
|
+
if (value != nil) {
|
|
762
|
+
env.Set(key, flowjson::Value::String(PushyToStdString(value)));
|
|
763
|
+
}
|
|
764
|
+
};
|
|
765
|
+
put("packageVersion", [RCTPushy packageVersion]);
|
|
766
|
+
put("currentVersion", currentVersion);
|
|
767
|
+
put("uuid", [PushyDefaults() stringForKey:keyUuid]);
|
|
768
|
+
put("rolledBackVersion", launchRolledBackVersion);
|
|
769
|
+
put("buildTime", [RCTPushy buildTime]);
|
|
770
|
+
put("os", [NSString stringWithFormat:@"%@ %@", PushyOsName, PushyOsVersion()]);
|
|
771
|
+
// Cache-only while a crash is being held (§11.3 budget) or the launch is
|
|
772
|
+
// blocked on the tvOS purged-version restore; computed (and shared with JS
|
|
773
|
+
// getBundleHash) on the ordinary delayed round.
|
|
774
|
+
put("bundleHash", PushyBundleHashSync(
|
|
775
|
+
!(pushyCrashHoldActive.load() || pushyPurgeRestoreActive.load())));
|
|
776
|
+
return env;
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
// One download attempt, bounded by the deadline the engine gave it.
|
|
780
|
+
+ (flowjson::Value)download:(const flowjson::Value &)command {
|
|
781
|
+
const std::string &strategy = command.Get("strategy").AsString();
|
|
782
|
+
PushyType pushyType = strategy == "diff" ? PushyTypePatchFromPpk
|
|
783
|
+
: strategy == "pdiff" ? PushyTypePatchFromPackage
|
|
784
|
+
: PushyTypeFullDownload;
|
|
785
|
+
NSTimeInterval deadline = command.Get("deadline").AsNumber() / 1000;
|
|
786
|
+
NSMutableDictionary *options = [@{
|
|
787
|
+
PushyOptionUrlKey(): PushyFromStdString(command.Get("url").AsString()) ?: @"",
|
|
788
|
+
@"hash": PushyFromStdString(command.Get("hash").AsString()) ?: @"",
|
|
789
|
+
@"deadlineUptime": @(deadline),
|
|
790
|
+
} mutableCopy];
|
|
791
|
+
if (command.Get("originHash").IsString()) {
|
|
792
|
+
options[@"originHash"] = PushyFromStdString(command.Get("originHash").AsString());
|
|
793
|
+
}
|
|
794
|
+
dispatch_semaphore_t sem = dispatch_semaphore_create(0);
|
|
795
|
+
__block NSError *resultError = nil;
|
|
796
|
+
[RCTPushyInstaller fetch:pushyType options:options progress:nil callback:^(NSError *error) {
|
|
797
|
+
resultError = error;
|
|
798
|
+
dispatch_semaphore_signal(sem);
|
|
799
|
+
}];
|
|
800
|
+
flowjson::Value event = flowjson::Value::Object();
|
|
801
|
+
event.Set("type", flowjson::Value::String("download"));
|
|
802
|
+
if (!PushyWaitSeconds(sem, MAX(0, deadline - PushyMonotonicNow()))) {
|
|
803
|
+
RCTLogWarn(@"RCTPushy -- native sync: %s attempt timed out", strategy.c_str());
|
|
804
|
+
event.Set("timedOut", flowjson::Value::Bool(true));
|
|
805
|
+
return event;
|
|
806
|
+
}
|
|
807
|
+
event.Set("ok", flowjson::Value::Bool(resultError == nil));
|
|
808
|
+
if (resultError != nil) {
|
|
809
|
+
RCTLogInfo(@"RCTPushy -- native sync: %s attempt failed: %@",
|
|
810
|
+
strategy.c_str(), resultError.localizedDescription);
|
|
811
|
+
event.Set("code", flowjson::Value::String(
|
|
812
|
+
PushyToStdString(resultError.userInfo[RCTPushyErrorCodeKey])));
|
|
813
|
+
}
|
|
814
|
+
return event;
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
+ (flowjson::Value)commit:(const flowjson::Value &)command
|
|
818
|
+
configGeneration:(uint64_t)configGeneration {
|
|
819
|
+
NSString *hash = PushyFromStdString(command.Get("hash").AsString());
|
|
820
|
+
NSDictionary *hashInfo = nil;
|
|
821
|
+
if (hash != nil) {
|
|
822
|
+
hashInfo = @{
|
|
823
|
+
@"hash": hash,
|
|
824
|
+
@"info": PushyJsonDictionary(
|
|
825
|
+
PushyFromStdString(command.Get("hashInfo").AsString()), NULL) ?: @{},
|
|
826
|
+
};
|
|
827
|
+
}
|
|
828
|
+
BOOL activated = NO;
|
|
829
|
+
NSError *verifyError = nil;
|
|
830
|
+
BOOL committed = [self commitRoundWithGeneration:(uint64_t)command.Get("resetGeneration").AsNumber()
|
|
831
|
+
configGeneration:configGeneration
|
|
832
|
+
hashInfo:hashInfo
|
|
833
|
+
activate:command.Get("activate").Truthy() ? hash : nil
|
|
834
|
+
cache:PushyFromStdString(command.Get("cache").AsString())
|
|
835
|
+
activated:&activated
|
|
836
|
+
verifyError:&verifyError];
|
|
837
|
+
flowjson::Value event = flowjson::Value::Object();
|
|
838
|
+
event.Set("type", flowjson::Value::String("committed"));
|
|
839
|
+
event.Set("ok", flowjson::Value::Bool(committed));
|
|
840
|
+
event.Set("activated", flowjson::Value::Bool(activated));
|
|
841
|
+
if (verifyError != nil) {
|
|
842
|
+
// Android parity (UpdateContext.commitSyncResult): a version that
|
|
843
|
+
// fails the activation gate commits nothing, not even the cache.
|
|
844
|
+
RCTLogWarn(@"RCTPushy -- native sync: %@ failed verification: %@", hash,
|
|
845
|
+
verifyError.localizedDescription);
|
|
846
|
+
event.Set("error", flowjson::Value::Bool(true));
|
|
847
|
+
} else if (!committed && pushyNativeConfigGeneration.load() != configGeneration) {
|
|
848
|
+
event.Set("reason", flowjson::Value::String("config_changed"));
|
|
849
|
+
}
|
|
850
|
+
return event;
|
|
851
|
+
}
|
|
852
|
+
|
|
853
|
+
+ (void)finishRound:(const flowjson::Value &)finish
|
|
854
|
+
resetGeneration:(uint64_t)resetGeneration
|
|
855
|
+
configGeneration:(uint64_t)configGeneration {
|
|
856
|
+
NSString *status = PushyFromStdString(finish.Get("status").AsString());
|
|
857
|
+
NSString *reason = PushyFromStdString(finish.Get("reason").AsString()) ?: @"";
|
|
858
|
+
NSString *hash = PushyFromStdString(finish.Get("hash").AsString());
|
|
859
|
+
BOOL activated = finish.Get("activated").Truthy();
|
|
860
|
+
if (hash != nil && activated) {
|
|
861
|
+
@synchronized (self) {
|
|
862
|
+
pushyUnactivatedHash = nil;
|
|
863
|
+
}
|
|
864
|
+
RCTLogInfo(@"RCTPushy -- native sync: downloaded %@ and set for next launch", hash);
|
|
865
|
+
} else if (hash != nil) {
|
|
866
|
+
// Remembered so a crash later in this process can still activate it
|
|
867
|
+
// (activatePendingVersion) — JS never will.
|
|
868
|
+
@synchronized (self) {
|
|
869
|
+
pushyUnactivatedHash = [hash copy];
|
|
870
|
+
pushyUnactivatedGeneration = resetGeneration;
|
|
871
|
+
pushyUnactivatedConfigGeneration = configGeneration;
|
|
872
|
+
}
|
|
873
|
+
RCTLogInfo(@"RCTPushy -- native sync: downloaded %@, activation left to JS", hash);
|
|
874
|
+
} else {
|
|
875
|
+
RCTLogInfo(@"RCTPushy -- native sync: %@ (%@)", status, reason);
|
|
876
|
+
}
|
|
877
|
+
pushyHostRoundResult = PushyHostResult(status, reason, hash, activated);
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
// Everything a round persists — version info, the activation, the response
|
|
881
|
+
// cache — is written inside ONE state-lock acquisition that first re-checks the
|
|
882
|
+
// reset and config generations. resetToPackagedBundle bumps that generation under the same
|
|
883
|
+
// lock, so there is no compare-and-act window: either the whole round commits,
|
|
884
|
+
// or the reset wins and none of it does.
|
|
885
|
+
//
|
|
886
|
+
// A version to activate first passes the same gate as switchVersion:error:
|
|
887
|
+
// (PushyVerifyActivation, outside the lock) and is re-checked unchanged under
|
|
888
|
+
// it. A version that fails it commits nothing: NO with *verifyError set.
|
|
889
|
+
+ (BOOL)commitRoundWithGeneration:(uint64_t)generation
|
|
890
|
+
configGeneration:(uint64_t)configGeneration
|
|
891
|
+
hashInfo:(NSDictionary *)hashInfoEntry
|
|
892
|
+
activate:(NSString *)hashToActivate
|
|
893
|
+
cache:(NSString *)cache
|
|
894
|
+
activated:(BOOL *)activatedOut
|
|
895
|
+
verifyError:(NSError **)verifyErrorOut {
|
|
896
|
+
// cache is nil for the crash handler's activation-only commit
|
|
897
|
+
// (activatePendingVersion): no round ran, so there is no cache to write.
|
|
898
|
+
PushyVerifiedActivation verified;
|
|
899
|
+
__block NSError *verifyError = nil;
|
|
900
|
+
if (hashToActivate != nil) {
|
|
901
|
+
verifyError = PushyVerifyActivation(hashToActivate, &verified);
|
|
902
|
+
}
|
|
903
|
+
__block BOOL committed = NO;
|
|
904
|
+
__block BOOL activated = NO;
|
|
905
|
+
if (verifyError != nil) {
|
|
906
|
+
if (verifyErrorOut != NULL) {
|
|
907
|
+
*verifyErrorOut = verifyError;
|
|
908
|
+
}
|
|
909
|
+
if (activatedOut != NULL) {
|
|
910
|
+
*activatedOut = NO;
|
|
911
|
+
}
|
|
912
|
+
return NO;
|
|
913
|
+
}
|
|
914
|
+
PushyWithStateLock(^{
|
|
915
|
+
if (pushyResetGeneration.load() != generation) {
|
|
916
|
+
return;
|
|
917
|
+
}
|
|
918
|
+
// The config the round ran with was replaced (persistConfiguration
|
|
919
|
+
// bumps this under the same lock).
|
|
920
|
+
if (pushyNativeConfigGeneration.load() != configGeneration) {
|
|
921
|
+
return;
|
|
922
|
+
}
|
|
923
|
+
NSString *activation = hashToActivate;
|
|
924
|
+
NSDictionary *info = hashInfoEntry[@"info"];
|
|
925
|
+
// The tvOS purged-version restore round (a round commit, not the
|
|
926
|
+
// crash handler's activation-only one): it may take over this launch
|
|
927
|
+
// only while +bundleURL still waits for it; after that the version is
|
|
928
|
+
// left to JS unless a crash is being held (JS is dead then).
|
|
929
|
+
if (cache != nil && pushyPurgeRestoreActive.load()) {
|
|
930
|
+
if (pushyPurgeRestoreWindowOpen) {
|
|
931
|
+
if (activation != nil && info != nil) {
|
|
932
|
+
NSMutableDictionary *marked = [info mutableCopy];
|
|
933
|
+
marked[@"purgeRestore"] = @YES;
|
|
934
|
+
info = marked;
|
|
935
|
+
}
|
|
936
|
+
} else if (!pushyCrashHoldActive.load()) {
|
|
937
|
+
activation = nil;
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
if (activation != nil && !PushyVerifiedActivationUnchangedLocked(verified)) {
|
|
941
|
+
verifyError = PushyErrorWithCode(
|
|
942
|
+
pushy::error_codes::kSwitchVersionFailed,
|
|
943
|
+
[NSString stringWithFormat:@"Bundle version %@ changed while switching.", activation]);
|
|
944
|
+
return;
|
|
945
|
+
}
|
|
946
|
+
NSUserDefaults *defaults = PushyDefaults();
|
|
947
|
+
NSString *infoJson = hashInfoEntry == nil ? nil : PushyJsonString(info);
|
|
948
|
+
if (infoJson != nil) {
|
|
949
|
+
[defaults setObject:infoJson forKey:PushyHashInfoKey(hashInfoEntry[@"hash"])];
|
|
950
|
+
}
|
|
951
|
+
if (activation != nil) {
|
|
952
|
+
PushySwitchVersionLocked(activation);
|
|
953
|
+
activated = YES;
|
|
954
|
+
}
|
|
955
|
+
if (cache != nil) {
|
|
956
|
+
[defaults setObject:cache forKey:keyNativeCheckCache];
|
|
957
|
+
}
|
|
958
|
+
committed = YES;
|
|
959
|
+
});
|
|
960
|
+
if (activatedOut != NULL) {
|
|
961
|
+
*activatedOut = activated;
|
|
962
|
+
}
|
|
963
|
+
if (verifyErrorOut != NULL) {
|
|
964
|
+
*verifyErrorOut = verifyError;
|
|
965
|
+
}
|
|
966
|
+
return committed;
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
@end
|