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


Входящий запрос на закрытие звонка

Когда удаленный клиент закрывает вызов, локальный диспетчер вызовов или драйвер MCM должен указать этот входящий запрос к локальному клиенту. Чтобы указать такой запрос, диспетчер вызовов вызывает NdisCmDispatchIncomingCloseCall с параметром CloseStatus , равным NDIS_STATUS_SUCCESS (см. следующий рисунок).

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

Драйвер MCM вызывает NdisMCmDispatchIncomingCloseCall , чтобы указать входящий запрос на закрытие вызова (см. следующий рисунок).

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

Диспетчер вызовов или драйвер MCM также может вызывать Ndis(M)CmDispatchIncomingCloseCall:

  • Функция ProtocolCmIncomingCallComplete определяет, что клиент, ориентированный на подключение, запрашивает неприемлемое изменение параметров вызова в ответ на входящий вызов, указанный диспетчером вызовов или драйвером MCM (см. раздел Входящие запросы на изменение параметров вызова).

  • Если ненормальные сетевые условия заставляют диспетчера вызовов удалять активные вызовы.

Вызов Ndis(M)CmDispatchIncomingCloseCall вызывает функцию ProtocolClIncomingCloseCall клиента, ориентированного на подключение. ProtocolClIncomingCloseCall должен выполнять любые операции, определяемые протоколом, такие как уведомление собственного клиента или клиентов о разрыве подключения. Если вызов, который нужно закрыть, является многоточечный VC, созданный клиентом, ProtocolClcomingCloseCall должен вызывать NdisClDropParty один или несколько раз, пока в VC не останется только одна сторона (см. раздел Удаление стороны из многоточечных вызовов).

Затем ProtocolClIncomingCloseCall должен вызвать NdisCloseCall(с дескриптором последней стороне в VC, если VC является многоточечный VC, созданный клиентом), чтобы подтвердить, что клиент больше не будет пытаться отправлять или ожидать получения данных в этом конкретном VC. Если диспетчер вызовов или драйвер MCM создали этот VC, ProtocolClIncomingCloseCall должен вернуть управление после вызова NdisCloseCall. Диспетчер вызовов или драйвер MCM также должны отключить VC (см. раздел Деактивация VC).

Если клиент изначально создал этот VC для исходящего вызова и CloseStatus NDIS_STATUS_SUCCESS, ProtocolClIncomingCloseCall может при необходимости удалить VC с помощью NdisCoDeleteVc (см. Удаление VC) или повторно использовать VC для другого вызова. Если CloseStatus не NDIS_STATUS_SUCCESS, ProtocolClcomingCloseCall должен вызвать NdisCoDeleteVc.

Если диспетчер вызовов или драйвер MCM изначально создали этот VC для входящего вызова, диспетчер вызовов или драйвер MCM может при необходимости удалить VC , вызвав соответственно NdisCoDeleteVc или NdisMCmDeleteVc.