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.
		
		
		
		
		
			
		
			
				
	
	
		
			56 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			56 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Swift
		
	
import CallKit
 | 
						|
import SessionUtilitiesKit
 | 
						|
 | 
						|
extension SessionCallManager {
 | 
						|
    public func startCall(_ call: SessionCall, completion: ((Error?) -> Void)?) {
 | 
						|
        guard case .offer = call.mode else { return }
 | 
						|
        guard !call.hasConnected else { return }
 | 
						|
        let handle = CXHandle(type: .generic, value: call.sessionID)
 | 
						|
        let startCallAction = CXStartCallAction(call: call.callID, handle: handle)
 | 
						|
        
 | 
						|
        startCallAction.isVideo = false
 | 
						|
        
 | 
						|
        let transaction = CXTransaction()
 | 
						|
        transaction.addAction(startCallAction)
 | 
						|
        
 | 
						|
        reportOutgoingCall(call)
 | 
						|
        requestTransaction(transaction, completion: completion)
 | 
						|
    }
 | 
						|
    
 | 
						|
    public func answerCall(_ call: SessionCall, completion: ((Error?) -> Void)?) {
 | 
						|
        let answerCallAction = CXAnswerCallAction(call: call.callID)
 | 
						|
        let transaction = CXTransaction()
 | 
						|
        transaction.addAction(answerCallAction)
 | 
						|
 | 
						|
        requestTransaction(transaction, completion: completion)
 | 
						|
    }
 | 
						|
    
 | 
						|
    public func endCall(_ call: SessionCall, completion: ((Error?) -> Void)?) {
 | 
						|
        let endCallAction = CXEndCallAction(call: call.callID)
 | 
						|
        let transaction = CXTransaction()
 | 
						|
        transaction.addAction(endCallAction)
 | 
						|
 | 
						|
        requestTransaction(transaction, completion: completion)
 | 
						|
    }
 | 
						|
    
 | 
						|
    // Not currently in use
 | 
						|
    public func setOnHoldStatus(for call: SessionCall) {
 | 
						|
        let setHeldCallAction = CXSetHeldCallAction(call: call.callID, onHold: true)
 | 
						|
        let transaction = CXTransaction()
 | 
						|
        transaction.addAction(setHeldCallAction)
 | 
						|
 | 
						|
        requestTransaction(transaction)
 | 
						|
    }
 | 
						|
    
 | 
						|
    private func requestTransaction(_ transaction: CXTransaction, completion: ((Error?) -> Void)? = nil) {
 | 
						|
        callController.request(transaction) { error in
 | 
						|
            if let error = error {
 | 
						|
                SNLog("Error requesting transaction: \(error)")
 | 
						|
            } else {
 | 
						|
                SNLog("Requested transaction successfully")
 | 
						|
            }
 | 
						|
            completion?(error)
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |