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.
Files changed (877) hide show
  1. package/README-CN.md +13 -7
  2. package/README.md +15 -6
  3. package/android/build.gradle +25 -33
  4. package/android/jni/Android.mk +18 -24
  5. package/android/jni/Application.mk +3 -1
  6. package/android/lib/arm64-v8a/librnpushy.so +0 -0
  7. package/android/lib/armeabi-v7a/librnpushy.so +0 -0
  8. package/android/lib/x86/librnpushy.so +0 -0
  9. package/android/lib/x86_64/librnpushy.so +0 -0
  10. package/android/proguard.pro +9 -7
  11. package/android/src/main/java/cn/reactnative/modules/update/ApkInstaller.java +3 -8
  12. package/android/src/main/java/cn/reactnative/modules/update/ArchiveLimits.java +24 -6
  13. package/android/src/main/java/cn/reactnative/modules/update/BundlePreparationResult.java +2 -0
  14. package/android/src/main/java/cn/reactnative/modules/update/BundledResourceCopier.java +50 -51
  15. package/android/src/main/java/cn/reactnative/modules/update/CleanupKeepNames.java +12 -13
  16. package/android/src/main/java/cn/reactnative/modules/update/CopyGroupResult.java +3 -0
  17. package/android/src/main/java/cn/reactnative/modules/update/CrashHold.java +22 -30
  18. package/android/src/main/java/cn/reactnative/modules/update/DownloadTask.java +284 -452
  19. package/android/src/main/java/cn/reactnative/modules/update/DownloadTaskParams.java +8 -4
  20. package/android/src/main/java/cn/reactnative/modules/update/ErrorCodes.java +32 -3
  21. package/android/src/main/java/cn/reactnative/modules/update/FileOperationException.java +1 -1
  22. package/android/src/main/java/cn/reactnative/modules/update/FlowBridge.java +39 -8
  23. package/android/src/main/java/cn/reactnative/modules/update/HttpClients.java +63 -0
  24. package/android/src/main/java/cn/reactnative/modules/update/HttpUtils.java +0 -45
  25. package/android/src/main/java/cn/reactnative/modules/update/InstallRecord.java +68 -116
  26. package/android/src/main/java/cn/reactnative/modules/update/NativeCore.java +10 -2
  27. package/android/src/main/java/cn/reactnative/modules/update/PatchFailedException.java +1 -1
  28. package/android/src/main/java/cn/reactnative/modules/update/PushyRuntime.java +53 -62
  29. package/android/src/main/java/cn/reactnative/modules/update/ReactReloadManager.java +9 -24
  30. package/android/src/main/java/cn/reactnative/modules/update/ResumePlan.java +31 -0
  31. package/android/src/main/java/cn/reactnative/modules/update/SafeZipFile.java +42 -80
  32. package/android/src/main/java/cn/reactnative/modules/update/StateSerialRunner.java +22 -39
  33. package/android/src/main/java/cn/reactnative/modules/update/SyncCoordinator.java +474 -500
  34. package/android/src/main/java/cn/reactnative/modules/update/Texts.java +15 -1
  35. package/android/src/main/java/cn/reactnative/modules/update/Threads.java +44 -0
  36. package/android/src/main/java/cn/reactnative/modules/update/UpdateContext.java +265 -188
  37. package/android/src/main/java/cn/reactnative/modules/update/UpdateEventEmitter.java +1 -1
  38. package/android/src/main/java/cn/reactnative/modules/update/UpdateFileUtils.java +75 -17
  39. package/android/src/main/java/cn/reactnative/modules/update/{UpdateModuleImpl.java → UpdateModule.java} +114 -96
  40. package/android/src/main/java/cn/reactnative/modules/update/UpdatePackage.java +16 -19
  41. package/android/src/main/java/cn/reactnative/modules/update/VersionScopedKeys.java +64 -0
  42. package/android/src/oldarch/cn/reactnative/modules/update/NativePushySpec.java +71 -0
  43. package/cpp/android_jni/archive_limits_jni.cpp +83 -0
  44. package/cpp/android_jni/install_record_jni.cpp +89 -0
  45. package/cpp/android_jni/jni_log.h +30 -0
  46. package/cpp/android_jni/jni_natives.h +46 -0
  47. package/cpp/android_jni/jni_registration.cpp +146 -0
  48. package/cpp/android_jni/jni_util.h +160 -0
  49. package/cpp/android_jni/resume_plan_jni.cpp +58 -0
  50. package/cpp/android_jni/update_core_android.cpp +448 -0
  51. package/cpp/android_jni/update_flow_jni.cpp +150 -0
  52. package/{android/jni → cpp/hpatch}/hpatch.c +5 -5
  53. package/{android/jni → cpp/hpatch}/hpatch.h +4 -1
  54. package/cpp/patch_core/archive_limits.cpp +194 -0
  55. package/cpp/patch_core/archive_limits.h +101 -10
  56. package/cpp/patch_core/archive_patch_core.cpp +98 -15
  57. package/cpp/patch_core/archive_patch_core.h +51 -0
  58. package/cpp/patch_core/digest.h +5 -4
  59. package/cpp/patch_core/error_codes.h +15 -11
  60. package/cpp/patch_core/install_record.cpp +430 -0
  61. package/cpp/patch_core/install_record.h +165 -9
  62. package/cpp/patch_core/native_texts.h +102 -0
  63. package/cpp/patch_core/patch_core.cpp +62 -16
  64. package/cpp/patch_core/patch_core.h +27 -7
  65. package/cpp/patch_core/patch_manifest.cpp +201 -0
  66. package/cpp/patch_core/patch_manifest.h +74 -0
  67. package/cpp/patch_core/resume_plan.cpp +226 -0
  68. package/cpp/patch_core/resume_plan.h +88 -0
  69. package/cpp/patch_core/state_ops.h +5 -3
  70. package/cpp/update_flow_core/flow_json.cpp +82 -8
  71. package/cpp/update_flow_core/flow_json.h +21 -0
  72. package/cpp/update_flow_core/native_config.cpp +436 -0
  73. package/cpp/update_flow_core/native_config.h +84 -0
  74. package/cpp/update_flow_core/native_round.cpp +321 -0
  75. package/cpp/update_flow_core/native_round.h +94 -0
  76. package/cpp/update_flow_core/round_engine.cpp +456 -0
  77. package/cpp/update_flow_core/round_engine.h +106 -0
  78. package/cpp/update_flow_core/update_flow_core.cpp +5 -14
  79. package/cpp/update_flow_core/update_flow_core.h +2 -2
  80. package/harmony/hvigor-plugin.ts +11 -19
  81. package/harmony/pushy/src/main/cpp/CMakeLists.txt +19 -26
  82. package/harmony/pushy/src/main/cpp/PushyPackage.h +2 -2
  83. package/harmony/pushy/src/main/cpp/PushyTurboModule.cpp +57 -94
  84. package/harmony/pushy/src/main/cpp/pushy.cpp +817 -518
  85. package/harmony/pushy/src/main/ets/ArchiveLimits.ts +55 -75
  86. package/harmony/pushy/src/main/ets/DownloadTask.ts +279 -539
  87. package/harmony/pushy/src/main/ets/DownloadTaskParams.ts +6 -6
  88. package/harmony/pushy/src/main/ets/ErrorCodes.ts +3 -15
  89. package/harmony/pushy/src/main/ets/EventHub.ts +1 -1
  90. package/harmony/pushy/src/main/ets/InstallRecord.ts +54 -151
  91. package/harmony/pushy/src/main/ets/Logger.ts +20 -34
  92. package/harmony/pushy/src/main/ets/NativePatchCore.ts +150 -41
  93. package/harmony/pushy/src/main/ets/PushyConfiguration.ts +8 -85
  94. package/harmony/pushy/src/main/ets/PushyFileJSBundleProvider.ets +8 -3
  95. package/harmony/pushy/src/main/ets/PushyTurboModule.ts +11 -25
  96. package/harmony/pushy/src/main/ets/SaveFile.ts +99 -18
  97. package/harmony/pushy/src/main/ets/SyncCoordinator.ts +291 -543
  98. package/harmony/pushy/src/main/ets/Texts.ts +8 -7
  99. package/harmony/pushy/src/main/ets/UpdateContext.ts +245 -152
  100. package/harmony/pushy.har +0 -0
  101. package/ios/RCTPushy/RCTPushy+Launch.mm +190 -0
  102. package/ios/RCTPushy/RCTPushy.h +12 -0
  103. package/ios/RCTPushy/RCTPushy.mm +135 -2666
  104. package/ios/RCTPushy/RCTPushyCommon.h +28 -0
  105. package/ios/RCTPushy/RCTPushyConfiguration.h +0 -8
  106. package/ios/RCTPushy/RCTPushyConfiguration.mm +40 -123
  107. package/ios/RCTPushy/RCTPushyDownloader.mm +152 -198
  108. package/ios/RCTPushy/RCTPushyInstallRecord.mm +101 -0
  109. package/ios/RCTPushy/RCTPushyInstaller.mm +732 -0
  110. package/ios/RCTPushy/RCTPushyInternal.h +185 -0
  111. package/ios/RCTPushy/RCTPushyOrchestrator.mm +969 -0
  112. package/ios/RCTPushy/RCTPushyState.mm +382 -0
  113. package/package.json +46 -25
  114. package/react-native-update.podspec +73 -82
  115. package/src/client.ts +126 -1633
  116. package/src/clientActivation.ts +324 -0
  117. package/src/clientCheck.ts +405 -0
  118. package/src/clientDownload.ts +448 -0
  119. package/src/clientNativeConfig.ts +171 -0
  120. package/src/clientReporter.ts +398 -0
  121. package/src/clientState.ts +51 -0
  122. package/src/context.ts +1 -1
  123. package/src/core.ts +39 -10
  124. package/src/endpoint.ts +22 -8
  125. package/src/error.ts +18 -35
  126. package/src/i18n.ts +18 -83
  127. package/src/locales/en.ts +1 -5
  128. package/src/locales/zh.ts +1 -5
  129. package/src/provider.tsx +86 -67
  130. package/src/telemetry.ts +0 -13
  131. package/src/type.ts +0 -15
  132. package/src/updateFlowCore.ts +116 -10
  133. package/src/utils.ts +49 -42
  134. package/android/jni/HDiffPatch/.travis.yml +0 -33
  135. package/android/jni/HDiffPatch/CHANGELOG.md +0 -153
  136. package/android/jni/HDiffPatch/Makefile +0 -157
  137. package/android/jni/HDiffPatch/_atosize.h +0 -83
  138. package/android/jni/HDiffPatch/_clock_for_demo.h +0 -47
  139. package/android/jni/HDiffPatch/_dir_ignore.h +0 -191
  140. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/Android.mk +0 -37
  141. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/Application.mk +0 -7
  142. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/build_libs.bat +0 -1
  143. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/build_libs.sh +0 -1
  144. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch.c +0 -18
  145. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch.h +0 -20
  146. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch_jni.c +0 -28
  147. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/java/com/github/sisong/HPatch.java +0 -8
  148. package/android/jni/HDiffPatch/builds/codeblocks/HDiffPatch.workspace +0 -8
  149. package/android/jni/HDiffPatch/builds/codeblocks/HDiffZ.cbp +0 -219
  150. package/android/jni/HDiffPatch/builds/codeblocks/HPatchZ.cbp +0 -156
  151. package/android/jni/HDiffPatch/builds/codeblocks/unitTest.cbp +0 -65
  152. package/android/jni/HDiffPatch/builds/vc/HDiffPatch.sln +0 -105
  153. package/android/jni/HDiffPatch/builds/vc/HDiffZ.vcxproj +0 -237
  154. package/android/jni/HDiffPatch/builds/vc/HDiffZ.vcxproj.user +0 -3
  155. package/android/jni/HDiffPatch/builds/vc/HPatchZ.vcxproj +0 -318
  156. package/android/jni/HDiffPatch/builds/vc/HPatchZ.vcxproj.user +0 -3
  157. package/android/jni/HDiffPatch/builds/vc/unitTest.vcxproj +0 -182
  158. package/android/jni/HDiffPatch/builds/vc/unitTest.vcxproj.user +0 -3
  159. package/android/jni/HDiffPatch/builds/xcode/HDiffPatch.xcworkspace/contents.xcworkspacedata +0 -30
  160. package/android/jni/HDiffPatch/builds/xcode/HDiffPatch.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  161. package/android/jni/HDiffPatch/builds/xcode/bestParams.xcodeproj/project.pbxproj +0 -408
  162. package/android/jni/HDiffPatch/builds/xcode/bestParams.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  163. package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.pbxproj +0 -573
  164. package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  165. package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  166. package/android/jni/HDiffPatch/builds/xcode/hpatchz.xcodeproj/project.pbxproj +0 -396
  167. package/android/jni/HDiffPatch/builds/xcode/hpatchz.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  168. package/android/jni/HDiffPatch/builds/xcode/lz4.xcodeproj/project.pbxproj +0 -268
  169. package/android/jni/HDiffPatch/builds/xcode/lz4.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  170. package/android/jni/HDiffPatch/builds/xcode/lzma.xcodeproj/project.pbxproj +0 -361
  171. package/android/jni/HDiffPatch/builds/xcode/lzma.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  172. package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.pbxproj +0 -301
  173. package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  174. package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  175. package/android/jni/HDiffPatch/builds/xcode/unitTest.xcodeproj/project.pbxproj +0 -411
  176. package/android/jni/HDiffPatch/builds/xcode/unitTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  177. package/android/jni/HDiffPatch/builds/xcode/zstd.xcodeproj/project.pbxproj +0 -504
  178. package/android/jni/HDiffPatch/builds/xcode/zstd.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  179. package/android/jni/HDiffPatch/checksum_plugin_demo.h +0 -344
  180. package/android/jni/HDiffPatch/compress_parallel.cpp +0 -166
  181. package/android/jni/HDiffPatch/compress_parallel.h +0 -59
  182. package/android/jni/HDiffPatch/compress_plugin_demo.h +0 -1152
  183. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff.cpp +0 -797
  184. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff.h +0 -65
  185. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff_tools.cpp +0 -200
  186. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff_tools.h +0 -178
  187. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_manifest.cpp +0 -357
  188. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_manifest.h +0 -87
  189. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/file_for_dirDiff.h +0 -151
  190. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch.c +0 -770
  191. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch.h +0 -236
  192. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_private.h +0 -47
  193. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_tools.c +0 -112
  194. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_tools.h +0 -53
  195. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_dir_output.c +0 -331
  196. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_dir_output.h +0 -144
  197. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_stream.c +0 -176
  198. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_stream.h +0 -84
  199. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/ref_stream.c +0 -146
  200. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/ref_stream.h +0 -61
  201. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/res_handle_limit.c +0 -152
  202. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/res_handle_limit.h +0 -76
  203. package/android/jni/HDiffPatch/hdiffz.cpp +0 -1570
  204. package/android/jni/HDiffPatch/hpatch_dir_listener.h +0 -290
  205. package/android/jni/HDiffPatch/hpatchz.c +0 -1221
  206. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff.cpp +0 -1025
  207. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff.h +0 -116
  208. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff_types.h +0 -72
  209. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/bytes_rle.cpp +0 -213
  210. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/bytes_rle.h +0 -63
  211. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/compress_detect.cpp +0 -170
  212. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/compress_detect.h +0 -86
  213. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/config.h +0 -89
  214. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.c +0 -13
  215. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.c.inc.h +0 -398
  216. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.h +0 -194
  217. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort64.c +0 -13
  218. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort64.h +0 -204
  219. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort_private.h +0 -207
  220. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/sssort.c.inc.h +0 -815
  221. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/trsort.c.inc.h +0 -586
  222. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/utils.c.inc.h +0 -381
  223. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/adler_roll.c +0 -352
  224. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/adler_roll.h +0 -137
  225. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/bloom_filter.h +0 -137
  226. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/covers.h +0 -70
  227. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/digest_matcher.cpp +0 -628
  228. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/digest_matcher.h +0 -87
  229. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/stream_serialize.cpp +0 -363
  230. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/stream_serialize.h +0 -139
  231. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/mem_buf.h +0 -68
  232. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/pack_uint.h +0 -115
  233. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/suffix_string.cpp +0 -342
  234. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/suffix_string.h +0 -94
  235. package/android/jni/HDiffPatch/libHDiffPatch/HPatch/checksum_plugin.h +0 -52
  236. package/android/jni/HDiffPatch/libParallel/parallel_channel.cpp +0 -174
  237. package/android/jni/HDiffPatch/libParallel/parallel_channel.h +0 -73
  238. package/android/jni/HDiffPatch/libParallel/parallel_import.cpp +0 -367
  239. package/android/jni/HDiffPatch/libParallel/parallel_import.h +0 -92
  240. package/android/jni/lzma/Asm/arm/7zCrcOpt.asm +0 -100
  241. package/android/jni/lzma/Asm/x86/7zAsm.asm +0 -147
  242. package/android/jni/lzma/Asm/x86/7zCrcOpt.asm +0 -147
  243. package/android/jni/lzma/Asm/x86/AesOpt.asm +0 -237
  244. package/android/jni/lzma/Asm/x86/LzmaDecOpt.asm +0 -1258
  245. package/android/jni/lzma/Asm/x86/XzCrc64Opt.asm +0 -205
  246. package/android/jni/lzma/C/7z.h +0 -202
  247. package/android/jni/lzma/C/7zAlloc.c +0 -80
  248. package/android/jni/lzma/C/7zAlloc.h +0 -19
  249. package/android/jni/lzma/C/7zArcIn.c +0 -1771
  250. package/android/jni/lzma/C/7zBuf.c +0 -36
  251. package/android/jni/lzma/C/7zBuf.h +0 -35
  252. package/android/jni/lzma/C/7zBuf2.c +0 -52
  253. package/android/jni/lzma/C/7zCrc.c +0 -128
  254. package/android/jni/lzma/C/7zCrc.h +0 -25
  255. package/android/jni/lzma/C/7zCrcOpt.c +0 -115
  256. package/android/jni/lzma/C/7zDec.c +0 -591
  257. package/android/jni/lzma/C/7zFile.c +0 -286
  258. package/android/jni/lzma/C/7zFile.h +0 -83
  259. package/android/jni/lzma/C/7zStream.c +0 -176
  260. package/android/jni/lzma/C/7zVersion.h +0 -27
  261. package/android/jni/lzma/C/7zVersion.rc +0 -55
  262. package/android/jni/lzma/C/Aes.c +0 -306
  263. package/android/jni/lzma/C/Aes.h +0 -38
  264. package/android/jni/lzma/C/AesOpt.c +0 -184
  265. package/android/jni/lzma/C/Alloc.c +0 -455
  266. package/android/jni/lzma/C/Alloc.h +0 -51
  267. package/android/jni/lzma/C/Bcj2.c +0 -257
  268. package/android/jni/lzma/C/Bcj2.h +0 -146
  269. package/android/jni/lzma/C/Bcj2Enc.c +0 -311
  270. package/android/jni/lzma/C/Bra.c +0 -230
  271. package/android/jni/lzma/C/Bra.h +0 -64
  272. package/android/jni/lzma/C/Bra86.c +0 -82
  273. package/android/jni/lzma/C/BraIA64.c +0 -53
  274. package/android/jni/lzma/C/CpuArch.c +0 -218
  275. package/android/jni/lzma/C/CpuArch.h +0 -336
  276. package/android/jni/lzma/C/Delta.c +0 -64
  277. package/android/jni/lzma/C/Delta.h +0 -19
  278. package/android/jni/lzma/C/DllSecur.c +0 -108
  279. package/android/jni/lzma/C/DllSecur.h +0 -20
  280. package/android/jni/lzma/C/LzFind.c +0 -1127
  281. package/android/jni/lzma/C/LzFind.h +0 -121
  282. package/android/jni/lzma/C/LzFindMt.c +0 -853
  283. package/android/jni/lzma/C/LzFindMt.h +0 -101
  284. package/android/jni/lzma/C/LzHash.h +0 -57
  285. package/android/jni/lzma/C/Lzma2DecMt.c +0 -1082
  286. package/android/jni/lzma/C/Lzma2DecMt.h +0 -79
  287. package/android/jni/lzma/C/Lzma2Enc.c +0 -803
  288. package/android/jni/lzma/C/Lzma2Enc.h +0 -55
  289. package/android/jni/lzma/C/Lzma86.h +0 -111
  290. package/android/jni/lzma/C/Lzma86Dec.c +0 -54
  291. package/android/jni/lzma/C/Lzma86Enc.c +0 -106
  292. package/android/jni/lzma/C/LzmaEnc.c +0 -2976
  293. package/android/jni/lzma/C/LzmaEnc.h +0 -76
  294. package/android/jni/lzma/C/LzmaLib.c +0 -40
  295. package/android/jni/lzma/C/LzmaLib.h +0 -131
  296. package/android/jni/lzma/C/MtCoder.c +0 -601
  297. package/android/jni/lzma/C/MtCoder.h +0 -141
  298. package/android/jni/lzma/C/MtDec.c +0 -1138
  299. package/android/jni/lzma/C/MtDec.h +0 -201
  300. package/android/jni/lzma/C/Ppmd.h +0 -85
  301. package/android/jni/lzma/C/Ppmd7.c +0 -712
  302. package/android/jni/lzma/C/Ppmd7.h +0 -142
  303. package/android/jni/lzma/C/Ppmd7Dec.c +0 -191
  304. package/android/jni/lzma/C/Ppmd7Enc.c +0 -187
  305. package/android/jni/lzma/C/RotateDefs.h +0 -30
  306. package/android/jni/lzma/C/Sha256.c +0 -248
  307. package/android/jni/lzma/C/Sha256.h +0 -26
  308. package/android/jni/lzma/C/Sort.c +0 -141
  309. package/android/jni/lzma/C/Sort.h +0 -18
  310. package/android/jni/lzma/C/Threads.c +0 -95
  311. package/android/jni/lzma/C/Threads.h +0 -70
  312. package/android/jni/lzma/C/ThreadsP.c +0 -396
  313. package/android/jni/lzma/C/ThreadsP.h +0 -31
  314. package/android/jni/lzma/C/Util/7z/7z.dsp +0 -241
  315. package/android/jni/lzma/C/Util/7z/7z.dsw +0 -29
  316. package/android/jni/lzma/C/Util/7z/7zMain.c +0 -686
  317. package/android/jni/lzma/C/Util/7z/Precomp.c +0 -4
  318. package/android/jni/lzma/C/Util/7z/Precomp.h +0 -10
  319. package/android/jni/lzma/C/Util/7z/makefile +0 -40
  320. package/android/jni/lzma/C/Util/7z/makefile.gcc +0 -75
  321. package/android/jni/lzma/C/Util/Lzma/LzmaUtil.c +0 -258
  322. package/android/jni/lzma/C/Util/Lzma/LzmaUtil.dsp +0 -168
  323. package/android/jni/lzma/C/Util/Lzma/LzmaUtil.dsw +0 -29
  324. package/android/jni/lzma/C/Util/Lzma/makefile +0 -28
  325. package/android/jni/lzma/C/Util/Lzma/makefile.gcc +0 -44
  326. package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.def +0 -4
  327. package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.dsp +0 -178
  328. package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.dsw +0 -29
  329. package/android/jni/lzma/C/Util/LzmaLib/LzmaLibExports.c +0 -14
  330. package/android/jni/lzma/C/Util/LzmaLib/makefile +0 -34
  331. package/android/jni/lzma/C/Util/LzmaLib/resource.rc +0 -3
  332. package/android/jni/lzma/C/Util/SfxSetup/Precomp.c +0 -4
  333. package/android/jni/lzma/C/Util/SfxSetup/Precomp.h +0 -10
  334. package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.c +0 -640
  335. package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.dsp +0 -231
  336. package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.dsw +0 -29
  337. package/android/jni/lzma/C/Util/SfxSetup/makefile +0 -37
  338. package/android/jni/lzma/C/Util/SfxSetup/makefile_con +0 -38
  339. package/android/jni/lzma/C/Util/SfxSetup/resource.rc +0 -5
  340. package/android/jni/lzma/C/Util/SfxSetup/setup.ico +0 -0
  341. package/android/jni/lzma/C/Xz.c +0 -90
  342. package/android/jni/lzma/C/Xz.h +0 -460
  343. package/android/jni/lzma/C/XzCrc64.c +0 -86
  344. package/android/jni/lzma/C/XzCrc64.h +0 -26
  345. package/android/jni/lzma/C/XzCrc64Opt.c +0 -69
  346. package/android/jni/lzma/C/XzDec.c +0 -2766
  347. package/android/jni/lzma/C/XzEnc.c +0 -1329
  348. package/android/jni/lzma/C/XzEnc.h +0 -60
  349. package/android/jni/lzma/C/XzIn.c +0 -319
  350. package/android/jni/lzma/CPP/7zip/7zip.mak +0 -240
  351. package/android/jni/lzma/CPP/7zip/Aes.mak +0 -7
  352. package/android/jni/lzma/CPP/7zip/Archive/7z/7zCompressionMode.cpp +0 -3
  353. package/android/jni/lzma/CPP/7zip/Archive/7z/7zCompressionMode.h +0 -76
  354. package/android/jni/lzma/CPP/7zip/Archive/7z/7zDecode.cpp +0 -569
  355. package/android/jni/lzma/CPP/7zip/Archive/7z/7zDecode.h +0 -70
  356. package/android/jni/lzma/CPP/7zip/Archive/7z/7zEncode.cpp +0 -678
  357. package/android/jni/lzma/CPP/7zip/Archive/7z/7zEncode.h +0 -92
  358. package/android/jni/lzma/CPP/7zip/Archive/7z/7zExtract.cpp +0 -423
  359. package/android/jni/lzma/CPP/7zip/Archive/7z/7zFolderInStream.cpp +0 -139
  360. package/android/jni/lzma/CPP/7zip/Archive/7z/7zFolderInStream.h +0 -61
  361. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandler.cpp +0 -763
  362. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandler.h +0 -181
  363. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandlerOut.cpp +0 -942
  364. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHeader.cpp +0 -19
  365. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHeader.h +0 -148
  366. package/android/jni/lzma/CPP/7zip/Archive/7z/7zIn.cpp +0 -1666
  367. package/android/jni/lzma/CPP/7zip/Archive/7z/7zIn.h +0 -445
  368. package/android/jni/lzma/CPP/7zip/Archive/7z/7zItem.h +0 -202
  369. package/android/jni/lzma/CPP/7zip/Archive/7z/7zOut.cpp +0 -901
  370. package/android/jni/lzma/CPP/7zip/Archive/7z/7zOut.h +0 -335
  371. package/android/jni/lzma/CPP/7zip/Archive/7z/7zProperties.cpp +0 -174
  372. package/android/jni/lzma/CPP/7zip/Archive/7z/7zProperties.h +0 -22
  373. package/android/jni/lzma/CPP/7zip/Archive/7z/7zRegister.cpp +0 -21
  374. package/android/jni/lzma/CPP/7zip/Archive/7z/7zSpecStream.cpp +0 -22
  375. package/android/jni/lzma/CPP/7zip/Archive/7z/7zSpecStream.h +0 -35
  376. package/android/jni/lzma/CPP/7zip/Archive/7z/7zUpdate.cpp +0 -2500
  377. package/android/jni/lzma/CPP/7zip/Archive/7z/7zUpdate.h +0 -139
  378. package/android/jni/lzma/CPP/7zip/Archive/7z/StdAfx.cpp +0 -3
  379. package/android/jni/lzma/CPP/7zip/Archive/7z/StdAfx.h +0 -8
  380. package/android/jni/lzma/CPP/7zip/Archive/Archive.def +0 -12
  381. package/android/jni/lzma/CPP/7zip/Archive/Archive2.def +0 -19
  382. package/android/jni/lzma/CPP/7zip/Archive/ArchiveExports.cpp +0 -151
  383. package/android/jni/lzma/CPP/7zip/Archive/Common/CoderMixer2.cpp +0 -1125
  384. package/android/jni/lzma/CPP/7zip/Archive/Common/CoderMixer2.h +0 -447
  385. package/android/jni/lzma/CPP/7zip/Archive/Common/DummyOutStream.cpp +0 -17
  386. package/android/jni/lzma/CPP/7zip/Archive/Common/DummyOutStream.h +0 -25
  387. package/android/jni/lzma/CPP/7zip/Archive/Common/HandlerOut.cpp +0 -232
  388. package/android/jni/lzma/CPP/7zip/Archive/Common/HandlerOut.h +0 -110
  389. package/android/jni/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.cpp +0 -46
  390. package/android/jni/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.h +0 -67
  391. package/android/jni/lzma/CPP/7zip/Archive/Common/ItemNameUtils.cpp +0 -88
  392. package/android/jni/lzma/CPP/7zip/Archive/Common/ItemNameUtils.h +0 -28
  393. package/android/jni/lzma/CPP/7zip/Archive/Common/MultiStream.cpp +0 -191
  394. package/android/jni/lzma/CPP/7zip/Archive/Common/MultiStream.h +0 -89
  395. package/android/jni/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp +0 -18
  396. package/android/jni/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.h +0 -37
  397. package/android/jni/lzma/CPP/7zip/Archive/Common/ParseProperties.cpp +0 -3
  398. package/android/jni/lzma/CPP/7zip/Archive/Common/ParseProperties.h +0 -6
  399. package/android/jni/lzma/CPP/7zip/Archive/Common/StdAfx.h +0 -8
  400. package/android/jni/lzma/CPP/7zip/Archive/DllExports2.cpp +0 -122
  401. package/android/jni/lzma/CPP/7zip/Archive/IArchive.h +0 -608
  402. package/android/jni/lzma/CPP/7zip/Archive/Icons/7z.ico +0 -0
  403. package/android/jni/lzma/CPP/7zip/Archive/LzmaHandler.cpp +0 -629
  404. package/android/jni/lzma/CPP/7zip/Archive/SplitHandler.cpp +0 -359
  405. package/android/jni/lzma/CPP/7zip/Archive/StdAfx.h +0 -8
  406. package/android/jni/lzma/CPP/7zip/Archive/XzHandler.cpp +0 -1308
  407. package/android/jni/lzma/CPP/7zip/Archive/XzHandler.h +0 -11
  408. package/android/jni/lzma/CPP/7zip/Asm.mak +0 -9
  409. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsp +0 -1910
  410. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsw +0 -29
  411. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.cpp +0 -3
  412. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.h +0 -8
  413. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/makefile +0 -154
  414. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/resource.rc +0 -7
  415. package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.cpp +0 -3
  416. package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.h +0 -8
  417. package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/makefile +0 -96
  418. package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/resource.rc +0 -5
  419. package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.cpp +0 -3
  420. package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.h +0 -8
  421. package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/makefile +0 -116
  422. package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/resource.rc +0 -5
  423. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaAlone.cpp +0 -799
  424. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaCon.dsp +0 -477
  425. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaCon.dsw +0 -29
  426. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/StdAfx.cpp +0 -3
  427. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/StdAfx.h +0 -8
  428. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/makefile +0 -59
  429. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/makefile.gcc +0 -195
  430. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/resource.rc +0 -3
  431. package/android/jni/lzma/CPP/7zip/Bundles/LzmaSpec/LzmaSpec.cpp +0 -715
  432. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/7z.ico +0 -0
  433. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SFXCon.dsp +0 -912
  434. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SFXCon.dsw +0 -29
  435. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SfxCon.cpp +0 -482
  436. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/StdAfx.cpp +0 -3
  437. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/StdAfx.h +0 -8
  438. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/makefile +0 -134
  439. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/resource.rc +0 -5
  440. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.cpp +0 -246
  441. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.h +0 -86
  442. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.cpp +0 -137
  443. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.h +0 -11
  444. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SFXSetup.dsp +0 -803
  445. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SFXSetup.dsw +0 -29
  446. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SfxSetup.cpp +0 -364
  447. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/StdAfx.cpp +0 -3
  448. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/StdAfx.h +0 -13
  449. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/makefile +0 -117
  450. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/resource.h +0 -6
  451. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/resource.rc +0 -16
  452. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/setup.ico +0 -0
  453. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/7z.ico +0 -0
  454. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SFXWin.dsp +0 -988
  455. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SFXWin.dsw +0 -29
  456. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SfxWin.cpp +0 -241
  457. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/StdAfx.cpp +0 -3
  458. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/StdAfx.h +0 -14
  459. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/makefile +0 -153
  460. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/resource.h +0 -1
  461. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/resource.rc +0 -50
  462. package/android/jni/lzma/CPP/7zip/Common/CWrappers.cpp +0 -250
  463. package/android/jni/lzma/CPP/7zip/Common/CWrappers.h +0 -120
  464. package/android/jni/lzma/CPP/7zip/Common/CreateCoder.cpp +0 -536
  465. package/android/jni/lzma/CPP/7zip/Common/CreateCoder.h +0 -192
  466. package/android/jni/lzma/CPP/7zip/Common/FilePathAutoRename.cpp +0 -46
  467. package/android/jni/lzma/CPP/7zip/Common/FilePathAutoRename.h +0 -10
  468. package/android/jni/lzma/CPP/7zip/Common/FileStreams.cpp +0 -475
  469. package/android/jni/lzma/CPP/7zip/Common/FileStreams.h +0 -166
  470. package/android/jni/lzma/CPP/7zip/Common/FilterCoder.cpp +0 -435
  471. package/android/jni/lzma/CPP/7zip/Common/FilterCoder.h +0 -205
  472. package/android/jni/lzma/CPP/7zip/Common/InBuffer.cpp +0 -163
  473. package/android/jni/lzma/CPP/7zip/Common/InBuffer.h +0 -92
  474. package/android/jni/lzma/CPP/7zip/Common/InOutTempBuffer.cpp +0 -127
  475. package/android/jni/lzma/CPP/7zip/Common/InOutTempBuffer.h +0 -48
  476. package/android/jni/lzma/CPP/7zip/Common/LimitedStreams.cpp +0 -367
  477. package/android/jni/lzma/CPP/7zip/Common/LimitedStreams.h +0 -252
  478. package/android/jni/lzma/CPP/7zip/Common/LockedStream.cpp +0 -3
  479. package/android/jni/lzma/CPP/7zip/Common/LockedStream.h +0 -6
  480. package/android/jni/lzma/CPP/7zip/Common/MethodId.cpp +0 -3
  481. package/android/jni/lzma/CPP/7zip/Common/MethodId.h +0 -10
  482. package/android/jni/lzma/CPP/7zip/Common/MethodProps.cpp +0 -509
  483. package/android/jni/lzma/CPP/7zip/Common/MethodProps.h +0 -264
  484. package/android/jni/lzma/CPP/7zip/Common/OffsetStream.cpp +0 -39
  485. package/android/jni/lzma/CPP/7zip/Common/OffsetStream.h +0 -26
  486. package/android/jni/lzma/CPP/7zip/Common/OutBuffer.cpp +0 -111
  487. package/android/jni/lzma/CPP/7zip/Common/OutBuffer.h +0 -66
  488. package/android/jni/lzma/CPP/7zip/Common/ProgressUtils.cpp +0 -51
  489. package/android/jni/lzma/CPP/7zip/Common/ProgressUtils.h +0 -35
  490. package/android/jni/lzma/CPP/7zip/Common/PropId.cpp +0 -108
  491. package/android/jni/lzma/CPP/7zip/Common/RegisterArc.h +0 -78
  492. package/android/jni/lzma/CPP/7zip/Common/RegisterCodec.h +0 -106
  493. package/android/jni/lzma/CPP/7zip/Common/StdAfx.h +0 -8
  494. package/android/jni/lzma/CPP/7zip/Common/StreamBinder.cpp +0 -156
  495. package/android/jni/lzma/CPP/7zip/Common/StreamBinder.h +0 -60
  496. package/android/jni/lzma/CPP/7zip/Common/StreamObjects.cpp +0 -285
  497. package/android/jni/lzma/CPP/7zip/Common/StreamObjects.h +0 -157
  498. package/android/jni/lzma/CPP/7zip/Common/StreamUtils.cpp +0 -56
  499. package/android/jni/lzma/CPP/7zip/Common/StreamUtils.h +0 -13
  500. package/android/jni/lzma/CPP/7zip/Common/UniqBlocks.cpp +0 -57
  501. package/android/jni/lzma/CPP/7zip/Common/UniqBlocks.h +0 -26
  502. package/android/jni/lzma/CPP/7zip/Common/VirtThread.cpp +0 -48
  503. package/android/jni/lzma/CPP/7zip/Common/VirtThread.h +0 -24
  504. package/android/jni/lzma/CPP/7zip/Compress/Bcj2Coder.cpp +0 -666
  505. package/android/jni/lzma/CPP/7zip/Compress/Bcj2Coder.h +0 -120
  506. package/android/jni/lzma/CPP/7zip/Compress/Bcj2Register.cpp +0 -24
  507. package/android/jni/lzma/CPP/7zip/Compress/BcjCoder.cpp +0 -24
  508. package/android/jni/lzma/CPP/7zip/Compress/BcjCoder.h +0 -31
  509. package/android/jni/lzma/CPP/7zip/Compress/BcjRegister.cpp +0 -17
  510. package/android/jni/lzma/CPP/7zip/Compress/BranchMisc.cpp +0 -23
  511. package/android/jni/lzma/CPP/7zip/Compress/BranchMisc.h +0 -35
  512. package/android/jni/lzma/CPP/7zip/Compress/BranchRegister.cpp +0 -41
  513. package/android/jni/lzma/CPP/7zip/Compress/ByteSwap.cpp +0 -92
  514. package/android/jni/lzma/CPP/7zip/Compress/CodecExports.cpp +0 -344
  515. package/android/jni/lzma/CPP/7zip/Compress/CopyCoder.cpp +0 -120
  516. package/android/jni/lzma/CPP/7zip/Compress/CopyCoder.h +0 -49
  517. package/android/jni/lzma/CPP/7zip/Compress/CopyRegister.cpp +0 -15
  518. package/android/jni/lzma/CPP/7zip/Compress/DeltaFilter.cpp +0 -128
  519. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Decoder.cpp +0 -265
  520. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Decoder.h +0 -96
  521. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Encoder.cpp +0 -122
  522. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Encoder.h +0 -42
  523. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Register.cpp +0 -22
  524. package/android/jni/lzma/CPP/7zip/Compress/LzmaDecoder.cpp +0 -343
  525. package/android/jni/lzma/CPP/7zip/Compress/LzmaDecoder.h +0 -113
  526. package/android/jni/lzma/CPP/7zip/Compress/LzmaEncoder.cpp +0 -182
  527. package/android/jni/lzma/CPP/7zip/Compress/LzmaEncoder.h +0 -46
  528. package/android/jni/lzma/CPP/7zip/Compress/LzmaRegister.cpp +0 -22
  529. package/android/jni/lzma/CPP/7zip/Compress/PpmdDecoder.cpp +0 -170
  530. package/android/jni/lzma/CPP/7zip/Compress/PpmdDecoder.h +0 -86
  531. package/android/jni/lzma/CPP/7zip/Compress/PpmdEncoder.cpp +0 -152
  532. package/android/jni/lzma/CPP/7zip/Compress/PpmdEncoder.h +0 -58
  533. package/android/jni/lzma/CPP/7zip/Compress/PpmdRegister.cpp +0 -22
  534. package/android/jni/lzma/CPP/7zip/Compress/StdAfx.h +0 -8
  535. package/android/jni/lzma/CPP/7zip/Compress/XzDecoder.cpp +0 -150
  536. package/android/jni/lzma/CPP/7zip/Compress/XzDecoder.h +0 -92
  537. package/android/jni/lzma/CPP/7zip/Compress/XzEncoder.cpp +0 -245
  538. package/android/jni/lzma/CPP/7zip/Compress/XzEncoder.h +0 -46
  539. package/android/jni/lzma/CPP/7zip/Crc.mak +0 -8
  540. package/android/jni/lzma/CPP/7zip/Crc64.mak +0 -8
  541. package/android/jni/lzma/CPP/7zip/Crypto/7zAes.cpp +0 -280
  542. package/android/jni/lzma/CPP/7zip/Crypto/7zAes.h +0 -118
  543. package/android/jni/lzma/CPP/7zip/Crypto/7zAesRegister.cpp +0 -17
  544. package/android/jni/lzma/CPP/7zip/Crypto/MyAes.cpp +0 -112
  545. package/android/jni/lzma/CPP/7zip/Crypto/MyAes.h +0 -57
  546. package/android/jni/lzma/CPP/7zip/Crypto/MyAesReg.cpp +0 -16
  547. package/android/jni/lzma/CPP/7zip/Crypto/RandGen.cpp +0 -233
  548. package/android/jni/lzma/CPP/7zip/Crypto/RandGen.h +0 -40
  549. package/android/jni/lzma/CPP/7zip/Crypto/StdAfx.h +0 -8
  550. package/android/jni/lzma/CPP/7zip/GuiCommon.rc +0 -84
  551. package/android/jni/lzma/CPP/7zip/Guid.txt +0 -220
  552. package/android/jni/lzma/CPP/7zip/ICoder.h +0 -399
  553. package/android/jni/lzma/CPP/7zip/IDecl.h +0 -28
  554. package/android/jni/lzma/CPP/7zip/IPassword.h +0 -23
  555. package/android/jni/lzma/CPP/7zip/IProgress.h +0 -19
  556. package/android/jni/lzma/CPP/7zip/IStream.h +0 -127
  557. package/android/jni/lzma/CPP/7zip/LzmaDec.mak +0 -5
  558. package/android/jni/lzma/CPP/7zip/MyVersion.h +0 -2
  559. package/android/jni/lzma/CPP/7zip/MyVersionInfo.rc +0 -2
  560. package/android/jni/lzma/CPP/7zip/PropID.h +0 -127
  561. package/android/jni/lzma/CPP/7zip/SubBuild.mak +0 -3
  562. package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.cpp +0 -993
  563. package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.dsp +0 -235
  564. package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.dsw +0 -29
  565. package/android/jni/lzma/CPP/7zip/UI/Client7z/StdAfx.cpp +0 -3
  566. package/android/jni/lzma/CPP/7zip/UI/Client7z/StdAfx.h +0 -8
  567. package/android/jni/lzma/CPP/7zip/UI/Client7z/makefile +0 -28
  568. package/android/jni/lzma/CPP/7zip/UI/Client7z/resource.rc +0 -3
  569. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.cpp +0 -1295
  570. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.h +0 -136
  571. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.cpp +0 -1715
  572. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.h +0 -403
  573. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveName.cpp +0 -155
  574. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveName.h +0 -10
  575. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.cpp +0 -161
  576. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.h +0 -112
  577. package/android/jni/lzma/CPP/7zip/UI/Common/Bench.cpp +0 -3618
  578. package/android/jni/lzma/CPP/7zip/UI/Common/Bench.h +0 -77
  579. package/android/jni/lzma/CPP/7zip/UI/Common/DefaultName.cpp +0 -37
  580. package/android/jni/lzma/CPP/7zip/UI/Common/DefaultName.h +0 -11
  581. package/android/jni/lzma/CPP/7zip/UI/Common/DirItem.h +0 -190
  582. package/android/jni/lzma/CPP/7zip/UI/Common/EnumDirItems.cpp +0 -1096
  583. package/android/jni/lzma/CPP/7zip/UI/Common/EnumDirItems.h +0 -42
  584. package/android/jni/lzma/CPP/7zip/UI/Common/ExitCode.h +0 -27
  585. package/android/jni/lzma/CPP/7zip/UI/Common/Extract.cpp +0 -482
  586. package/android/jni/lzma/CPP/7zip/UI/Common/Extract.h +0 -94
  587. package/android/jni/lzma/CPP/7zip/UI/Common/ExtractMode.h +0 -34
  588. package/android/jni/lzma/CPP/7zip/UI/Common/ExtractingFilePath.cpp +0 -280
  589. package/android/jni/lzma/CPP/7zip/UI/Common/ExtractingFilePath.h +0 -31
  590. package/android/jni/lzma/CPP/7zip/UI/Common/HashCalc.cpp +0 -347
  591. package/android/jni/lzma/CPP/7zip/UI/Common/HashCalc.h +0 -110
  592. package/android/jni/lzma/CPP/7zip/UI/Common/IFileExtractCallback.h +0 -114
  593. package/android/jni/lzma/CPP/7zip/UI/Common/LoadCodecs.cpp +0 -1074
  594. package/android/jni/lzma/CPP/7zip/UI/Common/LoadCodecs.h +0 -424
  595. package/android/jni/lzma/CPP/7zip/UI/Common/OpenArchive.cpp +0 -3553
  596. package/android/jni/lzma/CPP/7zip/UI/Common/OpenArchive.h +0 -436
  597. package/android/jni/lzma/CPP/7zip/UI/Common/PropIDUtils.cpp +0 -668
  598. package/android/jni/lzma/CPP/7zip/UI/Common/PropIDUtils.h +0 -18
  599. package/android/jni/lzma/CPP/7zip/UI/Common/Property.h +0 -14
  600. package/android/jni/lzma/CPP/7zip/UI/Common/SetProperties.cpp +0 -80
  601. package/android/jni/lzma/CPP/7zip/UI/Common/SetProperties.h +0 -10
  602. package/android/jni/lzma/CPP/7zip/UI/Common/SortUtils.cpp +0 -25
  603. package/android/jni/lzma/CPP/7zip/UI/Common/SortUtils.h +0 -10
  604. package/android/jni/lzma/CPP/7zip/UI/Common/StdAfx.h +0 -8
  605. package/android/jni/lzma/CPP/7zip/UI/Common/TempFiles.cpp +0 -19
  606. package/android/jni/lzma/CPP/7zip/UI/Common/TempFiles.h +0 -16
  607. package/android/jni/lzma/CPP/7zip/UI/Common/Update.cpp +0 -1704
  608. package/android/jni/lzma/CPP/7zip/UI/Common/Update.h +0 -200
  609. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateAction.cpp +0 -64
  610. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateAction.h +0 -66
  611. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateCallback.cpp +0 -771
  612. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateCallback.h +0 -162
  613. package/android/jni/lzma/CPP/7zip/UI/Common/UpdatePair.cpp +0 -233
  614. package/android/jni/lzma/CPP/7zip/UI/Common/UpdatePair.h +0 -27
  615. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateProduce.cpp +0 -70
  616. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateProduce.h +0 -55
  617. package/android/jni/lzma/CPP/7zip/UI/Common/WorkDir.cpp +0 -94
  618. package/android/jni/lzma/CPP/7zip/UI/Common/WorkDir.h +0 -26
  619. package/android/jni/lzma/CPP/7zip/UI/Common/ZipRegistry.h +0 -130
  620. package/android/jni/lzma/CPP/7zip/UI/Console/BenchCon.cpp +0 -41
  621. package/android/jni/lzma/CPP/7zip/UI/Console/BenchCon.h +0 -14
  622. package/android/jni/lzma/CPP/7zip/UI/Console/Console.mak +0 -43
  623. package/android/jni/lzma/CPP/7zip/UI/Console/Console.manifest +0 -13
  624. package/android/jni/lzma/CPP/7zip/UI/Console/ConsoleClose.cpp +0 -69
  625. package/android/jni/lzma/CPP/7zip/UI/Console/ConsoleClose.h +0 -33
  626. package/android/jni/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp +0 -825
  627. package/android/jni/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.h +0 -164
  628. package/android/jni/lzma/CPP/7zip/UI/Console/HashCon.cpp +0 -367
  629. package/android/jni/lzma/CPP/7zip/UI/Console/HashCon.h +0 -48
  630. package/android/jni/lzma/CPP/7zip/UI/Console/List.cpp +0 -1359
  631. package/android/jni/lzma/CPP/7zip/UI/Console/List.h +0 -27
  632. package/android/jni/lzma/CPP/7zip/UI/Console/Main.cpp +0 -1154
  633. package/android/jni/lzma/CPP/7zip/UI/Console/MainAr.cpp +0 -175
  634. package/android/jni/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.cpp +0 -115
  635. package/android/jni/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.h +0 -66
  636. package/android/jni/lzma/CPP/7zip/UI/Console/PercentPrinter.cpp +0 -183
  637. package/android/jni/lzma/CPP/7zip/UI/Console/PercentPrinter.h +0 -62
  638. package/android/jni/lzma/CPP/7zip/UI/Console/StdAfx.cpp +0 -3
  639. package/android/jni/lzma/CPP/7zip/UI/Console/StdAfx.h +0 -8
  640. package/android/jni/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.cpp +0 -702
  641. package/android/jni/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.h +0 -124
  642. package/android/jni/lzma/CPP/7zip/UI/Console/UserInputUtils.cpp +0 -110
  643. package/android/jni/lzma/CPP/7zip/UI/Console/UserInputUtils.h +0 -27
  644. package/android/jni/lzma/CPP/7zip/UI/Console/makefile +0 -64
  645. package/android/jni/lzma/CPP/7zip/UI/Console/resource.rc +0 -7
  646. package/android/jni/lzma/CPP/7zip/UI/Explorer/MyMessages.cpp +0 -37
  647. package/android/jni/lzma/CPP/7zip/UI/Explorer/MyMessages.h +0 -16
  648. package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialog.cpp +0 -1025
  649. package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialog.h +0 -21
  650. package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialogRes.h +0 -9
  651. package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialog.cpp +0 -64
  652. package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialog.h +0 -28
  653. package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialogRes.h +0 -4
  654. package/android/jni/lzma/CPP/7zip/UI/FileManager/DialogSize.h +0 -16
  655. package/android/jni/lzma/CPP/7zip/UI/FileManager/ExtractCallback.cpp +0 -1037
  656. package/android/jni/lzma/CPP/7zip/UI/FileManager/ExtractCallback.h +0 -328
  657. package/android/jni/lzma/CPP/7zip/UI/FileManager/FormatUtils.cpp +0 -28
  658. package/android/jni/lzma/CPP/7zip/UI/FileManager/FormatUtils.h +0 -14
  659. package/android/jni/lzma/CPP/7zip/UI/FileManager/LangUtils.h +0 -40
  660. package/android/jni/lzma/CPP/7zip/UI/FileManager/MyWindowsNew.h +0 -76
  661. package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.cpp +0 -122
  662. package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.h +0 -69
  663. package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.rc +0 -91
  664. package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialogRes.h +0 -17
  665. package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.cpp +0 -58
  666. package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.h +0 -28
  667. package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.rc +0 -14
  668. package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialogRes.h +0 -5
  669. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.cpp +0 -196
  670. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.h +0 -170
  671. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.rc +0 -12
  672. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.cpp +0 -1337
  673. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.h +0 -351
  674. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.rc +0 -40
  675. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2Res.h +0 -48
  676. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2a.rc +0 -80
  677. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialogRes.h +0 -3
  678. package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyName.cpp +0 -23
  679. package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyName.h +0 -10
  680. package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyNameRes.h +0 -95
  681. package/android/jni/lzma/CPP/7zip/UI/FileManager/SysIconUtils.cpp +0 -255
  682. package/android/jni/lzma/CPP/7zip/UI/FileManager/SysIconUtils.h +0 -62
  683. package/android/jni/lzma/CPP/7zip/UI/FileManager/resource.h +0 -177
  684. package/android/jni/lzma/CPP/7zip/UI/FileManager/resourceGui.h +0 -15
  685. package/android/jni/lzma/CPP/7zip/UI/GUI/Extract.rc +0 -59
  686. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.cpp +0 -418
  687. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.h +0 -113
  688. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.rc +0 -98
  689. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialogRes.h +0 -24
  690. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractGUI.cpp +0 -280
  691. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractGUI.h +0 -38
  692. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractRes.h +0 -51
  693. package/android/jni/lzma/CPP/7zip/UI/GUI/HashGUI.h +0 -27
  694. package/android/jni/lzma/CPP/7zip/UI/GUI/resource2.h +0 -2
  695. package/android/jni/lzma/CPP/Build.mak +0 -156
  696. package/android/jni/lzma/CPP/Common/AutoPtr.h +0 -35
  697. package/android/jni/lzma/CPP/Common/CRC.cpp +0 -7
  698. package/android/jni/lzma/CPP/Common/C_FileIO.cpp +0 -92
  699. package/android/jni/lzma/CPP/Common/C_FileIO.h +0 -53
  700. package/android/jni/lzma/CPP/Common/ComTry.h +0 -21
  701. package/android/jni/lzma/CPP/Common/CommandLineParser.cpp +0 -197
  702. package/android/jni/lzma/CPP/Common/CommandLineParser.h +0 -63
  703. package/android/jni/lzma/CPP/Common/Common.h +0 -43
  704. package/android/jni/lzma/CPP/Common/CrcReg.cpp +0 -98
  705. package/android/jni/lzma/CPP/Common/Defs.h +0 -15
  706. package/android/jni/lzma/CPP/Common/DynamicBuffer.h +0 -64
  707. package/android/jni/lzma/CPP/Common/IntToString.cpp +0 -193
  708. package/android/jni/lzma/CPP/Common/IntToString.h +0 -28
  709. package/android/jni/lzma/CPP/Common/Lang.h +0 -23
  710. package/android/jni/lzma/CPP/Common/ListFileUtils.cpp +0 -132
  711. package/android/jni/lzma/CPP/Common/ListFileUtils.h +0 -18
  712. package/android/jni/lzma/CPP/Common/MyBuffer.h +0 -259
  713. package/android/jni/lzma/CPP/Common/MyBuffer2.h +0 -100
  714. package/android/jni/lzma/CPP/Common/MyCom.h +0 -277
  715. package/android/jni/lzma/CPP/Common/MyException.h +0 -14
  716. package/android/jni/lzma/CPP/Common/MyGuidDef.h +0 -54
  717. package/android/jni/lzma/CPP/Common/MyInitGuid.h +0 -45
  718. package/android/jni/lzma/CPP/Common/MyLinux.h +0 -42
  719. package/android/jni/lzma/CPP/Common/MyString.cpp +0 -1659
  720. package/android/jni/lzma/CPP/Common/MyString.h +0 -868
  721. package/android/jni/lzma/CPP/Common/MyTypes.h +0 -35
  722. package/android/jni/lzma/CPP/Common/MyUnknown.h +0 -17
  723. package/android/jni/lzma/CPP/Common/MyVector.cpp +0 -3
  724. package/android/jni/lzma/CPP/Common/MyVector.h +0 -634
  725. package/android/jni/lzma/CPP/Common/MyWindows.cpp +0 -145
  726. package/android/jni/lzma/CPP/Common/MyWindows.h +0 -231
  727. package/android/jni/lzma/CPP/Common/NewHandler.cpp +0 -163
  728. package/android/jni/lzma/CPP/Common/NewHandler.h +0 -88
  729. package/android/jni/lzma/CPP/Common/Sha256Reg.cpp +0 -40
  730. package/android/jni/lzma/CPP/Common/StdAfx.h +0 -8
  731. package/android/jni/lzma/CPP/Common/StdInStream.cpp +0 -89
  732. package/android/jni/lzma/CPP/Common/StdInStream.h +0 -38
  733. package/android/jni/lzma/CPP/Common/StdOutStream.cpp +0 -163
  734. package/android/jni/lzma/CPP/Common/StdOutStream.h +0 -71
  735. package/android/jni/lzma/CPP/Common/StringConvert.cpp +0 -319
  736. package/android/jni/lzma/CPP/Common/StringConvert.h +0 -88
  737. package/android/jni/lzma/CPP/Common/StringToInt.cpp +0 -144
  738. package/android/jni/lzma/CPP/Common/StringToInt.h +0 -21
  739. package/android/jni/lzma/CPP/Common/TextConfig.cpp +0 -124
  740. package/android/jni/lzma/CPP/Common/TextConfig.h +0 -19
  741. package/android/jni/lzma/CPP/Common/UTFConvert.cpp +0 -288
  742. package/android/jni/lzma/CPP/Common/UTFConvert.h +0 -12
  743. package/android/jni/lzma/CPP/Common/Wildcard.cpp +0 -676
  744. package/android/jni/lzma/CPP/Common/Wildcard.h +0 -149
  745. package/android/jni/lzma/CPP/Common/XzCrc64Init.cpp +0 -7
  746. package/android/jni/lzma/CPP/Common/XzCrc64Reg.cpp +0 -42
  747. package/android/jni/lzma/CPP/Windows/COM.h +0 -70
  748. package/android/jni/lzma/CPP/Windows/CommonDialog.cpp +0 -185
  749. package/android/jni/lzma/CPP/Windows/CommonDialog.h +0 -23
  750. package/android/jni/lzma/CPP/Windows/Control/ComboBox.cpp +0 -66
  751. package/android/jni/lzma/CPP/Windows/Control/ComboBox.h +0 -65
  752. package/android/jni/lzma/CPP/Windows/Control/CommandBar.h +0 -52
  753. package/android/jni/lzma/CPP/Windows/Control/Dialog.cpp +0 -251
  754. package/android/jni/lzma/CPP/Windows/Control/Dialog.h +0 -170
  755. package/android/jni/lzma/CPP/Windows/Control/Edit.h +0 -19
  756. package/android/jni/lzma/CPP/Windows/Control/ImageList.cpp +0 -10
  757. package/android/jni/lzma/CPP/Windows/Control/ImageList.h +0 -87
  758. package/android/jni/lzma/CPP/Windows/Control/ListView.cpp +0 -155
  759. package/android/jni/lzma/CPP/Windows/Control/ListView.h +0 -146
  760. package/android/jni/lzma/CPP/Windows/Control/ProgressBar.h +0 -35
  761. package/android/jni/lzma/CPP/Windows/Control/PropertyPage.cpp +0 -143
  762. package/android/jni/lzma/CPP/Windows/Control/PropertyPage.h +0 -50
  763. package/android/jni/lzma/CPP/Windows/Control/ReBar.h +0 -34
  764. package/android/jni/lzma/CPP/Windows/Control/Static.h +0 -28
  765. package/android/jni/lzma/CPP/Windows/Control/StatusBar.h +0 -42
  766. package/android/jni/lzma/CPP/Windows/Control/StdAfx.h +0 -8
  767. package/android/jni/lzma/CPP/Windows/Control/ToolBar.h +0 -43
  768. package/android/jni/lzma/CPP/Windows/Control/Trackbar.h +0 -27
  769. package/android/jni/lzma/CPP/Windows/Control/Window2.cpp +0 -200
  770. package/android/jni/lzma/CPP/Windows/Control/Window2.h +0 -51
  771. package/android/jni/lzma/CPP/Windows/DLL.cpp +0 -109
  772. package/android/jni/lzma/CPP/Windows/DLL.h +0 -58
  773. package/android/jni/lzma/CPP/Windows/Defs.h +0 -17
  774. package/android/jni/lzma/CPP/Windows/ErrorMsg.cpp +0 -66
  775. package/android/jni/lzma/CPP/Windows/ErrorMsg.h +0 -15
  776. package/android/jni/lzma/CPP/Windows/FileDir.cpp +0 -714
  777. package/android/jni/lzma/CPP/Windows/FileDir.h +0 -117
  778. package/android/jni/lzma/CPP/Windows/FileFind.cpp +0 -749
  779. package/android/jni/lzma/CPP/Windows/FileFind.h +0 -161
  780. package/android/jni/lzma/CPP/Windows/FileIO.cpp +0 -432
  781. package/android/jni/lzma/CPP/Windows/FileIO.h +0 -212
  782. package/android/jni/lzma/CPP/Windows/FileLink.cpp +0 -440
  783. package/android/jni/lzma/CPP/Windows/FileMapping.cpp +0 -12
  784. package/android/jni/lzma/CPP/Windows/FileMapping.h +0 -66
  785. package/android/jni/lzma/CPP/Windows/FileName.cpp +0 -839
  786. package/android/jni/lzma/CPP/Windows/FileName.h +0 -115
  787. package/android/jni/lzma/CPP/Windows/FileSystem.cpp +0 -131
  788. package/android/jni/lzma/CPP/Windows/FileSystem.h +0 -27
  789. package/android/jni/lzma/CPP/Windows/Handle.h +0 -37
  790. package/android/jni/lzma/CPP/Windows/MemoryLock.cpp +0 -112
  791. package/android/jni/lzma/CPP/Windows/MemoryLock.h +0 -40
  792. package/android/jni/lzma/CPP/Windows/NtCheck.h +0 -46
  793. package/android/jni/lzma/CPP/Windows/PropVariant.cpp +0 -347
  794. package/android/jni/lzma/CPP/Windows/PropVariant.h +0 -114
  795. package/android/jni/lzma/CPP/Windows/PropVariantConv.cpp +0 -138
  796. package/android/jni/lzma/CPP/Windows/PropVariantConv.h +0 -37
  797. package/android/jni/lzma/CPP/Windows/Registry.cpp +0 -390
  798. package/android/jni/lzma/CPP/Windows/Registry.h +0 -84
  799. package/android/jni/lzma/CPP/Windows/ResourceString.cpp +0 -103
  800. package/android/jni/lzma/CPP/Windows/ResourceString.h +0 -16
  801. package/android/jni/lzma/CPP/Windows/SecurityUtils.cpp +0 -181
  802. package/android/jni/lzma/CPP/Windows/SecurityUtils.h +0 -167
  803. package/android/jni/lzma/CPP/Windows/Shell.cpp +0 -358
  804. package/android/jni/lzma/CPP/Windows/Shell.h +0 -94
  805. package/android/jni/lzma/CPP/Windows/StdAfx.h +0 -8
  806. package/android/jni/lzma/CPP/Windows/Synchronization.cpp +0 -10
  807. package/android/jni/lzma/CPP/Windows/Synchronization.h +0 -164
  808. package/android/jni/lzma/CPP/Windows/System.cpp +0 -142
  809. package/android/jni/lzma/CPP/Windows/System.h +0 -40
  810. package/android/jni/lzma/CPP/Windows/Thread.h +0 -38
  811. package/android/jni/lzma/CPP/Windows/TimeUtils.cpp +0 -213
  812. package/android/jni/lzma/CPP/Windows/TimeUtils.h +0 -32
  813. package/android/jni/lzma/CPP/Windows/Window.cpp +0 -179
  814. package/android/jni/lzma/CPP/Windows/Window.h +0 -284
  815. package/android/jni/lzma/CS/7zip/Common/CRC.cs +0 -55
  816. package/android/jni/lzma/CS/7zip/Common/CommandLineParser.cs +0 -274
  817. package/android/jni/lzma/CS/7zip/Common/InBuffer.cs +0 -72
  818. package/android/jni/lzma/CS/7zip/Common/OutBuffer.cs +0 -47
  819. package/android/jni/lzma/CS/7zip/Compress/LZ/IMatchFinder.cs +0 -24
  820. package/android/jni/lzma/CS/7zip/Compress/LZ/LzBinTree.cs +0 -367
  821. package/android/jni/lzma/CS/7zip/Compress/LZ/LzInWindow.cs +0 -132
  822. package/android/jni/lzma/CS/7zip/Compress/LZ/LzOutWindow.cs +0 -110
  823. package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaBase.cs +0 -76
  824. package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaDecoder.cs +0 -398
  825. package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaEncoder.cs +0 -1480
  826. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.cs +0 -364
  827. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.csproj +0 -90
  828. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.sln +0 -20
  829. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaBench.cs +0 -340
  830. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/AssemblyInfo.cs +0 -29
  831. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/Resources.cs +0 -70
  832. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/Settings.cs +0 -42
  833. package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoder.cs +0 -234
  834. package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBit.cs +0 -117
  835. package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBitTree.cs +0 -157
  836. package/android/jni/lzma/CS/7zip/ICoder.cs +0 -157
  837. package/android/jni/lzma/DOC/7zC.txt +0 -187
  838. package/android/jni/lzma/DOC/7zFormat.txt +0 -469
  839. package/android/jni/lzma/DOC/Methods.txt +0 -173
  840. package/android/jni/lzma/DOC/installer.txt +0 -166
  841. package/android/jni/lzma/DOC/lzma-history.txt +0 -446
  842. package/android/jni/lzma/DOC/lzma-specification.txt +0 -1176
  843. package/android/jni/lzma/DOC/lzma.txt +0 -328
  844. package/android/jni/lzma/Java/SevenZip/CRC.java +0 -52
  845. package/android/jni/lzma/Java/SevenZip/Compression/LZ/BinTree.java +0 -382
  846. package/android/jni/lzma/Java/SevenZip/Compression/LZ/InWindow.java +0 -131
  847. package/android/jni/lzma/Java/SevenZip/Compression/LZ/OutWindow.java +0 -85
  848. package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Base.java +0 -88
  849. package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Decoder.java +0 -329
  850. package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Encoder.java +0 -1416
  851. package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java +0 -55
  852. package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeEncoder.java +0 -99
  853. package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/Decoder.java +0 -88
  854. package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/Encoder.java +0 -151
  855. package/android/jni/lzma/Java/SevenZip/ICodeProgress.java +0 -6
  856. package/android/jni/lzma/Java/SevenZip/LzmaAlone.java +0 -253
  857. package/android/jni/lzma/Java/SevenZip/LzmaBench.java +0 -392
  858. package/android/jni/lzma/bin/7zS2.sfx +0 -0
  859. package/android/jni/lzma/bin/7zS2con.sfx +0 -0
  860. package/android/jni/lzma/bin/7zSD.sfx +0 -0
  861. package/android/jni/lzma/bin/7zdec.exe +0 -0
  862. package/android/jni/lzma/bin/7zr.exe +0 -0
  863. package/android/jni/lzma/bin/installer/config.txt +0 -5
  864. package/android/jni/lzma/bin/installer/cr.bat +0 -5
  865. package/android/jni/lzma/bin/lzma.exe +0 -0
  866. package/android/jni/lzma/bin/x64/7zr.exe +0 -0
  867. package/android/src/main/java/cn/reactnative/modules/update/ArchivePatchPlanResult.java +0 -6
  868. package/android/src/main/java/cn/reactnative/modules/update/PushyConfiguration.java +0 -104
  869. package/android/src/main/java/cn/reactnative/modules/update/UiThreadRunner.java +0 -37
  870. package/android/src/newarch/cn/reactnative/modules/update/UpdateModule.java +0 -121
  871. package/android/src/oldarch/cn/reactnative/modules/update/UpdateModule.java +0 -125
  872. package/cpp/patch_core/jni_natives.h +0 -27
  873. package/cpp/patch_core/jni_registration.cpp +0 -103
  874. package/cpp/patch_core/jni_util.h +0 -60
  875. package/cpp/patch_core/patch_core_android.cpp +0 -97
  876. package/cpp/patch_core/update_core_android.cpp +0 -485
  877. 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