Client-Initiated 关闭呼叫的请求

如果客户端正在关闭仍有多个参与方连接的多点呼叫,则必须根据需要多次调用NdisClDropParty,以便从呼叫中删除除最后一个参与方以外的所有参与方(请参阅从多点呼叫中删除参与方)。

客户端使用 NdisClCloseCall 发起关闭呼叫。 下图显示了客户端通过呼叫管理器启动通话结束。

示意图显示客户端通过呼叫管理器启动呼叫结束。

下图显示了一个客户端通过 MCM 驱动程序启动关闭呼叫。

关系图显示客户端通过 MCM 驱动程序启动关闭调用的过程。

面向连接的客户端通常在以下任一情况下调用 NdisCloseCall

客户端对 NdisCloseCall 的调用会导致 NDIS 调用调用管理器或 MCM 驱动程序的 ProtocolCmCloseCall 函数。 ProtocolCmCloseCall 必须与网络控制设备通信,以终止本地节点与远程节点之间的连接。

如果 ProtocolCmCloseCall 传递显式 CallMgrPartyContext,则终止的调用是多点调用。 呼叫管理器或 MCM 驱动程序必须根据其媒体类型,与其网络硬件进行必要的网络通信,以便将呼叫转换为多点通话。

NDIS 可以将 ProtocolCmCloseCall 传递给一个指针,该缓冲区包含客户端在调用 NdisClose 时提供的数据。 这些数据可以是用来诊断通话为何关闭的诊断数据,或是信令协议所需的其他任何数据。 ProtocolCmCloseCall 必须在完成呼叫终止之前跨网络发送任何此类数据。 如果不支持在连接被终止时并发发送数据,则呼叫管理器或 MCM 驱动程序应返回NDIS_STATUS_INVALID_DATA。

ProtocolCmCloseCall 可以同步完成,或者更可能通过 NdisCmCloseCallComplete(在调用管理器的情况下)或 NdisMCmCloseCallComplete(在 MCM 驱动程序的情况下)异步完成。 调用 Ndis(M)CmCloseCallComplete 会导致 NDIS 调用客户端的 ProtocolCloseCallComplete 函数。

然后,呼叫管理器或 MCM 驱动程序必须分别调用 NdisCmDeactivateVcNdisMCmDeactivateVc(请参见 VC 的停用),以启动通话的 VC 停用。 然后,VC(客户端、调用管理器或 MCM 驱动程序)的创建者可以选择启动删除 VC(请参阅 “删除 VC”)。