Client-Initiated Request to Close a Call

If a client is closing a multipoint call to which more than one party is still connected, it must first call NdisClDropParty as many times as necessary to drop all but the last party from the call (see Dropping a Party from a Multipoint Call).

A client initiates the closing of a call with NdisClCloseCall. The following figure shows a client initiating the closing of a call through a call manager.

Diagram showing a client initiating the closure of a call through a call manager.

The next figure shows a client initiating the closing of a call through an MCM driver.

Diagram displaying a client initiating the closure of a call through an MCM driver.

A connection-oriented client typically calls NdisClCloseCall in any one of the following circumstances:

A client's call to NdisClCloseCall causes NDIS to call the call manager's or MCM driver's ProtocolCmCloseCall function. ProtocolCmCloseCall must communicate with network control devices to terminate a connection between the local node and a remote node.

If ProtocolCmCloseCall is passed an explicit CallMgrPartyContext, the call that is being terminated is a multipoint call. The call manager or MCM driver must perform any necessary network communication with its networking hardware, as appropriate to its media type, to terminate the call as a multipoint call.

NDIS can pass ProtocolCmCloseCall a pointer to a buffer containing data supplied by the client in the call to NdisClClose. This data can be diagnostic data that indicates why the call was closed or any other data that is required by the signaling protocol. ProtocolCmCloseCall must send any such data across the network before completing the call termination. If sending data concurrent with a connection being terminated is not supported, a call manager or MCM driver should return NDIS_STATUS_INVALID_DATA.

ProtocolCmCloseCall can complete synchronously or, more probably, asynchronously with NdisCmCloseCallComplete(in the case of a call manager) or NdisMCmCloseCallComplete(in the case of an MCM driver). A call to Ndis(M)CmCloseCallComplete causes NDIS to call the client's ProtocolClCloseCallComplete function.

The call manager or MCM driver must then initiate deactivation of the VC used for the call by respectively calling NdisCmDeactivateVc or NdisMCmDeactivateVc(see Deactivating a VC). The creator of the VC (client, call manager, or MCM driver) can then optionally initiate deletion of the VC (see Deleting a VC).