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


Добавление стороны в многоточечный вызов

Клиент запрашивает добавление стороны в многоточечный вызов с помощью NdisClAddParty. Клиент может добавлять сторону только в существующий многоточечный вызов, т. е. вызов, для которого клиент предоставил ProtocolPartyContextв NdisClMakeCall (см . раздел Совершение вызова).

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

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

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

Схема: клиент драйвера 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 в этом случае (см. раздел Удаление стороны из многоточечных вызовов).