Partilhar via


Indicando uma chamada de entrada

Um gerenciador de chamadas ou driver MCM é alertado para uma chamada de entrada sinalizando mensagens da rede. Dessas mensagens de sinalização, o gerenciador de chamadas ou o driver MCM extrai os parâmetros de chamada para a chamada, incluindo o SAP para o qual a chamada de entrada é endereçada.

A figura a seguir mostra um driver MCM indicando uma chamada de entrada.

Diagrama mostrando um driver MCM indicando uma chamada de entrada.

A figura a seguir mostra um gerenciador de chamadas indicando uma chamada de entrada.

Diagrama ilustrando um gerenciador de chamadas indicando uma chamada de entrada.

Se os parâmetros de chamada de entrada forem inaceitáveis para o gerenciador de chamadas ou o driver MCM, ele poderá tentar negociar uma alteração nesses parâmetros com a parte remota se essa negociação for permitida pelo protocolo de sinalização. Como alternativa, o cliente para o qual a chamada de entrada é direcionada pode tentar negociar os parâmetros de chamada depois de receber a indicação de chamada do gerenciador de chamadas ou do driver MCM (consulte Solicitação iniciada pelo cliente para alterar parâmetros de chamada). Se o gerenciador de chamadas ou o driver MCM não puder negociar parâmetros de chamada aceitáveis para a chamada com a parte remota, ele poderá recusar a chamada. O protocolo de sinalização determina o que é possível nesses casos.

Antes de indicar uma chamada de entrada para um cliente, o gerenciador de chamadas ou o driver MCM devem identificar o SAP para o qual a chamada é direcionada. O SAP deve ter sido registrado anteriormente por um cliente. O gerenciador de chamadas ou o driver MCM também deve iniciar a criação de uma VC e iniciar a ativação dessa VC.

O gerenciador de chamadas ou driver MCM indica a chamada de entrada para o cliente que registrou o SAP para o qual a chamada de entrada é direcionada. Um gerenciador de chamadas indica uma chamada de entrada com NdisCmDispatchIncomingCall. Um driver MCM indica uma chamada de entrada com NdisMCmDispatchIncomingCall.

Na chamada para Ndis(M)CmDispatchIncomingCall, o gerenciador de chamadas ou o driver MCM passa o seguinte:

  • Um NdisSapHandle que identifica o SAP ao qual a chamada de entrada é endereçada.

  • Um NdisVcHandle que identifica o circuito virtual para a chamada de entrada.

  • Um ponteiro para uma estrutura do tipo CO_CALL_PARAMETERS, que contém os parâmetros de chamada para a chamada.

A chamada para Ndis(M)CmDispatchIncomingCall faz com que o NDIS chame a função ProtocolClIncomingCall do cliente, na qual o cliente aceita ou rejeita a conexão solicitada. ProtocolClIncomingCall deve validar os parâmetros SAP, VC e call.

ProtocolClIncomingCall pode ser concluído de forma síncrona ou pode retornar NDIS_STATUS_PENDING e ser concluído de forma assíncrona com NdisClIncomingCallComplete. Uma chamada para NdisClIncomingCallComplete faz com que o NDIS chame a função ProtocolCmIncomingCallComplete do gerenciador de chamadas ou do driver MCM.

O código NDIS_STATUS que é retornado por uma conclusão síncrona de ProtocolClIncomingCall ou fornecido a NdisClIncomingCallComplete indica a aceitação ou rejeição do cliente da chamada de entrada. O cliente também retorna os parâmetros de chamada para a chamada em uma estrutura de CO_CALL_PARAMETERS em buffer. Se o cliente achar os parâmetros de chamada inaceitáveis, ele poderá, se permitido pelo protocolo de sinalização, solicitar uma alteração nos parâmetros de chamada definindo o membro Flags na estrutura CO_CALL_PARAMETERS com CALL_PARAMETERS_CHANGED e fornecendo os parâmetros de chamada revisados em uma estrutura de CO_CALL_PARAMETERS em buffer.

Se o cliente aceitar a chamada de entrada, o gerenciador de chamadas ou o driver MCM deverá enviar mensagens de sinalização para indicar à entidade de chamada que a chamada foi aceita. Caso contrário, o gerenciador de chamadas ou o driver MCM devem enviar mensagens de sinalização para indicar que a chamada foi rejeitada. Se o cliente estiver solicitando uma alteração nos parâmetros de chamada, o gerenciador de chamadas ou o driver MCM enviará mensagens de sinalização para solicitar uma alteração nos parâmetros de chamada.

Se o cliente aceitou a chamada ou se a alteração solicitada no cliente nos parâmetros de chamada foi aceita pela parte remota, um gerenciador de chamadas chama NdisCmDispatchCallConnected e um driver MCM chama NdisMCmDispatchCallConnected. A chamada para Ndis(M)CmDispatchCallConnected faz com que o NDIS chame a função ProtocolClCallConnected do cliente.

Se o cliente rejeitou a chamada e o gerenciador de chamadas ou o driver MCM já ativou uma VC para a chamada de entrada, o gerenciador de chamadas ou o driver MCM chama Ndis(M)CmDeactivateVc para desativar a VC se a VC estiver ativada. O gerenciador de chamadas ou o driver MCM podem iniciar a exclusão da VC chamando NdisCoDeleteVc no caso do gerenciador de chamadas ou NdisMCmDeleteVc no caso do driver MCM.

Se o cliente aceitou a chamada, mas a conexão de ponta a ponta não foi estabelecida com êxito (porque, por exemplo, a parte remota derrubou a chamada), o gerenciador de chamadas ou o driver MCM não chamará Ndis(M)CmDispatchCallConnected. Em vez disso, ele chamará Ndis(M)CmDispatchIncomingCloseCall, o que faz com que o NDIS chame a função ProtocolClIncomingCloseCall do cliente. Em seguida, o cliente deve chamar NdisClCloseCall para concluir a remoção da chamada. O gerenciador de chamadas ou o driver MCM chama Ndis(M)CmDeactivateVC para desativar a VC que ele criou para a chamada de entrada. O gerenciador de chamadas ou o driver MCM podem iniciar a exclusão da VC chamando NdisCoDeleteVc no caso do gerenciador de chamadas ou NdisMCmDeleteVc no caso do driver MCM.