@onekeyfe/react-native-range-downloader 3.0.81-alpha.7 → 3.0.81-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ReactNativeRangeDownloader.podspec +1 -1
- package/android/src/main/java/com/margelo/nitro/reactnativerangedownloader/FirmwareArchiveRules.kt +12 -5
- package/android/src/main/java/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactOrphanSweep.kt +111 -0
- package/android/src/main/java/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactStore.kt +132 -68
- package/android/src/main/java/com/margelo/nitro/reactnativerangedownloader/ReactNativeRangeDownloader.kt +1 -1
- package/android/src/test/java/com/margelo/nitro/reactnativerangedownloader/FirmwareArchiveRulesTest.kt +39 -0
- package/android/src/test/java/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactOrphanSweepTest.kt +107 -0
- package/ios/FirmwareArtifactStore.swift +242 -172
- package/ios/RangeDownloadLogic.swift +194 -36
- package/ios/ReactNativeRangeDownloader.swift +9 -423
- package/lib/typescript/src/ReactNativeRangeDownloader.nitro.d.ts +3 -3
- package/lib/typescript/src/ReactNativeRangeDownloader.nitro.d.ts.map +1 -1
- package/nitrogen/generated/android/c++/JFirmwareArchiveMaterializeParams.hpp +7 -6
- package/nitrogen/generated/android/c++/JFirmwareArtifactDownloadParams.hpp +7 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArchiveMaterializeParams.kt +2 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativerangedownloader/FirmwareArtifactDownloadParams.kt +3 -3
- package/nitrogen/generated/ios/ReactNativeRangeDownloader-Swift-Cxx-Bridge.hpp +15 -0
- package/nitrogen/generated/ios/swift/FirmwareArchiveMaterializeParams.swift +32 -13
- package/nitrogen/generated/ios/swift/FirmwareArtifactDownloadParams.swift +39 -8
- package/nitrogen/generated/shared/c++/FirmwareArchiveMaterializeParams.hpp +6 -5
- package/nitrogen/generated/shared/c++/FirmwareArtifactDownloadParams.hpp +9 -9
- package/package.json +2 -2
- package/src/ReactNativeRangeDownloader.nitro.ts +3 -3
- package/ios/FirmwareBackgroundSessionEventRouter.swift +0 -17
|
@@ -108,7 +108,7 @@ class ReactNativeRangeDownloader: HybridReactNativeRangeDownloaderSpec {
|
|
|
108
108
|
|
|
109
109
|
func getFirmwareArtifactCapabilities() throws -> FirmwareArtifactCapabilities {
|
|
110
110
|
FirmwareArtifactCapabilities(
|
|
111
|
-
firmwareArtifactProtocolVersion:
|
|
111
|
+
firmwareArtifactProtocolVersion: 3,
|
|
112
112
|
supportedRouteTypes: ["domain", "pinnedIp"],
|
|
113
113
|
supportsArchiveMaterialization: true,
|
|
114
114
|
maxReadBytes: Double(FirmwareArtifactStore.maxReadBytes)
|
|
@@ -144,7 +144,14 @@ class ReactNativeRangeDownloader: HybridReactNativeRangeDownloaderSpec {
|
|
|
144
144
|
func cancelFirmwareArtifactDownloads(
|
|
145
145
|
params: FirmwareArtifactCancelParams
|
|
146
146
|
) throws -> Promise<Void> {
|
|
147
|
-
|
|
147
|
+
guard FirmwareArtifactStore.isSafeIdentifier(params.transactionId) else {
|
|
148
|
+
return Promise.rejected(
|
|
149
|
+
withError: FirmwareArtifactStoreError.invalidInput(
|
|
150
|
+
"Invalid firmware transactionId"
|
|
151
|
+
)
|
|
152
|
+
)
|
|
153
|
+
}
|
|
154
|
+
return Promise.async {
|
|
148
155
|
try await FirmwareArtifactStore.shared.cancelDownloads(
|
|
149
156
|
transactionId: params.transactionId
|
|
150
157
|
)
|
|
@@ -336,50 +343,10 @@ extension RangeFallbackClass {
|
|
|
336
343
|
}
|
|
337
344
|
}
|
|
338
345
|
|
|
339
|
-
private struct FirmwareBackgroundTaskDescriptor: Codable, Equatable {
|
|
340
|
-
let schemaVersion: Int
|
|
341
|
-
let taskId: String
|
|
342
|
-
let transactionId: String
|
|
343
|
-
let expectedSize: Int64
|
|
344
|
-
let expectedSha256: String
|
|
345
|
-
let hostname: String
|
|
346
|
-
let deadlineAt: TimeInterval
|
|
347
|
-
|
|
348
|
-
var key: String {
|
|
349
|
-
firmwareArtifactDownloadKey(
|
|
350
|
-
transactionId: transactionId,
|
|
351
|
-
expectedSize: expectedSize,
|
|
352
|
-
expectedSha256: expectedSha256
|
|
353
|
-
)
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
func hasSameDownloadIdentity(
|
|
357
|
-
as other: FirmwareBackgroundTaskDescriptor
|
|
358
|
-
) -> Bool {
|
|
359
|
-
transactionId == other.transactionId &&
|
|
360
|
-
expectedSize == other.expectedSize &&
|
|
361
|
-
expectedSha256 == other.expectedSha256
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
|
|
365
346
|
public final class RangeDownloader: NSObject, URLSessionDownloadDelegate {
|
|
366
347
|
|
|
367
348
|
public static let shared = RangeDownloader()
|
|
368
349
|
|
|
369
|
-
public static func routeFirmwareBackgroundEvents(
|
|
370
|
-
identifier: String,
|
|
371
|
-
completionHandler: @escaping () -> Void
|
|
372
|
-
) -> Bool {
|
|
373
|
-
guard identifier == sessionIdentifier(for: .firmware) else {
|
|
374
|
-
return false
|
|
375
|
-
}
|
|
376
|
-
shared.attachBackgroundEvents(
|
|
377
|
-
identifier: identifier,
|
|
378
|
-
completionHandler: completionHandler
|
|
379
|
-
)
|
|
380
|
-
return true
|
|
381
|
-
}
|
|
382
|
-
|
|
383
350
|
/// Posted by the AppDelegate from
|
|
384
351
|
/// application(_:handleEventsForBackgroundURLSession:completionHandler:).
|
|
385
352
|
/// userInfo: ["identifier": String, "completionHandler": () -> Void].
|
|
@@ -416,11 +383,6 @@ public final class RangeDownloader: NSObject, URLSessionDownloadDelegate {
|
|
|
416
383
|
/// notification), keyed by session identifier, so we can call each back once
|
|
417
384
|
/// all its queued background events have been delivered.
|
|
418
385
|
private var backgroundCompletionHandlers: [String: () -> Void] = [:]
|
|
419
|
-
private var firmwareWaiters: [
|
|
420
|
-
String: [CheckedContinuation<StoredFirmwareArtifact, Error>]
|
|
421
|
-
] = [:]
|
|
422
|
-
private var firmwareTaskErrors: [Int: Error] = [:]
|
|
423
|
-
private var completedFirmwareTasks: Set<Int> = []
|
|
424
386
|
|
|
425
387
|
// Per-run mutable state.
|
|
426
388
|
private final class RunState {
|
|
@@ -678,238 +640,6 @@ public final class RangeDownloader: NSObject, URLSessionDownloadDelegate {
|
|
|
678
640
|
return (r, decoded.segIndex)
|
|
679
641
|
}
|
|
680
642
|
|
|
681
|
-
private static let firmwareTaskDescriptionPrefix = "firmware-v2:"
|
|
682
|
-
|
|
683
|
-
private static func encodeFirmwareTaskDescription(
|
|
684
|
-
_ descriptor: FirmwareBackgroundTaskDescriptor
|
|
685
|
-
) throws -> String {
|
|
686
|
-
let data = try JSONEncoder().encode(descriptor)
|
|
687
|
-
return firmwareTaskDescriptionPrefix + data.base64EncodedString()
|
|
688
|
-
}
|
|
689
|
-
|
|
690
|
-
private static func decodeFirmwareTaskDescription(
|
|
691
|
-
_ description: String?
|
|
692
|
-
) -> FirmwareBackgroundTaskDescriptor? {
|
|
693
|
-
guard
|
|
694
|
-
let description,
|
|
695
|
-
description.hasPrefix(firmwareTaskDescriptionPrefix),
|
|
696
|
-
let data = Data(
|
|
697
|
-
base64Encoded: String(
|
|
698
|
-
description.dropFirst(firmwareTaskDescriptionPrefix.count)
|
|
699
|
-
)
|
|
700
|
-
),
|
|
701
|
-
data.count <= 2048,
|
|
702
|
-
let descriptor = try? JSONDecoder().decode(
|
|
703
|
-
FirmwareBackgroundTaskDescriptor.self,
|
|
704
|
-
from: data
|
|
705
|
-
),
|
|
706
|
-
descriptor.schemaVersion == 2,
|
|
707
|
-
descriptor.taskId.range(
|
|
708
|
-
of: "^[A-Za-z0-9._-]{1,100}$",
|
|
709
|
-
options: .regularExpression
|
|
710
|
-
) != nil,
|
|
711
|
-
descriptor.transactionId.range(
|
|
712
|
-
of: "^[A-Za-z0-9._:-]{1,160}$",
|
|
713
|
-
options: .regularExpression
|
|
714
|
-
) != nil,
|
|
715
|
-
descriptor.expectedSize > 0,
|
|
716
|
-
descriptor.expectedSize <= 512 * 1024 * 1024,
|
|
717
|
-
descriptor.expectedSha256.range(
|
|
718
|
-
of: "^[a-f0-9]{64}$",
|
|
719
|
-
options: .regularExpression
|
|
720
|
-
) != nil,
|
|
721
|
-
!descriptor.hostname.isEmpty,
|
|
722
|
-
descriptor.hostname.count <= 253,
|
|
723
|
-
descriptor.deadlineAt.isFinite,
|
|
724
|
-
descriptor.deadlineAt > 0
|
|
725
|
-
else {
|
|
726
|
-
return nil
|
|
727
|
-
}
|
|
728
|
-
return descriptor
|
|
729
|
-
}
|
|
730
|
-
|
|
731
|
-
func downloadFirmwareArtifact(
|
|
732
|
-
params: FirmwareArtifactDownloadParams
|
|
733
|
-
) async throws -> StoredFirmwareArtifact {
|
|
734
|
-
guard
|
|
735
|
-
params.routeType == "domain",
|
|
736
|
-
let url = URL(string: params.url),
|
|
737
|
-
let hostname = url.host?.lowercased()
|
|
738
|
-
else {
|
|
739
|
-
throw FirmwareBackgroundDownloadError.invalidTask
|
|
740
|
-
}
|
|
741
|
-
let deadlineSeconds = params.overallDeadlineSeconds ?? 180
|
|
742
|
-
guard
|
|
743
|
-
deadlineSeconds.isFinite,
|
|
744
|
-
deadlineSeconds > 0,
|
|
745
|
-
deadlineSeconds <= 24 * 60 * 60
|
|
746
|
-
else {
|
|
747
|
-
throw FirmwareBackgroundDownloadError.invalidTask
|
|
748
|
-
}
|
|
749
|
-
let descriptor = FirmwareBackgroundTaskDescriptor(
|
|
750
|
-
schemaVersion: 2,
|
|
751
|
-
taskId: params.taskId,
|
|
752
|
-
transactionId: params.transactionId,
|
|
753
|
-
expectedSize: Int64(params.expectedSize),
|
|
754
|
-
expectedSha256: params.expectedSha256.lowercased(),
|
|
755
|
-
hostname: hostname,
|
|
756
|
-
deadlineAt: Date().timeIntervalSince1970 + deadlineSeconds
|
|
757
|
-
)
|
|
758
|
-
guard !FirmwareArtifactStore.shared.isTransactionCancelled(
|
|
759
|
-
descriptor.transactionId
|
|
760
|
-
) else {
|
|
761
|
-
throw FirmwareBackgroundDownloadError.cancelled
|
|
762
|
-
}
|
|
763
|
-
if let stored = try FirmwareArtifactStore.shared.storedArtifact(
|
|
764
|
-
expectedSize: descriptor.expectedSize,
|
|
765
|
-
expectedSha256: descriptor.expectedSha256
|
|
766
|
-
) {
|
|
767
|
-
return stored
|
|
768
|
-
}
|
|
769
|
-
|
|
770
|
-
return try await withCheckedThrowingContinuation { continuation in
|
|
771
|
-
lock.withLockValue {
|
|
772
|
-
firmwareWaiters[descriptor.key, default: []].append(continuation)
|
|
773
|
-
}
|
|
774
|
-
Task { [weak self] in
|
|
775
|
-
await self?.reconcileOrStartFirmwareTask(
|
|
776
|
-
descriptor: descriptor,
|
|
777
|
-
url: url
|
|
778
|
-
)
|
|
779
|
-
}
|
|
780
|
-
}
|
|
781
|
-
}
|
|
782
|
-
|
|
783
|
-
func cancelFirmwareArtifactDownloads(
|
|
784
|
-
transactionId: String
|
|
785
|
-
) async throws {
|
|
786
|
-
guard transactionId.range(
|
|
787
|
-
of: "^[A-Za-z0-9._:-]{1,160}$",
|
|
788
|
-
options: .regularExpression
|
|
789
|
-
) != nil else {
|
|
790
|
-
throw FirmwareBackgroundDownloadError.invalidTask
|
|
791
|
-
}
|
|
792
|
-
let session = session(forChannel: .firmware, segmentCount: 1)
|
|
793
|
-
let tasks = await allTasks(in: session)
|
|
794
|
-
for task in tasks {
|
|
795
|
-
guard
|
|
796
|
-
let descriptor = Self.decodeFirmwareTaskDescription(
|
|
797
|
-
task.taskDescription
|
|
798
|
-
),
|
|
799
|
-
descriptor.transactionId == transactionId
|
|
800
|
-
else {
|
|
801
|
-
continue
|
|
802
|
-
}
|
|
803
|
-
recordFirmwareTaskError(
|
|
804
|
-
taskIdentifier: task.taskIdentifier,
|
|
805
|
-
error: FirmwareBackgroundDownloadError.cancelled
|
|
806
|
-
)
|
|
807
|
-
task.cancel()
|
|
808
|
-
}
|
|
809
|
-
}
|
|
810
|
-
|
|
811
|
-
private func reconcileOrStartFirmwareTask(
|
|
812
|
-
descriptor: FirmwareBackgroundTaskDescriptor,
|
|
813
|
-
url: URL
|
|
814
|
-
) async {
|
|
815
|
-
guard !FirmwareArtifactStore.shared.isTransactionCancelled(
|
|
816
|
-
descriptor.transactionId
|
|
817
|
-
) else {
|
|
818
|
-
finishFirmwareTask(
|
|
819
|
-
key: descriptor.key,
|
|
820
|
-
result: .failure(FirmwareBackgroundDownloadError.cancelled)
|
|
821
|
-
)
|
|
822
|
-
return
|
|
823
|
-
}
|
|
824
|
-
let session = session(forChannel: .firmware, segmentCount: 1)
|
|
825
|
-
let tasks = await allTasks(in: session)
|
|
826
|
-
var matchingTaskFound = false
|
|
827
|
-
for task in tasks {
|
|
828
|
-
guard
|
|
829
|
-
let candidate = Self.decodeFirmwareTaskDescription(
|
|
830
|
-
task.taskDescription
|
|
831
|
-
)
|
|
832
|
-
else {
|
|
833
|
-
continue
|
|
834
|
-
}
|
|
835
|
-
if candidate.hasSameDownloadIdentity(as: descriptor) {
|
|
836
|
-
matchingTaskFound = true
|
|
837
|
-
} else if
|
|
838
|
-
candidate.transactionId == descriptor.transactionId &&
|
|
839
|
-
candidate.taskId == descriptor.taskId
|
|
840
|
-
{
|
|
841
|
-
task.cancel()
|
|
842
|
-
}
|
|
843
|
-
}
|
|
844
|
-
if matchingTaskFound {
|
|
845
|
-
return
|
|
846
|
-
}
|
|
847
|
-
do {
|
|
848
|
-
if let stored = try FirmwareArtifactStore.shared.storedArtifact(
|
|
849
|
-
expectedSize: descriptor.expectedSize,
|
|
850
|
-
expectedSha256: descriptor.expectedSha256
|
|
851
|
-
) {
|
|
852
|
-
finishFirmwareTask(
|
|
853
|
-
key: descriptor.key,
|
|
854
|
-
result: .success(stored)
|
|
855
|
-
)
|
|
856
|
-
return
|
|
857
|
-
}
|
|
858
|
-
guard Date().timeIntervalSince1970 < descriptor.deadlineAt else {
|
|
859
|
-
throw FirmwareBackgroundDownloadError.deadlineExceeded
|
|
860
|
-
}
|
|
861
|
-
guard !FirmwareArtifactStore.shared.isTransactionCancelled(
|
|
862
|
-
descriptor.transactionId
|
|
863
|
-
) else {
|
|
864
|
-
throw FirmwareBackgroundDownloadError.cancelled
|
|
865
|
-
}
|
|
866
|
-
var request = URLRequest(url: url)
|
|
867
|
-
request.cachePolicy = .reloadIgnoringLocalCacheData
|
|
868
|
-
request.timeoutInterval = max(
|
|
869
|
-
1,
|
|
870
|
-
descriptor.deadlineAt - Date().timeIntervalSince1970
|
|
871
|
-
)
|
|
872
|
-
request.setValue("identity", forHTTPHeaderField: "Accept-Encoding")
|
|
873
|
-
let task = session.downloadTask(with: request)
|
|
874
|
-
task.taskDescription = try Self.encodeFirmwareTaskDescription(
|
|
875
|
-
descriptor
|
|
876
|
-
)
|
|
877
|
-
task.resume()
|
|
878
|
-
} catch {
|
|
879
|
-
finishFirmwareTask(
|
|
880
|
-
key: descriptor.key,
|
|
881
|
-
result: .failure(error)
|
|
882
|
-
)
|
|
883
|
-
}
|
|
884
|
-
}
|
|
885
|
-
|
|
886
|
-
private func allTasks(in session: URLSession) async -> [URLSessionTask] {
|
|
887
|
-
await withCheckedContinuation { continuation in
|
|
888
|
-
session.getAllTasks { tasks in
|
|
889
|
-
continuation.resume(returning: tasks)
|
|
890
|
-
}
|
|
891
|
-
}
|
|
892
|
-
}
|
|
893
|
-
|
|
894
|
-
private func finishFirmwareTask(
|
|
895
|
-
key: String,
|
|
896
|
-
result: Result<StoredFirmwareArtifact, Error>
|
|
897
|
-
) {
|
|
898
|
-
let continuations: [
|
|
899
|
-
CheckedContinuation<StoredFirmwareArtifact, Error>
|
|
900
|
-
] = lock.withLockValue {
|
|
901
|
-
firmwareWaiters.removeValue(forKey: key) ?? []
|
|
902
|
-
}
|
|
903
|
-
for continuation in continuations {
|
|
904
|
-
switch result {
|
|
905
|
-
case let .success(artifact):
|
|
906
|
-
continuation.resume(returning: artifact)
|
|
907
|
-
case let .failure(error):
|
|
908
|
-
continuation.resume(throwing: error)
|
|
909
|
-
}
|
|
910
|
-
}
|
|
911
|
-
}
|
|
912
|
-
|
|
913
643
|
// MARK: - Public entry
|
|
914
644
|
|
|
915
645
|
/// Downloads [urlString] into [filePath] using concurrent background ranges.
|
|
@@ -1445,28 +1175,6 @@ public final class RangeDownloader: NSObject, URLSessionDownloadDelegate {
|
|
|
1445
1175
|
public func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask,
|
|
1446
1176
|
didWriteData bytesWritten: Int64, totalBytesWritten: Int64,
|
|
1447
1177
|
totalBytesExpectedToWrite: Int64) {
|
|
1448
|
-
if let descriptor = Self.decodeFirmwareTaskDescription(
|
|
1449
|
-
downloadTask.taskDescription
|
|
1450
|
-
) {
|
|
1451
|
-
let exceedsBound =
|
|
1452
|
-
totalBytesWritten > descriptor.expectedSize ||
|
|
1453
|
-
(
|
|
1454
|
-
totalBytesExpectedToWrite != NSURLSessionTransferSizeUnknown &&
|
|
1455
|
-
totalBytesExpectedToWrite != descriptor.expectedSize
|
|
1456
|
-
)
|
|
1457
|
-
let expired =
|
|
1458
|
-
Date().timeIntervalSince1970 >= descriptor.deadlineAt
|
|
1459
|
-
if exceedsBound || expired {
|
|
1460
|
-
recordFirmwareTaskError(
|
|
1461
|
-
taskIdentifier: downloadTask.taskIdentifier,
|
|
1462
|
-
error: exceedsBound
|
|
1463
|
-
? FirmwareBackgroundDownloadError.sizeRejected
|
|
1464
|
-
: FirmwareBackgroundDownloadError.deadlineExceeded
|
|
1465
|
-
)
|
|
1466
|
-
downloadTask.cancel()
|
|
1467
|
-
}
|
|
1468
|
-
return
|
|
1469
|
-
}
|
|
1470
1178
|
guard let desc = downloadTask.taskDescription,
|
|
1471
1179
|
let (state, idx) = run(for: desc) else { return }
|
|
1472
1180
|
lock.lock()
|
|
@@ -1497,52 +1205,6 @@ public final class RangeDownloader: NSObject, URLSessionDownloadDelegate {
|
|
|
1497
1205
|
|
|
1498
1206
|
public func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask,
|
|
1499
1207
|
didFinishDownloadingTo location: URL) {
|
|
1500
|
-
if let descriptor = Self.decodeFirmwareTaskDescription(
|
|
1501
|
-
downloadTask.taskDescription
|
|
1502
|
-
) {
|
|
1503
|
-
guard firmwareTaskError(
|
|
1504
|
-
taskIdentifier: downloadTask.taskIdentifier
|
|
1505
|
-
) == nil else {
|
|
1506
|
-
return
|
|
1507
|
-
}
|
|
1508
|
-
do {
|
|
1509
|
-
guard
|
|
1510
|
-
!FirmwareArtifactStore.shared.isTransactionCancelled(
|
|
1511
|
-
descriptor.transactionId
|
|
1512
|
-
),
|
|
1513
|
-
Date().timeIntervalSince1970 < descriptor.deadlineAt,
|
|
1514
|
-
let response = downloadTask.response as? HTTPURLResponse,
|
|
1515
|
-
response.statusCode == 200,
|
|
1516
|
-
response.url?.scheme?.lowercased() == "https",
|
|
1517
|
-
response.url?.host?.lowercased() == descriptor.hostname,
|
|
1518
|
-
response.url?.port == nil || response.url?.port == 443
|
|
1519
|
-
else {
|
|
1520
|
-
throw FirmwareBackgroundDownloadError.responseRejected
|
|
1521
|
-
}
|
|
1522
|
-
let artifact = try FirmwareArtifactStore.shared.acceptBackgroundDownload(
|
|
1523
|
-
temporaryURL: location,
|
|
1524
|
-
transactionId: descriptor.transactionId,
|
|
1525
|
-
expectedSize: descriptor.expectedSize,
|
|
1526
|
-
expectedSha256: descriptor.expectedSha256
|
|
1527
|
-
)
|
|
1528
|
-
lock.withLockValue {
|
|
1529
|
-
firmwareTaskErrors.removeValue(
|
|
1530
|
-
forKey: downloadTask.taskIdentifier
|
|
1531
|
-
)
|
|
1532
|
-
completedFirmwareTasks.insert(downloadTask.taskIdentifier)
|
|
1533
|
-
}
|
|
1534
|
-
finishFirmwareTask(
|
|
1535
|
-
key: descriptor.key,
|
|
1536
|
-
result: .success(artifact)
|
|
1537
|
-
)
|
|
1538
|
-
} catch {
|
|
1539
|
-
recordFirmwareTaskError(
|
|
1540
|
-
taskIdentifier: downloadTask.taskIdentifier,
|
|
1541
|
-
error: error
|
|
1542
|
-
)
|
|
1543
|
-
}
|
|
1544
|
-
return
|
|
1545
|
-
}
|
|
1546
1208
|
guard let desc = downloadTask.taskDescription,
|
|
1547
1209
|
let (state, idx) = run(for: desc) else { return }
|
|
1548
1210
|
let ranges = lock.withLockValue { state.ranges }
|
|
@@ -1641,43 +1303,6 @@ public final class RangeDownloader: NSObject, URLSessionDownloadDelegate {
|
|
|
1641
1303
|
}
|
|
1642
1304
|
|
|
1643
1305
|
public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
|
|
1644
|
-
if let descriptor = Self.decodeFirmwareTaskDescription(
|
|
1645
|
-
task.taskDescription
|
|
1646
|
-
) {
|
|
1647
|
-
let completion: (completed: Bool, error: Error?) =
|
|
1648
|
-
lock.withLockValue {
|
|
1649
|
-
let completed = completedFirmwareTasks.remove(
|
|
1650
|
-
task.taskIdentifier
|
|
1651
|
-
) != nil
|
|
1652
|
-
let recordedError = firmwareTaskErrors.removeValue(
|
|
1653
|
-
forKey: task.taskIdentifier
|
|
1654
|
-
)
|
|
1655
|
-
return (completed, recordedError)
|
|
1656
|
-
}
|
|
1657
|
-
if completion.completed {
|
|
1658
|
-
return
|
|
1659
|
-
}
|
|
1660
|
-
let failure: Error
|
|
1661
|
-
if let recordedError = completion.error {
|
|
1662
|
-
failure = recordedError
|
|
1663
|
-
} else if FirmwareArtifactStore.shared.isTransactionCancelled(
|
|
1664
|
-
descriptor.transactionId
|
|
1665
|
-
) {
|
|
1666
|
-
failure = FirmwareBackgroundDownloadError.cancelled
|
|
1667
|
-
} else if let taskError = error {
|
|
1668
|
-
failure =
|
|
1669
|
-
isFirmwareArtifactTLSError(taskError)
|
|
1670
|
-
? FirmwareBackgroundDownloadError.tlsRejected
|
|
1671
|
-
: FirmwareBackgroundDownloadError.transferFailed
|
|
1672
|
-
} else {
|
|
1673
|
-
failure = FirmwareBackgroundDownloadError.transferFailed
|
|
1674
|
-
}
|
|
1675
|
-
finishFirmwareTask(
|
|
1676
|
-
key: descriptor.key,
|
|
1677
|
-
result: .failure(failure)
|
|
1678
|
-
)
|
|
1679
|
-
return
|
|
1680
|
-
}
|
|
1681
1306
|
guard let desc = task.taskDescription,
|
|
1682
1307
|
let (state, idx) = run(for: desc) else { return }
|
|
1683
1308
|
let ranges = lock.withLockValue { state.ranges }
|
|
@@ -1853,26 +1478,6 @@ public final class RangeDownloader: NSObject, URLSessionDownloadDelegate {
|
|
|
1853
1478
|
willPerformHTTPRedirection response: HTTPURLResponse,
|
|
1854
1479
|
newRequest request: URLRequest,
|
|
1855
1480
|
completionHandler: @escaping (URLRequest?) -> Void) {
|
|
1856
|
-
if let descriptor = Self.decodeFirmwareTaskDescription(
|
|
1857
|
-
task.taskDescription
|
|
1858
|
-
) {
|
|
1859
|
-
guard
|
|
1860
|
-
request.url?.scheme?.lowercased() == "https",
|
|
1861
|
-
request.url?.host?.lowercased() == descriptor.hostname,
|
|
1862
|
-
request.url?.port == nil || request.url?.port == 443,
|
|
1863
|
-
request.url?.user == nil,
|
|
1864
|
-
request.url?.password == nil
|
|
1865
|
-
else {
|
|
1866
|
-
recordFirmwareTaskError(
|
|
1867
|
-
taskIdentifier: task.taskIdentifier,
|
|
1868
|
-
error: FirmwareBackgroundDownloadError.redirectRejected
|
|
1869
|
-
)
|
|
1870
|
-
completionHandler(nil)
|
|
1871
|
-
return
|
|
1872
|
-
}
|
|
1873
|
-
completionHandler(request)
|
|
1874
|
-
return
|
|
1875
|
-
}
|
|
1876
1481
|
if request.url?.scheme?.lowercased() != "https" {
|
|
1877
1482
|
OneKeyLog.error("RangeDownloader", "blocked redirect to non-HTTPS URL")
|
|
1878
1483
|
if let desc = task.taskDescription, let (state, _) = run(for: desc) {
|
|
@@ -1884,25 +1489,6 @@ public final class RangeDownloader: NSObject, URLSessionDownloadDelegate {
|
|
|
1884
1489
|
}
|
|
1885
1490
|
}
|
|
1886
1491
|
|
|
1887
|
-
private func recordFirmwareTaskError(
|
|
1888
|
-
taskIdentifier: Int,
|
|
1889
|
-
error: Error
|
|
1890
|
-
) {
|
|
1891
|
-
lock.withLockValue {
|
|
1892
|
-
if firmwareTaskErrors[taskIdentifier] == nil {
|
|
1893
|
-
firmwareTaskErrors[taskIdentifier] = error
|
|
1894
|
-
}
|
|
1895
|
-
}
|
|
1896
|
-
}
|
|
1897
|
-
|
|
1898
|
-
private func firmwareTaskError(
|
|
1899
|
-
taskIdentifier: Int
|
|
1900
|
-
) -> Error? {
|
|
1901
|
-
lock.withLockValue {
|
|
1902
|
-
firmwareTaskErrors[taskIdentifier]
|
|
1903
|
-
}
|
|
1904
|
-
}
|
|
1905
|
-
|
|
1906
1492
|
/// Called on the session delegate queue when all background events for this
|
|
1907
1493
|
/// session have been delivered after a background relaunch.
|
|
1908
1494
|
public func urlSessionDidFinishEvents(forBackgroundURLSession session: URLSession) {
|
|
@@ -36,8 +36,8 @@ export interface FirmwareArtifactDownloadParams {
|
|
|
36
36
|
url: string;
|
|
37
37
|
routeType: string;
|
|
38
38
|
resolvedIp?: string;
|
|
39
|
-
expectedSize
|
|
40
|
-
expectedSha256
|
|
39
|
+
expectedSize?: number;
|
|
40
|
+
expectedSha256?: string;
|
|
41
41
|
maxBytes: number;
|
|
42
42
|
overallDeadlineSeconds?: number;
|
|
43
43
|
}
|
|
@@ -73,7 +73,7 @@ export interface FirmwareArtifactReaderCloseParams {
|
|
|
73
73
|
export interface FirmwareArchiveMaterializeParams {
|
|
74
74
|
leaseRef: string;
|
|
75
75
|
archiveArtifactRef: string;
|
|
76
|
-
expectedEntries
|
|
76
|
+
expectedEntries?: FirmwareArchiveExpectedEntry[];
|
|
77
77
|
}
|
|
78
78
|
export interface FirmwareArchiveExpectedEntry {
|
|
79
79
|
artifactId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactNativeRangeDownloader.nitro.d.ts","sourceRoot":"","sources":["../../../src/ReactNativeRangeDownloader.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAM/D,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC;AAEtE,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,eAAe,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAI5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAWD,MAAM,MAAM,oBAAoB,GAC5B,WAAW,GACX,mBAAmB,GACnB,mBAAmB,GACnB,UAAU,CAAC;AAKf,MAAM,MAAM,iBAAiB,GACzB,oBAAoB,GACpB,kBAAkB,GAClB,aAAa,GACb,UAAU,GACV,kBAAkB,GAClB,kBAAkB,GAClB,qBAAqB,GACrB,kBAAkB,GAClB,WAAW,GACX,iBAAiB,CAAC;AAEtB,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,oBAAoB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,eAAe,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ReactNativeRangeDownloader.nitro.d.ts","sourceRoot":"","sources":["../../../src/ReactNativeRangeDownloader.nitro.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
#include "FirmwareArchiveExpectedEntry.hpp"
|
|
14
14
|
#include "JFirmwareArchiveExpectedEntry.hpp"
|
|
15
|
+
#include <optional>
|
|
15
16
|
#include <string>
|
|
16
17
|
#include <vector>
|
|
17
18
|
|
|
@@ -43,7 +44,7 @@ namespace margelo::nitro::reactnativerangedownloader {
|
|
|
43
44
|
return FirmwareArchiveMaterializeParams(
|
|
44
45
|
leaseRef->toStdString(),
|
|
45
46
|
archiveArtifactRef->toStdString(),
|
|
46
|
-
[&]() {
|
|
47
|
+
expectedEntries != nullptr ? std::make_optional([&]() {
|
|
47
48
|
size_t __size = expectedEntries->size();
|
|
48
49
|
std::vector<FirmwareArchiveExpectedEntry> __vector;
|
|
49
50
|
__vector.reserve(__size);
|
|
@@ -52,7 +53,7 @@ namespace margelo::nitro::reactnativerangedownloader {
|
|
|
52
53
|
__vector.push_back(__element->toCpp());
|
|
53
54
|
}
|
|
54
55
|
return __vector;
|
|
55
|
-
}()
|
|
56
|
+
}()) : std::nullopt
|
|
56
57
|
);
|
|
57
58
|
}
|
|
58
59
|
|
|
@@ -69,16 +70,16 @@ namespace margelo::nitro::reactnativerangedownloader {
|
|
|
69
70
|
clazz,
|
|
70
71
|
jni::make_jstring(value.leaseRef),
|
|
71
72
|
jni::make_jstring(value.archiveArtifactRef),
|
|
72
|
-
[&]() {
|
|
73
|
-
size_t __size = value.expectedEntries.size();
|
|
73
|
+
value.expectedEntries.has_value() ? [&]() {
|
|
74
|
+
size_t __size = value.expectedEntries.value().size();
|
|
74
75
|
jni::local_ref<jni::JArrayClass<JFirmwareArchiveExpectedEntry>> __array = jni::JArrayClass<JFirmwareArchiveExpectedEntry>::newArray(__size);
|
|
75
76
|
for (size_t __i = 0; __i < __size; __i++) {
|
|
76
|
-
const auto& __element = value.expectedEntries[__i];
|
|
77
|
+
const auto& __element = value.expectedEntries.value()[__i];
|
|
77
78
|
auto __elementJni = JFirmwareArchiveExpectedEntry::fromCpp(__element);
|
|
78
79
|
__array->setElement(__i, *__elementJni);
|
|
79
80
|
}
|
|
80
81
|
return __array;
|
|
81
|
-
}()
|
|
82
|
+
}() : nullptr
|
|
82
83
|
);
|
|
83
84
|
}
|
|
84
85
|
};
|
|
@@ -46,8 +46,8 @@ namespace margelo::nitro::reactnativerangedownloader {
|
|
|
46
46
|
jni::local_ref<jni::JString> routeType = this->getFieldValue(fieldRouteType);
|
|
47
47
|
static const auto fieldResolvedIp = clazz->getField<jni::JString>("resolvedIp");
|
|
48
48
|
jni::local_ref<jni::JString> resolvedIp = this->getFieldValue(fieldResolvedIp);
|
|
49
|
-
static const auto fieldExpectedSize = clazz->getField<
|
|
50
|
-
|
|
49
|
+
static const auto fieldExpectedSize = clazz->getField<jni::JDouble>("expectedSize");
|
|
50
|
+
jni::local_ref<jni::JDouble> expectedSize = this->getFieldValue(fieldExpectedSize);
|
|
51
51
|
static const auto fieldExpectedSha256 = clazz->getField<jni::JString>("expectedSha256");
|
|
52
52
|
jni::local_ref<jni::JString> expectedSha256 = this->getFieldValue(fieldExpectedSha256);
|
|
53
53
|
static const auto fieldMaxBytes = clazz->getField<double>("maxBytes");
|
|
@@ -62,8 +62,8 @@ namespace margelo::nitro::reactnativerangedownloader {
|
|
|
62
62
|
url->toStdString(),
|
|
63
63
|
routeType->toStdString(),
|
|
64
64
|
resolvedIp != nullptr ? std::make_optional(resolvedIp->toStdString()) : std::nullopt,
|
|
65
|
-
expectedSize,
|
|
66
|
-
expectedSha256->toStdString(),
|
|
65
|
+
expectedSize != nullptr ? std::make_optional(expectedSize->value()) : std::nullopt,
|
|
66
|
+
expectedSha256 != nullptr ? std::make_optional(expectedSha256->toStdString()) : std::nullopt,
|
|
67
67
|
maxBytes,
|
|
68
68
|
overallDeadlineSeconds != nullptr ? std::make_optional(overallDeadlineSeconds->value()) : std::nullopt
|
|
69
69
|
);
|
|
@@ -75,7 +75,7 @@ namespace margelo::nitro::reactnativerangedownloader {
|
|
|
75
75
|
*/
|
|
76
76
|
[[maybe_unused]]
|
|
77
77
|
static jni::local_ref<JFirmwareArtifactDownloadParams::javaobject> fromCpp(const FirmwareArtifactDownloadParams& value) {
|
|
78
|
-
using JSignature = JFirmwareArtifactDownloadParams(jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>,
|
|
78
|
+
using JSignature = JFirmwareArtifactDownloadParams(jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JString>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JString>, double, jni::alias_ref<jni::JDouble>);
|
|
79
79
|
static const auto clazz = javaClassStatic();
|
|
80
80
|
static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
|
|
81
81
|
return create(
|
|
@@ -87,8 +87,8 @@ namespace margelo::nitro::reactnativerangedownloader {
|
|
|
87
87
|
jni::make_jstring(value.url),
|
|
88
88
|
jni::make_jstring(value.routeType),
|
|
89
89
|
value.resolvedIp.has_value() ? jni::make_jstring(value.resolvedIp.value()) : nullptr,
|
|
90
|
-
value.expectedSize,
|
|
91
|
-
jni::make_jstring(value.expectedSha256),
|
|
90
|
+
value.expectedSize.has_value() ? jni::JDouble::valueOf(value.expectedSize.value()) : nullptr,
|
|
91
|
+
value.expectedSha256.has_value() ? jni::make_jstring(value.expectedSha256.value()) : nullptr,
|
|
92
92
|
value.maxBytes,
|
|
93
93
|
value.overallDeadlineSeconds.has_value() ? jni::JDouble::valueOf(value.overallDeadlineSeconds.value()) : nullptr
|
|
94
94
|
);
|
|
@@ -25,7 +25,7 @@ data class FirmwareArchiveMaterializeParams(
|
|
|
25
25
|
val archiveArtifactRef: String,
|
|
26
26
|
@DoNotStrip
|
|
27
27
|
@Keep
|
|
28
|
-
val expectedEntries: Array<FirmwareArchiveExpectedEntry
|
|
28
|
+
val expectedEntries: Array<FirmwareArchiveExpectedEntry>?
|
|
29
29
|
) {
|
|
30
30
|
/* primary constructor */
|
|
31
31
|
|
|
@@ -37,7 +37,7 @@ data class FirmwareArchiveMaterializeParams(
|
|
|
37
37
|
@Keep
|
|
38
38
|
@Suppress("unused")
|
|
39
39
|
@JvmStatic
|
|
40
|
-
private fun fromCpp(leaseRef: String, archiveArtifactRef: String, expectedEntries: Array<FirmwareArchiveExpectedEntry
|
|
40
|
+
private fun fromCpp(leaseRef: String, archiveArtifactRef: String, expectedEntries: Array<FirmwareArchiveExpectedEntry>?): FirmwareArchiveMaterializeParams {
|
|
41
41
|
return FirmwareArchiveMaterializeParams(leaseRef, archiveArtifactRef, expectedEntries)
|
|
42
42
|
}
|
|
43
43
|
}
|
|
@@ -40,10 +40,10 @@ data class FirmwareArtifactDownloadParams(
|
|
|
40
40
|
val resolvedIp: String?,
|
|
41
41
|
@DoNotStrip
|
|
42
42
|
@Keep
|
|
43
|
-
val expectedSize: Double
|
|
43
|
+
val expectedSize: Double?,
|
|
44
44
|
@DoNotStrip
|
|
45
45
|
@Keep
|
|
46
|
-
val expectedSha256: String
|
|
46
|
+
val expectedSha256: String?,
|
|
47
47
|
@DoNotStrip
|
|
48
48
|
@Keep
|
|
49
49
|
val maxBytes: Double,
|
|
@@ -61,7 +61,7 @@ data class FirmwareArtifactDownloadParams(
|
|
|
61
61
|
@Keep
|
|
62
62
|
@Suppress("unused")
|
|
63
63
|
@JvmStatic
|
|
64
|
-
private fun fromCpp(taskId: String, transactionId: String, leaseRef: String, artifactId: String, url: String, routeType: String, resolvedIp: String?, expectedSize: Double
|
|
64
|
+
private fun fromCpp(taskId: String, transactionId: String, leaseRef: String, artifactId: String, url: String, routeType: String, resolvedIp: String?, expectedSize: Double?, expectedSha256: String?, maxBytes: Double, overallDeadlineSeconds: Double?): FirmwareArtifactDownloadParams {
|
|
65
65
|
return FirmwareArtifactDownloadParams(taskId, transactionId, leaseRef, artifactId, url, routeType, resolvedIp, expectedSize, expectedSha256, maxBytes, overallDeadlineSeconds)
|
|
66
66
|
}
|
|
67
67
|
}
|