Improve threading

pull/156/head
gmbnt 6 years ago
parent 632c9f34db
commit ac0a20c8a7

@ -7,10 +7,6 @@ extension OnionRequestAPI {
internal typealias EncryptionResult = (ciphertext: Data, symmetricKey: Data, ephemeralPublicKey: Data) internal typealias EncryptionResult = (ciphertext: Data, symmetricKey: Data, ephemeralPublicKey: Data)
private static func getQueue() -> DispatchQueue {
return DispatchQueue(label: UUID().uuidString, qos: .userInitiated)
}
/// Returns `size` bytes of random data generated using the default secure random number generator. See /// Returns `size` bytes of random data generated using the default secure random number generator. See
/// [SecRandomCopyBytes](https://developer.apple.com/documentation/security/1399291-secrandomcopybytes) for more information. /// [SecRandomCopyBytes](https://developer.apple.com/documentation/security/1399291-secrandomcopybytes) for more information.
private static func getSecureRandomData(ofSize size: UInt) throws -> Data { private static func getSecureRandomData(ofSize size: UInt) throws -> Data {
@ -46,7 +42,7 @@ extension OnionRequestAPI {
/// Encrypts `payload` for `snode` and returns the result. Use this to build the core of an onion request. /// Encrypts `payload` for `snode` and returns the result. Use this to build the core of an onion request.
internal static func encrypt(_ payload: JSON, forTargetSnode snode: LokiAPITarget) -> Promise<EncryptionResult> { internal static func encrypt(_ payload: JSON, forTargetSnode snode: LokiAPITarget) -> Promise<EncryptionResult> {
let (promise, seal) = Promise<EncryptionResult>.pending() let (promise, seal) = Promise<EncryptionResult>.pending()
getQueue().async { DispatchQueue.global().async {
do { do {
guard JSONSerialization.isValidJSONObject(payload) else { return seal.reject(HTTP.Error.invalidJSON) } guard JSONSerialization.isValidJSONObject(payload) else { return seal.reject(HTTP.Error.invalidJSON) }
let payloadAsData = try JSONSerialization.data(withJSONObject: payload, options: []) let payloadAsData = try JSONSerialization.data(withJSONObject: payload, options: [])
@ -66,7 +62,7 @@ extension OnionRequestAPI {
/// Encrypts the previous encryption result (i.e. that of the hop after this one) for this hop. Use this to build the layers of an onion request. /// Encrypts the previous encryption result (i.e. that of the hop after this one) for this hop. Use this to build the layers of an onion request.
internal static func encryptHop(from lhs: LokiAPITarget, to rhs: LokiAPITarget, using previousEncryptionResult: EncryptionResult) -> Promise<EncryptionResult> { internal static func encryptHop(from lhs: LokiAPITarget, to rhs: LokiAPITarget, using previousEncryptionResult: EncryptionResult) -> Promise<EncryptionResult> {
let (promise, seal) = Promise<EncryptionResult>.pending() let (promise, seal) = Promise<EncryptionResult>.pending()
getQueue().async { DispatchQueue.global().async {
let parameters: JSON = [ let parameters: JSON = [
"ciphertext" : previousEncryptionResult.ciphertext.base64EncodedString(), "ciphertext" : previousEncryptionResult.ciphertext.base64EncodedString(),
"ephemeral_key" : previousEncryptionResult.ephemeralPublicKey.toHexString(), "ephemeral_key" : previousEncryptionResult.ephemeralPublicKey.toHexString(),

@ -53,7 +53,7 @@ internal enum OnionRequestAPI {
/// Tests the given snode. The returned promise errors out if the snode is faulty; the promise is fulfilled otherwise. /// Tests the given snode. The returned promise errors out if the snode is faulty; the promise is fulfilled otherwise.
private static func testSnode(_ snode: LokiAPITarget) -> Promise<Void> { private static func testSnode(_ snode: LokiAPITarget) -> Promise<Void> {
let (promise, seal) = Promise<Void>.pending() let (promise, seal) = Promise<Void>.pending()
let queue = DispatchQueue(label: UUID().uuidString, qos: .userInitiated) // No need to block the work queue for this let queue = DispatchQueue.global() // No need to block the work queue for this
queue.async { queue.async {
let url = "\(snode.address):\(snode.port)/get_stats/v1" let url = "\(snode.address):\(snode.port)/get_stats/v1"
let timeout: TimeInterval = 6 // Use a shorter timeout for testing let timeout: TimeInterval = 6 // Use a shorter timeout for testing

Loading…
Cancel
Save