mirror of https://github.com/oxen-io/session-ios
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.
70 lines
2.5 KiB
Swift
70 lines
2.5 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?,
|
|
requestTimeout: TimeInterval = Network.defaultTimeout,
|
|
requestAndPathBuildTimeout: TimeInterval? = nil
|
|
) -> Network.RequestType<Data?> {
|
|
return Network.RequestType(
|
|
id: "onionRequest",
|
|
url: "quic://\(snode.address)",
|
|
method: "POST",
|
|
body: payload,
|
|
args: [payload, snode, swarmPublicKey, requestTimeout, requestAndPathBuildTimeout]
|
|
) { dependencies in
|
|
LibSession.sendOnionRequest(
|
|
to: Network.Destination.snode(snode),
|
|
body: payload,
|
|
swarmPublicKey: swarmPublicKey,
|
|
requestTimeout: requestTimeout,
|
|
requestAndPathBuildTimeout: requestAndPathBuildTimeout,
|
|
using: dependencies
|
|
)
|
|
}
|
|
}
|
|
|
|
static func onionRequest(
|
|
_ request: URLRequest,
|
|
to server: String,
|
|
with x25519PublicKey: String,
|
|
requestTimeout: TimeInterval = Network.defaultTimeout,
|
|
requestAndPathBuildTimeout: TimeInterval? = nil
|
|
) -> 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, requestTimeout, requestAndPathBuildTimeout]
|
|
) { dependencies in
|
|
guard let url = request.url 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,
|
|
requestTimeout: requestTimeout,
|
|
requestAndPathBuildTimeout: requestAndPathBuildTimeout,
|
|
using: dependencies
|
|
)
|
|
}
|
|
}
|
|
}
|