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


Удаление участника из многоточечных вызовов

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

Клиент удаляет сторону из разговора в следующих ситуациях:

  • Прежде чем инициировать удаление многоточечного вызова с использованием NdisClCloseCall(см. Client-Initiated запрос на закрытие вызова), клиент должен удалить всех, кроме последней стороны, с последовательными вызовами NdisClDropParty. Клиент указывает последнюю сторону, которая будет отключена от соединения с помощью NdisClCloseCall.

  • В ответ на запрос удаленной стороны с просьбой его исключить из многоточечного вызова (см. входящий запрос на исключение стороны из многоточечного вызова), клиент вызывает из своей функции ProtocolClIncomingDropParty вызов NdisClDropParty.

Вызов клиента к NdisClDropParty заставляет NDIS вызвать функцию ProtocolCmDropParty диспетчера вызовов или драйвера MCM, который разделяет тот же NdisVcHandle для многоточечного VC.

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

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

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

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

ProtocolCmDropParty взаимодействует с устройствами управления сетями, чтобы отключить участника из существующих многоточечных вызовов. NDIS может передать ProtocolCmDropParty указатель на буфер, содержащий данные (предоставленные клиенту в вызове NdisClDropParty). ProtocolCmDropParty должен отправить все такие данные по сети до удаления подключения.

ProtocolCmDropParty может выполняться либо синхронно, либо, что более вероятно, асинхронно с NdisCmDropPartyCompleteв случае менеджера вызовов, либо с NdisMCmDropPartyCompleteв случае драйвера MCM.

Вызов Ndis(M)CmDropPartyComplete приводит к тому, что NDIS вызывает функцию ProtocolClDropPartyComplete. Если клиент находится в процессе удаления созданного многоточечного VC, ProtocolClDropPartyComplete может вызывать NdisClDropParty с любым допустимым NdisPartyHandle одной из оставшихся сторон на активном многоточечном VC клиента. Если только одна сторона остается на многоточечном VC, клиент должен удалить эту сторону, передав ее NdisPartyHandle в NdisClCloseCall(см. Client-Initiated запрос на закрытие вызова).