decline call with busy reason

This commit is contained in:
Danmei Chen 2020-09-22 18:59:27 +02:00
parent 47a16429ae
commit bd29182dd2
2 changed files with 14 additions and 13 deletions

View file

@ -374,6 +374,7 @@ import AVFoundation
providerDelegate.uuids.updateValue(uuid, forKey: callId)
let callInfo = CallInfo.newIncomingCallInfo(callId: callId)
callInfo.declined = true
callInfo.reason = Reason.Busy
providerDelegate.callInfos.updateValue(callInfo, forKey: uuid)
} else {
// end call
@ -425,8 +426,7 @@ class CoreManagerDelegate: CoreDelegate {
CallManager.instance().providerDelegate.updateCall(uuid: uuid!, handle: address, hasVideo: video)
let callInfo = CallManager.instance().providerDelegate.callInfos[uuid!]
if (callInfo?.declined ?? false) {
// The call is already declined.
try? call.decline(reason: Reason.Unknown)
DispatchQueue.main.asyncAfter(deadline: .now()) {try? call.decline(reason: callInfo!.reason)}
} else if (callInfo?.accepted ?? false) {
// The call is already answered.
CallManager.instance().acceptCall(call: call, hasVideo: video)

View file

@ -32,8 +32,8 @@ import os
var sasEnabled = false
var declined = false
var connected = false
var reason: Reason = Reason.None
static func newIncomingCallInfo(callId: String) -> CallInfo {
let callInfo = CallInfo()
callInfo.callId = callId
@ -92,17 +92,18 @@ class ProviderDelegate: NSObject {
CallManager.instance().providerDelegate.endCallNotExist(uuid: uuid, timeout: .now() + 20)
} else {
Log.directLog(BCTBX_LOG_ERROR, text: "CallKit: cannot complete incoming call with call-id: [\(String(describing: callId))] and UUID: [\(uuid.description)] from [\(handle)] caused by [\(error!.localizedDescription)]")
if (call == nil) {
callInfo?.declined = true
self.callInfos.updateValue(callInfo!, forKey: uuid)
return
}
let code = (error as NSError?)?.code
if code == CXErrorCodeIncomingCallError.filteredByBlockList.rawValue || code == CXErrorCodeIncomingCallError.filteredByDoNotDisturb.rawValue {
try? call?.decline(reason: Reason.Busy)
} else {
try? call?.decline(reason: Reason.Unknown)
switch code {
case CXErrorCodeIncomingCallError.filteredByDoNotDisturb.rawValue:
callInfo?.reason = Reason.DoNotDisturb
case CXErrorCodeIncomingCallError.filteredByBlockList.rawValue:
callInfo?.reason = Reason.DoNotDisturb
default:
callInfo?.reason = Reason.Unknown
}
callInfo?.declined = true
self.callInfos.updateValue(callInfo!, forKey: uuid)
try? call?.decline(reason: callInfo!.reason)
}
}
}