Client-Initiated solicitação para alterar parâmetros de chamada
Um cliente solicita uma alteração na qualidade do serviço (QoS) em uma VC (conexão virtual) ativa com NdisClModifyCallQoS.
A figura a seguir mostra o cliente de um gerenciador de chamadas solicitando uma alteração na qualidade do serviço.
A figura a seguir mostra o cliente de um driver MCM solicitando uma alteração na qualidade do serviço.
Na chamada para NdisClModifyCallQoS, o cliente fornece:
Um parâmetro NdisVcHandle que identifica a VC.
Um ponteiro para uma estrutura CO_CALL_PARAMETERS que contém os parâmetros de chamada que o cliente está solicitando.
As circunstâncias sob as quais um cliente pode solicitar uma alteração na QoS são determinadas pelo protocolo de sinalização.
A chamada para NdisClModifyCallQoS faz com que o NDIS chame a função ProtocolCmModifyCallQoS do gerenciador de chamadas ou do driver MCM, que insira o NdisVcHandle e a estrutura de CO_CALL_PARAMETERS em buffer que o cliente passa para NdisClModifyCallQoS. ProtocolCmModifyQoS comunica-se com dispositivos de controle de rede ou outros agentes específicos de mídia, conforme necessário por sua mídia, para modificar os parâmetros de chamada específicos da mídia para uma conexão virtual estabelecida.
Depois de se comunicar com a rede e determinar que as alterações foram bem-sucedidas, um gerenciador de chamadas deve chamar NdisCmActivateVc(e um driver MCM deve chamar NdisMCmActivateVc) para ativar a VC especificada com os novos parâmetros de chamada.
Se a rede não aceitar os novos parâmetros de chamada ou se o driver de miniporto subjacente não puder aceitar os parâmetros, o gerenciador de chamadas ou o driver MCM deverão restaurar a VC para o estado que existia antes de qualquer tentativa de modificação e retornar NDIS_STATUS_FAILURE.
Para indicar o status da solicitação do cliente para alterar a QoS, um gerenciador de chamadas chama NdisCmModifyCallQoSComplete e um driver MCM chama NdisMCmModifyCallQoSComplete. Nessa chamada, o gerenciador de chamadas ou o driver MCM passa:
Um NDIS_STATUS que indica o status da solicitação.
Um NdisVcHandle que identifica a VC.
Um ponteiro para uma estrutura CO_CALL_PARAMETERS que contém os parâmetros de chamada para a VC.
Se permitido pelo protocolo de sinalização, o gerenciador de chamadas ou o driver MCM podem passar parâmetros de chamada modificados de volta para o cliente. Essas modificações podem ser o produto da negociação com a rede ou podem ser fornecidas pelo gerenciador de chamadas ou pelo próprio driver MCM. Um gerenciador de chamadas ou driver MCM deve indicar que os parâmetros de chamada foram modificados definindo o sinalizador CALL_PARAMETERS_CHANGED na estrutura CO_CALL_PARAMETERS.
A chamada para Ndis(M)CmModifyCallQoSComplete faz com que o NDIS chame a função ProtocolClModifyCallQoSComplete do cliente. O NDIS passa o seguinte para ProtocolClModifyCallQoSComplete:
Um NDIS_STATUS que indica o status da solicitação do cliente para alterar a QoS.
Um identificador ProtocolVcContext que identifica a VC.
Um ponteiro para uma estrutura CO_CALL_PARAMETERS que contém os parâmetros de chamada que são passados pelo gerenciador de chamadas ou driver MCM para Ndis(M)CmModifyCallQoSComplete.
Se o sinalizador CALL_PARAMETERS_CHANGED estiver definido na estrutura CO_CALL_PARAMETERS, o cliente deverá examinar os parâmetros de chamada retornados e determinar se as modificações são aceitáveis. Se a chamada do cliente para NdisClModifyCallQoS for bem-sucedida, ProtocolClModifyCallQoSComplete poderá aceitar a alteração de QoS simplesmente retornando o controle. Caso contrário, ProtocolClModifyCallQoSComplete poderá se envolver em negociações adicionais com o gerenciador de chamadas, se permitido pelo protocolo de sinalização, desde que o desenvolvedor do cliente coloque algum limite razoável no número de possíveis renegociações. Como alternativa, ProtocolClModifyCallQoSComplete pode simplesmente derrubar a chamada com NdisClCloseCall (consulte Solicitação iniciada pelo cliente para fechar uma chamada) sempre que o gerenciador de chamadas rejeitar uma solicitação para alterar a QoS e a QoS estabelecida anteriormente se tornar inaceitável para o cliente.