From ecb914096918d52df390d71bff1473b236bec544 Mon Sep 17 00:00:00 2001 From: ryanzhao Date: Fri, 13 May 2022 15:28:17 +1000 Subject: [PATCH] send closed group message to default namespace as well during hardfork 19.0 --- SessionSnodeKit/SnodeAPI.swift | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/SessionSnodeKit/SnodeAPI.swift b/SessionSnodeKit/SnodeAPI.swift index fd669ea17..015fba9d3 100644 --- a/SessionSnodeKit/SnodeAPI.swift +++ b/SessionSnodeKit/SnodeAPI.swift @@ -499,8 +499,7 @@ public final class SnodeAPI : NSObject { // MARK: Store public static func sendMessage(_ message: SnodeMessage, isClosedGroupMessage: Bool, isConfigMessage: Bool) -> Promise> { - let namespace = isClosedGroupMessage ? closedGroupNamespace : defaultNamespace - return sendMessageUnauthenticated(message, namespace: namespace) + return sendMessageUnauthenticated(message, isClosedGroupMessage: isClosedGroupMessage) } // Not in use until we can batch delete and store config messages @@ -534,18 +533,33 @@ public final class SnodeAPI : NSObject { return promise } - private static func sendMessageUnauthenticated(_ message: SnodeMessage, namespace: Int) -> Promise> { + private static func sendMessageUnauthenticated(_ message: SnodeMessage, isClosedGroupMessage: Bool) -> Promise> { let (promise, seal) = Promise>.pending() let publicKey = Features.useTestnet ? message.recipient.removing05PrefixIfNeeded() : message.recipient Threading.workQueue.async { getTargetSnodes(for: publicKey).map2 { targetSnodes in + var rawResponsePromises: Set = Set() var parameters = message.toJSON() - parameters["namespace"] = namespace - return Set(targetSnodes.map { targetSnode in - attempt(maxRetryCount: maxRetryCount, recoveringOn: Threading.workQueue) { + parameters["namespace"] = isClosedGroupMessage ? closedGroupNamespace : defaultNamespace + for targetSnode in targetSnodes { + let rawResponsePromise = attempt(maxRetryCount: maxRetryCount, recoveringOn: Threading.workQueue) { invoke(.sendMessage, on: targetSnode, associatedWith: publicKey, parameters: parameters) } - }) + rawResponsePromises.insert(rawResponsePromise) + } + + // Send closed group messages to default namespace as well + if hardfork == 19 && softfork == 0 && isClosedGroupMessage { + parameters["namespace"] = defaultNamespace + for targetSnode in targetSnodes { + let rawResponsePromise = attempt(maxRetryCount: maxRetryCount, recoveringOn: Threading.workQueue) { + invoke(.sendMessage, on: targetSnode, associatedWith: publicKey, parameters: parameters) + } + rawResponsePromises.insert(rawResponsePromise) + } + } + + return rawResponsePromises }.done2 { seal.fulfill($0) }.catch2 { seal.reject($0) } } return promise