客户端发起的结束呼叫请求
如果客户端关闭多点呼叫,但多个参与方仍然连接,它必须首先根据需要多次调用 NdisClDropParty ,以便从呼叫中删除除最后一方以外的所有方 (请参阅 从多点呼叫 中删除参与方) 。
客户端使用 NdisClClCloseCall 启动结束调用。 下图显示了一个客户端通过呼叫管理器发起结束呼叫。
下图显示了客户端通过 MCM 驱动程序启动结束调用。
在以下任一情况下,面向连接的客户端通常调用 NdisClClCloseCall :
关闭已建立的传出或传入呼叫。
从 ProtocolClIncomingCloseCall 函数中,删除已建立的调用 (请参阅 传入请求以关闭呼叫) 。
如果远程方建议的 QoS 更改不可接受,则从 ProtocolClIncomingCallQoSChange 函数断开已建立的调用 (请参阅传入 请求以更改调用参数) 。
如果远程方无法接受客户端建议的 QoS 更改,则从 ProtocolClModifyCallQoSComplete 函数中断已建立的调用 (请参阅 客户端发起的更改调用参数的请求) 。
客户端对 NdisClClCloseCall 的调用会导致 NDIS 调用调用管理器的 或 MCM 驱动程序的 ProtocolCmCloseCall 函数。 ProtocolCmCloseCall 必须与网络控制设备通信,以终止本地节点与远程节点之间的连接。
如果 ProtocolCmCloseCall 传递了显式 CallMgrPartyContext,则终止的调用是多点调用。 呼叫管理器或 MCM 驱动程序必须根据其媒体类型与其网络硬件执行任何必要的网络通信,以多点调用的形式终止呼叫。
NDIS 可以将 ProtocolCmCloseCall 一个指针传递给包含客户端在调用 NdisClClose 时提供的数据的缓冲区。 此数据可以是指示呼叫关闭原因的诊断数据,也可以是信号协议所需的任何其他数据。 ProtocolCmCloseCall 必须在完成呼叫终止之前跨网络发送任何此类数据。 如果不支持同时发送数据并终止连接,则调用管理器或 MCM 驱动程序应返回NDIS_STATUS_INVALID_DATA。
在 MCM 驱动程序) 的情况下,如果调用管理器) 或 NdisMCmCloseCallComplete (,ProtocolCmCloseCall 可以同步完成,或者更可能的是异步完成 NdisCmCloseCallComplete (。 调用 Ndis (M) CmCloseCallComplete 会导致 NDIS 调用客户端的 ProtocolClCloseCallComplete 函数。
然后,调用管理器或 MCM 驱动程序必须分别通过调用 NdisCmDeactivateVc 或 NdisMCmDeactivateVc 来启动用于调用的 VC 的停用, (请参阅停用 VC) 。 VC (客户端、调用管理器或 MCM 驱动程序) 的创建者可以选择性地启动 VC 的删除 (请参阅 删除 VC) 。