SignalingSettings.swift 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. //
  2. // SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
  3. // SPDX-License-Identifier: GPL-3.0-or-later
  4. //
  5. import Foundation
  6. @objcMembers public class SignalingSettings: NSObject {
  7. public var server: String?
  8. public var signalingMode: String?
  9. public var ticket: String?
  10. public var userId: String?
  11. public var sipDialinInfo: String?
  12. public var stunServers: [StunServer] = []
  13. public var turnServers: [TurnServer] = []
  14. public var federation: [String: Any]?
  15. init?(dictionary: [String: Any]?) {
  16. guard let dictionary else { return nil }
  17. super.init()
  18. self.server = dictionary["server"] as? String
  19. self.signalingMode = dictionary["signalingMode"] as? String
  20. self.ticket = dictionary["ticket"] as? String
  21. self.userId = dictionary["userId"] as? String
  22. self.sipDialinInfo = dictionary["sipDialinInfo"] as? String
  23. self.federation = dictionary["federation"] as? [String: Any]
  24. if let stunArray = dictionary["stunservers"] as? [[String: Any]] {
  25. for case let stunDict in stunArray {
  26. stunServers.append(StunServer(dictionary: stunDict))
  27. }
  28. }
  29. if let turnArray = dictionary["turnservers"] as? [[String: Any]] {
  30. for case let turnDict in turnArray {
  31. turnServers.append(TurnServer(dictionary: turnDict))
  32. }
  33. }
  34. }
  35. public func getFederationJoinDictionary() -> [String: String]? {
  36. guard let federation, !federation.isEmpty else { return nil }
  37. var result: [String: String] = [:]
  38. if let server = federation["server"] as? String {
  39. result["signaling"] = server
  40. }
  41. if let roomid = federation["roomId"] as? String {
  42. result["roomid"] = roomid
  43. }
  44. if let url = federation["nextcloudServer"] as? String {
  45. // No `index.php` required here, as this is an ocs route
  46. result["url"] = url + "/ocs/v2.php/apps/spreed/api/v3/signaling/backend"
  47. }
  48. if let helloAuthParams = federation["helloAuthParams"] as? [String: String], let token = helloAuthParams["token"] {
  49. result["token"] = token
  50. }
  51. return result
  52. }
  53. }