Client-Initiated запрос на закрытие звонка
Если клиент закрывает многоточечный вызов, к которому по-прежнему подключено несколько сторон, он должен сначала вызвать NdisClDropParty столько раз, сколько необходимо, чтобы удалить из звонка все стороны, кроме последней (см. раздел Удаление стороны из многоточечных вызовов).
Клиент инициирует закрытие вызова с помощью NdisClCloseCall. На следующем рисунке показан клиент, инициирующий закрытие вызова через диспетчер звонков.
На следующем рисунке показан клиент, инициирующий закрытие вызова через драйвер MCM.
Клиент, ориентированный на подключение, обычно вызывает NdisClCloseCall в любом из следующих случаев:
Чтобы закрыть установленный исходящий или входящий звонок.
Из функции ProtocolClIncomingCloseCall для отключения установленного вызова (см. раздел Входящие запросы на закрытие вызова).
Из функции ProtocolClIncomingCallQoSChange можно отменить установленный вызов, если изменение качества обслуживания, которое предлагает удаленная сторона, является неприемлемым (см. раздел Входящие запросы на изменение параметров вызова).
Из функции ProtocolClModifyCallQoSComplete можно отменить установленный вызов, если изменение качества обслуживания, которое клиент предлагает, является неприемлемым для удаленной стороны (см. раздел Инициированный клиентом запрос на изменение параметров вызова).
Вызов клиента к NdisClCloseCall вызывает функцию ProtocolCmCloseCall диспетчера вызовов или драйвера MCM. ProtocolCmCloseCall должен взаимодействовать с устройствами управления сетью, чтобы завершить подключение между локальным узлом и удаленным узлом.
Если протоколу ProtocolCmCloseCall передается явный CallMgrPartyContext, то завершаемый вызов является многоточечным вызовом. Диспетчер вызовов или драйвер MCM должны выполнять все необходимые сетевые подключения со своим сетевым оборудованием в соответствии с типом носителя, чтобы завершить вызов как многоточечный вызов.
NDIS может передать ProtocolCmCloseCall указатель на буфер, содержащий данные, предоставленные клиентом при вызове NdisClose. Эти данные могут быть диагностическими данными, которые указывают, почему был закрыт вызов, или любые другие данные, необходимые протоколу сигнализации. ProtocolCmCloseCall должен отправлять такие данные по сети перед завершением вызова. Если отправка данных одновременно с прерванным подключением не поддерживается, диспетчер вызовов или драйвер MCM должен вернуть NDIS_STATUS_INVALID_DATA.
ProtocolCmCloseCall может выполняться синхронно или, что более вероятно, асинхронно с помощью NdisCmCloseCallComplete (в случае диспетчера вызовов) или NdisMCmCloseCallComplete(в случае драйвера MCM). Вызов Ndis(M)CmCloseCallComplete приводит к тому, что NDIS вызывает функцию ProtocolClCloseCallComplete клиента.
Затем диспетчер вызовов или драйвер MCM должны инициировать деактивацию VC, используемого для вызова, вызвав соответственно NdisCmDeactivateVc или NdisMCmDeactivateVc (см. раздел Деактивация VC). Затем создатель VC (клиент, диспетчер вызовов или драйвер MCM) может при необходимости инициировать удаление VC (см. раздел Удаление VC).