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


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

Клиент запрашивает изменение качества обслуживания (QoS) при активном виртуальном подключении (VC) с помощью NdisClModifyCallQoS.

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

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

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

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

В вызове NdisClModifyCallQoS клиент предоставляет:

  • Параметр NdisVcHandle , определяющий VC.

  • Указатель на структуру CO_CALL_PARAMETERS , содержащую параметры вызова, запрашиваемые клиентом.

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

Вызов NdisClModifyCallQoS вызывает функцию ProtocolCmModifyCallQoS диспетчера вызовов или драйвера MCM, которая вводит NdisVcHandle и буферизованное CO_CALL_PARAMETERS структуру, которую клиент передает в NdisClModifyCallQoS. ProtocolCmModifyQoS взаимодействует с устройствами управления сетью или другими агентами, зависящими от носителя, по необходимости для изменения параметров вызова для конкретного носителя для установленного виртуального подключения.

После взаимодействия с сетью и определения успешности изменений диспетчер вызовов должен вызвать NdisCmActivateVc(и драйвер MCM должен вызвать NdisMCmActivateVc), чтобы активировать указанный VC с новыми параметрами вызова.

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

Чтобы указать состояние запроса клиента на изменение качества обслуживания, диспетчер вызовов вызывает NdisCmModifyCallQoSComplete, а драйвер MCM — NdisMCmModifyCallQoSComplete. В этом вызове диспетчер вызовов или драйвер MCM передает следующее:

  • NDIS_STATUS, указывающий состояние запроса.

  • NdisVcHandle, идентифицирующий VC.

  • Указатель на структуру CO_CALL_PARAMETERS, содержащую параметры вызова для VC.

Если это разрешено протоколом сигнализации, диспетчер вызовов или драйвер MCM может передавать измененные параметры вызова обратно клиенту. Эти изменения могут быть результатом согласования с сетью или могут быть предоставлены диспетчером вызовов или драйвером MCM. Диспетчер вызовов или драйвер MCM должен указать, что параметры вызова были изменены путем установки флага CALL_PARAMETERS_CHANGED в структуре CO_CALL_PARAMETERS.

Вызов Ndis(M)CmModifyCallQoSComplete вызывает функцию ProtocolClModifyCallQoSComplete клиента. NDIS передает в ProtocolClModifyCallQoSComplete следующее:

  • NDIS_STATUS, указывающий состояние запроса клиента на изменение качества обслуживания.

  • Дескриптор ProtocolVcContext , идентифицирующий VC.

  • Указатель на структуру CO_CALL_PARAMETERS, содержащую параметры вызова, передаваемые диспетчером вызовов или драйвером MCM в Ndis(M)CmModifyCallQoSComplete.

Если флаг CALL_PARAMETERS_CHANGED установлен в структуре CO_CALL_PARAMETERS, клиент должен проверить возвращаемые параметры вызова и определить, допустимы ли изменения. Если вызов клиента к NdisClModifyCallQoS завершается успешно, ProtocolClModifyCallQoSComplete может принять изменение качества обслуживания, просто вернув элемент управления. В противном случае ProtocolClModifyCallQoSComplete может участвовать в дальнейших переговорах с диспетчером вызовов, если это разрешено протоколом сигнализации, и до тех пор, пока разработчик клиента устанавливает разумное ограничение на количество возможных повторных переговоров. Кроме того, ProtocolClModifyCallQoSComplete может просто отменить вызов с помощью NdisCloseCall (см. раздел Инициированный клиентом запрос на закрытие звонка), когда диспетчер вызовов отклоняет запрос на изменение качества обслуживания, и ранее установленное QoS становится неприемлемым для клиента.