Поделиться через


Client-Initiated запрос на закрытие звонка

Если клиент закрывает многоточечный вызов, к которому по-прежнему подключено несколько сторон, он должен сначала вызвать NdisClDropParty столько раз, сколько необходимо, чтобы удалить из звонка все стороны, кроме последней (см. раздел Удаление стороны из многоточечных вызовов).

Клиент инициирует закрытие вызова с помощью NdisClCloseCall. На следующем рисунке показан клиент, инициирующий закрытие вызова через диспетчер звонков.

схема, иллюстрирующая клиент, инициирующий закрытие звонка через диспетчер вызовов.

На следующем рисунке показан клиент, инициирующий закрытие вызова через драйвер MCM.

схема, иллюстрирующая клиент, инициирующий закрытие вызова через драйвер mcm.

Клиент, ориентированный на подключение, обычно вызывает NdisClCloseCall в любом из следующих случаев:

Вызов клиента к 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).