summaryrefslogtreecommitdiffhomepage
path: root/ios
diff options
context:
space:
mode:
Diffstat (limited to 'ios')
-rw-r--r--ios/MullvadREST/RESTURLSession.swift27
1 files changed, 25 insertions, 2 deletions
diff --git a/ios/MullvadREST/RESTURLSession.swift b/ios/MullvadREST/RESTURLSession.swift
index f1d3dfe501..87e2d7abbe 100644
--- a/ios/MullvadREST/RESTURLSession.swift
+++ b/ios/MullvadREST/RESTURLSession.swift
@@ -9,7 +9,27 @@
import Foundation
extension REST {
- public static func makeURLSession() -> URLSession {
+ public struct HTTPProxyConfiguration {
+ public var address: String
+ public var port: UInt16
+
+ public init(address: String, port: UInt16) {
+ self.address = address
+ self.port = port
+ }
+
+ fileprivate func apply(to sessionConfiguration: URLSessionConfiguration) {
+ var configuration = [CFString: Any]()
+
+ configuration[kCFNetworkProxiesHTTPProxy] = address
+ configuration[kCFNetworkProxiesHTTPPort] = NSNumber(value: port)
+ configuration[kCFNetworkProxiesProxyAutoConfigEnable] = kCFBooleanFalse
+
+ sessionConfiguration.connectionProxyDictionary = configuration
+ }
+ }
+
+ public static func makeURLSession(httpProxyConfiguration: HTTPProxyConfiguration? = nil) -> URLSession {
let certificatePath = Bundle(for: SSLPinningURLSessionDelegate.self)
.path(forResource: "le_root_cert", ofType: "cer")!
let data = FileManager.default.contents(atPath: certificatePath)!
@@ -20,8 +40,11 @@ extension REST {
trustedRootCertificates: [secCertificate]
)
+ let sessionConfiguration = URLSessionConfiguration.ephemeral
+ httpProxyConfiguration?.apply(to: sessionConfiguration)
+
let session = URLSession(
- configuration: .ephemeral,
+ configuration: sessionConfiguration,
delegate: sessionDelegate,
delegateQueue: nil
)