Добавление стороны в многоточечный вызов
Клиент запрашивает добавление стороны в многоточечный вызов с помощью NdisClAddParty. Клиент может добавлять сторону только в существующий многоточечный вызов, т. е. вызов, для которого клиент предоставил ProtocolPartyContextв NdisClMakeCall (см . раздел Совершение вызова).
На следующем рисунке показан клиент диспетчера вызовов, запрашивающий добавить сторону в многоточечный вызов.
На следующем рисунке показан клиент драйвера MCM, запрашивающий добавить сторону в многоточечный вызов.
Перед вызовом NdisClAddParty клиент должен выделить и инициализировать область контекста для добавляемой стороны. Клиенты обычно передают указатель на такую контекстную область, как ProtocolPartyContext, и указатель на переменную в этой области контекста в качестве параметров NdisPartyHandle при вызове NdisClAddParty.
Помимо NdisVcHandle и ProtocolPartyContext, клиент передает параметры вызова (буферизованное CO_CALL_PARAMETERS структуры) в NdisClAddParty. Базовый сетевой носитель определяет, может ли клиент указать параметры трафика для стороннего трафика в многоточелетней виртуальной системе.
Вызов NdisClAddParty приводит к тому, что NDIS перенаправит этот запрос в функцию ProtocolCmAddParty диспетчера вызовов или драйвера MCM, с которым клиент использует данный NdisVcHandle . NDIS передает в ProtocolCmAddParty следующее:
Объект CallMgrVcContext, указывающий VC для вызова.
Указатель на структуру CO_CALL_PARAMETERS, содержащую параметры вызова, которые клиент передает в NdisClAddParty.
Объект NdisPartyHandle, определяющий добавляемую сторону.
ProtocolCmAddParty выделяет и инициализирует все динамические ресурсы, необходимые для стороны, добавляемой в вызов. Из ProtocolCmAddParty диспетчер вызовов или драйвер MCM при необходимости взаимодействует с сетевыми устройствами управления или другими агентами мультимедиа, чтобы добавить указанную сторону в многоточечный вызов.
Если клиент передал параметры вызова, которые не совпадают с уже установленными для многоточечных VC, диспетчер вызовов или драйвер MCM может, например:
Настройте параметры трафика для отдельных сторон, если базовая сетевая среда поддерживает эту функцию на виртуальных машинах с несколькими точками.
Сброс параметров трафика, предоставленных клиентом, до параметров, изначально установленных для проверяемого сервера.
Измените параметры вызова для проверяемого сервера и для каждой подключенной в данный момент стороны.
Сбой попытки клиента добавить сторону.
ProtocolCmAddParty может выполняться синхронно или, более вероятно, асинхронно с NdisCmAddPartyComplete в случае диспетчера вызовов или NdisMCmAddPartyComplete в случае драйвера MCM. Независимо от того, выполняет ли диспетчер вызовов или драйвер MCM операцию синхронно или асинхронно, он передает буферизированные параметры вызова в NDIS.
Вызов Ndis(M)CmAddPartyComplete вызывает функцию ProtocolClAddPartyComplete клиента. Если запрос клиента на добавление стороны выполнен успешно и протокол сигнализации позволяет диспетчеру вызовов или драйверу MCM изменять параметры вызова, ProtocolClAddPartyComplete должен проверить флаг CALL_PARAMETERS_CHANGED в структуре буферизованного CO_CALL_PARAMETERS, чтобы определить, были ли изменены параметры вызова. Протокол сигнализации определяет, что может сделать клиент, если он считает, что изменения CO_CALL_PARAMETERS неприемлемыми. Обычно клиент вызывает NdisClDropParty в этом случае (см. раздел Удаление стороны из многоточечных вызовов).