You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-ios/SessionSnodeKit/Networking/Network+OnionRequest.swift

66 lines
2.1 KiB
Swift

// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
//
// stringlint:disable
import Foundation
import Combine
import SessionUtilitiesKit
public extension Network.RequestType {
static func onionRequest(
_ payload: Data,
to snode: LibSession.Snode,
swarmPublicKey: String?,
timeout: TimeInterval = Network.defaultTimeout
) -> Network.RequestType<Data?> {
return Network.RequestType(
id: "onionRequest",
url: "quic://\(snode.address)",
method: "POST",
body: payload,
args: [payload, snode, swarmPublicKey, timeout]
) { dependencies in
LibSession.sendOnionRequest(
to: Network.Destination.snode(snode),
body: payload,
swarmPublicKey: swarmPublicKey,
timeout: timeout,
using: dependencies
)
}
}
static func onionRequest(
_ request: URLRequest,
to server: String,
with x25519PublicKey: String,
timeout: TimeInterval = Network.defaultTimeout
) -> Network.RequestType<Data?> {
return Network.RequestType(
id: "onionRequest",
url: request.url?.absoluteString,
method: request.httpMethod,
headers: request.allHTTPHeaderFields,
body: request.httpBody,
args: [request, server, x25519PublicKey, timeout]
) { dependencies in
guard let url = request.url, let host = request.url?.host else {
return Fail(error: NetworkError.invalidURL).eraseToAnyPublisher()
}
return LibSession.sendOnionRequest(
to: Network.Destination.server(
url: url,
method: (request.httpMethod.map { HTTPMethod(rawValue: $0) } ?? .get),
headers: request.allHTTPHeaderFields,
x25519PublicKey: x25519PublicKey
),
body: request.httpBody,
swarmPublicKey: nil,
timeout: timeout,
using: dependencies
)
}
}
}