From 080907dc825a8423336e00ab7a30de5b26e5d9e7 Mon Sep 17 00:00:00 2001 From: Danmei Chen Date: Thu, 2 Apr 2020 11:22:18 +0200 Subject: [PATCH] end call if it does nit exist --- Classes/ProviderDelegate.swift | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/Classes/ProviderDelegate.swift b/Classes/ProviderDelegate.swift index cf48155f3..53d5a0b0f 100644 --- a/Classes/ProviderDelegate.swift +++ b/Classes/ProviderDelegate.swift @@ -104,15 +104,6 @@ class ProviderDelegate: NSObject { } } } - - func reportForkIncomingCall() { - let uuid = UUID() - let update = CXCallUpdate() - update.remoteHandle = CXHandle(type:.generic, value: "Unknow") - - provider.reportNewIncomingCall(with: uuid, update: update, completion: {_ in}) - provider.reportCall(with: uuid, endedAt: .init(), reason: .failed) - } func updateCall(uuid: UUID, handle: String, hasVideo: Bool = false) { let update = CXCallUpdate() @@ -128,6 +119,10 @@ class ProviderDelegate: NSObject { func reportOutgoingCallConnected(uuid:UUID) { provider.reportOutgoingCall(with: uuid, connectedAt: nil) } + + func endCallForError(uuid: UUID, endedAt: Date?, endedReason: CXCallEndedReason) { + provider.reportCall(with: uuid, endedAt: endedAt, reason: endedReason) + } } // MARK: - CXProviderDelegate @@ -162,6 +157,15 @@ extension ProviderDelegate: CXProviderDelegate { CallManager.configAudioSession(audioSession: AVAudioSession.sharedInstance()) callInfo?.accepted = true callInfos.updateValue(callInfo!, forKey: uuid) + + DispatchQueue.main.asyncAfter(deadline: .now() + 30) {// in 30 second + if (CallManager.instance().lc?.callsNb == 0 && !CallManager.instance().providerDelegate.callInfos.isEmpty ) { + Log.directLog(BCTBX_LOG_MESSAGE, text: "CallKit: end call which does not exist.") + for suuid in CallManager.instance().providerDelegate.uuids.values { + CallManager.instance().providerDelegate.endCallForError(uuid: suuid, endedAt: .init(), endedReason: .declinedElsewhere) + } + } + } } else { CallManager.instance().acceptCall(call: call!, hasVideo: call!.params?.videoEnabled ?? false) }