Incoming Request to Close a Call
When the remote client closes a call, the local call manager or MCM driver must indicate this incoming request to the local client. To indicate such a request, a call manager calls NdisCmDispatchIncomingCloseCall with the CloseStatus set to NDIS_STATUS_SUCCESS (see the following figure).
An MCM driver calls NdisMCmDispatchIncomingCloseCall to indicate an incoming request to close a call (see the following figure).
A call manager or MCM driver also can call Ndis(M)CmDispatchIncomingCloseCall:
From its ProtocolCmIncomingCallComplete function if it determines that the connection-oriented client is requesting an unacceptable change in call parameters in response to an incoming call previously that is indicated by the call manager or MCM driver (see Incoming Request to Change Call Parameters).
If abnormal network conditions force the call manager to tear down active calls.
The call to Ndis(M)CmDispatchIncomingCloseCall causes NDIS to call the ProtocolClIncomingCloseCall function of the connection-oriented client on that connection. ProtocolClIncomingCloseCall should carry out any protocol-determined operations, such as notifying its own client or clients that the connection is being broken. If the call to be closed is a multipoint VC created by the client, ProtocolClIncomingCloseCall must call NdisClDropParty one or more times until only a single party remains on the VC (see Dropping a Party from a Multipoint Call).
ProtocolClIncomingCloseCall must then call NdisClCloseCall(with the handle to the last party on the VC if the VC is a multipoint VC created by the client) to acknowledge that the client will no longer attempt to send or expect to receive data on this particular VC. If the call manager or MCM driver created this VC, ProtocolClIncomingCloseCall should return control after it calls NdisClCloseCall. The call manager or MCM driver must also deactivate the VC (see Deactivating a VC).
If the client originally created this VC for an outgoing call and CloseStatus is NDIS_STATUS_SUCCESS, ProtocolClIncomingCloseCall can optionally tear down the VC with NdisCoDeleteVc(see Deleting a VC) or reuse the VC for another call. If CloseStatus is not NDIS_STATUS_SUCCESS, ProtocolClIncomingCloseCall must call NdisCoDeleteVc.
If the call manager or MCM driver originally created this VC for an incoming call, the call manager or MCM driver can optionally delete the VC by respectively calling NdisCoDeleteVc or NdisMCmDeleteVc.