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.
		
		
		
		
		
			
		
			
				
	
	
		
			50 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			50 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Swift
		
	
| // Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
 | |
| 
 | |
| import Foundation
 | |
| import WebRTC
 | |
| import Foundation
 | |
| import SessionUtilitiesKit
 | |
| 
 | |
| extension WebRTCSession: RTCDataChannelDelegate {
 | |
|     
 | |
|     internal func createDataChannel() -> RTCDataChannel? {
 | |
|         let dataChannelConfiguration = RTCDataChannelConfiguration()
 | |
|         dataChannelConfiguration.isOrdered = true
 | |
|         dataChannelConfiguration.isNegotiated = true
 | |
|         dataChannelConfiguration.channelId = 548
 | |
|         guard let dataChannel = peerConnection?.dataChannel(forLabel: "CONTROL", configuration: dataChannelConfiguration) else { // stringlint:disable
 | |
|             SNLog("[Calls] Couldn't create data channel.")
 | |
|             return nil
 | |
|         }
 | |
|         return dataChannel
 | |
|     }
 | |
|     
 | |
|     public func sendJSON(_ json: JSON) {
 | |
|         if let dataChannel = self.dataChannel, let jsonAsData = try? JSONSerialization.data(withJSONObject: json, options: [ .fragmentsAllowed ]) {
 | |
|             SNLog("[Calls] Send json to data channel")
 | |
|             let dataBuffer = RTCDataBuffer(data: jsonAsData, isBinary: false)
 | |
|             dataChannel.sendData(dataBuffer)
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     // MARK: Data channel delegate
 | |
|     public func dataChannelDidChangeState(_ dataChannel: RTCDataChannel) {
 | |
|         SNLog("[Calls] Data channel did change to \(dataChannel.readyState.rawValue)")
 | |
|         if dataChannel.readyState == .open {
 | |
|             delegate?.dataChannelDidOpen()
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     public func dataChannel(_ dataChannel: RTCDataChannel, didReceiveMessageWith buffer: RTCDataBuffer) {
 | |
|         if let json = try? JSONSerialization.jsonObject(with: buffer.data, options: [ .fragmentsAllowed ]) as? JSON {
 | |
|             SNLog("[Calls] Data channel did receive data: \(json)")
 | |
|             if let isRemoteVideoEnabled = json["video"] as? Bool { // stringlint:disable
 | |
|                 delegate?.isRemoteVideoDidChange(isEnabled: isRemoteVideoEnabled)
 | |
|             }
 | |
|             if let _ = json["hangup"] { // stringlint:disable
 | |
|                 delegate?.didReceiveHangUpSignal()
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |