From b513eeb898d12eb80c9ce1dd9ba3c9e9be20e555 Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Thu, 12 Aug 2021 11:46:04 +1000 Subject: [PATCH] Add mock TURN server implementation --- Session.xcodeproj/project.pbxproj | 4 ++++ SessionMessagingKit/Calls/TURNServer.swift | 20 ++++++++++++++++++++ SessionUtilitiesKit/Networking/HTTP.swift | 5 ++++- 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 SessionMessagingKit/Calls/TURNServer.swift diff --git a/Session.xcodeproj/project.pbxproj b/Session.xcodeproj/project.pbxproj index 60c08d13e..1b415eb5a 100644 --- a/Session.xcodeproj/project.pbxproj +++ b/Session.xcodeproj/project.pbxproj @@ -158,6 +158,7 @@ B8041A9525C8FA1D003C2166 /* MediaLoaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8041A9425C8FA1D003C2166 /* MediaLoaderView.swift */; }; B8041AA725C90927003C2166 /* TypingIndicatorCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8041AA625C90927003C2166 /* TypingIndicatorCell.swift */; }; B806ECA126C4A7E4008BDA44 /* CallManager+UI.swift in Sources */ = {isa = PBXBuildFile; fileRef = B806ECA026C4A7E4008BDA44 /* CallManager+UI.swift */; }; + B806ECA326C4A8C6008BDA44 /* TURNServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B806ECA226C4A8C6008BDA44 /* TURNServer.swift */; }; B80A579F23DFF1F300876683 /* NewClosedGroupVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B80A579E23DFF1F300876683 /* NewClosedGroupVC.swift */; }; B817AD9A26436593009DF825 /* SimplifiedConversationCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B817AD9926436593009DF825 /* SimplifiedConversationCell.swift */; }; B817AD9C26436F73009DF825 /* ThreadPickerVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B817AD9B26436F73009DF825 /* ThreadPickerVC.swift */; }; @@ -1144,6 +1145,7 @@ B8041A9425C8FA1D003C2166 /* MediaLoaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaLoaderView.swift; sourceTree = ""; }; B8041AA625C90927003C2166 /* TypingIndicatorCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypingIndicatorCell.swift; sourceTree = ""; }; B806ECA026C4A7E4008BDA44 /* CallManager+UI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CallManager+UI.swift"; sourceTree = ""; }; + B806ECA226C4A8C6008BDA44 /* TURNServer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TURNServer.swift; sourceTree = ""; }; B80A579E23DFF1F300876683 /* NewClosedGroupVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewClosedGroupVC.swift; sourceTree = ""; }; B817AD9926436593009DF825 /* SimplifiedConversationCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimplifiedConversationCell.swift; sourceTree = ""; }; B817AD9B26436F73009DF825 /* ThreadPickerVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThreadPickerVC.swift; sourceTree = ""; }; @@ -2341,6 +2343,7 @@ children = ( B8DE1FB326C22F2F0079C9CE /* CallManager.swift */, B806ECA026C4A7E4008BDA44 /* CallManager+UI.swift */, + B806ECA226C4A8C6008BDA44 /* TURNServer.swift */, ); path = Calls; sourceTree = ""; @@ -4753,6 +4756,7 @@ B8856D11256F112A001CE70E /* OWSAudioSession.swift in Sources */, C3DB66C3260ACCE6001EFC55 /* OpenGroupPollerV2.swift in Sources */, C3C2A75F2553A3C500C340D1 /* VisibleMessage+LinkPreview.swift in Sources */, + B806ECA326C4A8C6008BDA44 /* TURNServer.swift in Sources */, C32C5FBB256E0206003C73A2 /* OWSBackgroundTask.m in Sources */, B8856CA8256F0F42001CE70E /* OWSBackupFragment.m in Sources */, C32C5C3D256DCBAF003C73A2 /* AppReadiness.m in Sources */, diff --git a/SessionMessagingKit/Calls/TURNServer.swift b/SessionMessagingKit/Calls/TURNServer.swift new file mode 100644 index 000000000..f00af77ec --- /dev/null +++ b/SessionMessagingKit/Calls/TURNServer.swift @@ -0,0 +1,20 @@ +// +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. +// + +import PromiseKit + +enum MockTURNSserver { + + static func getICEServerURL() -> Promise { + HTTP.execute(.get, "https://appr.tc/params").map2 { json in + guard let url = json["ice_server_url"] as? String else { throw HTTP.Error.invalidJSON } + return url + } + } + + static func makeTurnServerRequest(iceServerURL: String) -> Promise { + let headers = [ "referer" : "https://appr.tc" ] + return HTTP.execute(.post, iceServerURL, body: nil, headers: headers) + } +} diff --git a/SessionUtilitiesKit/Networking/HTTP.swift b/SessionUtilitiesKit/Networking/HTTP.swift index 5ce5e12ac..e1b2d5f93 100644 --- a/SessionUtilitiesKit/Networking/HTTP.swift +++ b/SessionUtilitiesKit/Networking/HTTP.swift @@ -109,7 +109,7 @@ public enum HTTP { } } - public static func execute(_ verb: Verb, _ url: String, body: Data?, timeout: TimeInterval = HTTP.timeout, useSeedNodeURLSession: Bool = false) -> Promise { + public static func execute(_ verb: Verb, _ url: String, body: Data?, headers: [String:String] = [:], timeout: TimeInterval = HTTP.timeout, useSeedNodeURLSession: Bool = false) -> Promise { var request = URLRequest(url: URL(string: url)!) request.httpMethod = verb.rawValue request.httpBody = body @@ -117,6 +117,9 @@ public enum HTTP { request.allHTTPHeaderFields?.removeValue(forKey: "User-Agent") request.setValue("WhatsApp", forHTTPHeaderField: "User-Agent") // Set a fake value request.setValue("en-us", forHTTPHeaderField: "Accept-Language") // Set a fake value + headers.forEach { (key, value) in + request.setValue(value, forHTTPHeaderField: key) + } let (promise, seal) = Promise.pending() let urlSession = useSeedNodeURLSession ? seedNodeURLSession : snodeURLSession let task = urlSession.dataTask(with: request) { data, response, error in