Partilhar via


Fazer chamadas de saída

Se um aplicativo tentar fazer uma chamada de saída, ele deve primeiro abrir uma linha. Uma linha é aberta como resultado de um aplicativo chamando a função TAPI lineOpen. Para fazer uma chamada telefónica na linha já aberta, a aplicação chama a função lineMakeCall da TAPI e passa um ponteiro para o endereço de destino específico. Se for solicitado algo além dos parâmetros padrão de configuração de chamada, o aplicativo também passa um ponteiro para uma estrutura LINECALLPARAMS. Se o aplicativo usa parâmetros de configuração de chamada padrão, lineMakeCall fornece esses parâmetros em uma estrutura LINECALLPARAMS. Os membros desta estrutura especificam como a chamada telefónica deve ser configurada.

Essas chamadas de função TAPI fazem com que o driver NDPROXY primeiro crie uma conexão virtual (VC) com o driver de miniporta CoNDIS WAN e, em seguida, encapsular parâmetros TAPI em estruturas NDIS para fazer a chamada de saída. O driver de miniporta usará esses parâmetros TAPI para configurar a chamada de saída. A seguir descrevemos como a chamada de saída é conectada, configurada e feita:

  • NDPROXY chama NdisCoCreateVc para iniciar a criação do VC com o driver de miniporta. Depois que o NDPROXY chama NdisCoCreateVc, o NDIS chama, como uma operação síncrona, a função ProtocolCoCreateVc do gerenciador de chamadas integrado no driver da miniporta. O NDIS passa para ProtocolCoCreateVc um identificador que representa o VC. Se a chamada para NdisCoCreateVc for bem-sucedida, o NDIS preencherá e retornará o identificador VC. ProtocolCoCreateVc executa todas as alocações necessárias de recursos dinâmicos e estruturas que o driver MCM (miniport call manager) requer para executar operações subsequentes no VC que será ativado posteriormente. Esses recursos incluem, mas não estão limitados a, buffers de memória, estruturas de dados, eventos e outros recursos semelhantes.

  • NDPROXY especifica os parâmetros TAPI para uma chamada externa numa estrutura CO_AF_TAPI_MAKE_CALL_PARAMETERS. O NDPROXY preenche os membros desta estrutura com as seguintes informações que foram passadas na função TAPI lineMakeCall:

    • O endereço de destino no membro DestAddress
    • O identificador de linha aberta no membro ulLineID
    • A estrutura LINECALLPARAMS no membro LineCallParams
  • NDPROXY sobrepõe a estrutura CO_AF_TAPI_MAKE_CALL_PARAMETERS no membro Parameters de uma estrutura CO_SPECIFIC_PARAMETERS e define o membro Length de CO_SPECIFIC_PARAMETERS para definir o tamanho de CO_AF_TAPI_MAKE_CALL_PARAMETERS.

  • NDPROXY define a estrutura CO_SPECIFIC_PARAMETERS no membro MediaSpecific de uma estrutura CO_MEDIA_PARAMETERS.

  • NDPROXY define um ponteiro para a estrutura CO_MEDIA_PARAMETERS para o MediaParameters membro de uma estrutura CO_CALL_PARAMETERS.

  • Depois que o NDPROXY encapsula os parâmetros TAPI, o NDPROXY chama a funçãoNdisClMakeCall para iniciar a chamada de saída. Nesta chamada de função, o NDPROXY passa um ponteiro para a estrutura de dados CO_CALL_PARAMETERS preenchida. O NDIS, por sua vez, chama a função ProtocolCmMakeCall do gestor de chamadas do driver do miniport CoNDIS WAN. O miniport driver deve examinar apenas a estrutura CO_AF_TAPI_MAKE_CALL_PARAMETERS incorporada em CO_CALL_PARAMETERS. Nenhum outro parâmetro de chamada é significativo neste caso. Se o driver da miniporta ativar posteriormente o VC para a chamada de saída, o driver da miniporta chamará a função NdisMCmActivateVc e passará um ponteiro para a CO_CALL_PARAMETERS preenchida.

  • Depois que o driver de miniporta tiver negociado com a rede para estabelecer os parâmetros de chamada telefônica para o VC e configurar uma NIC para esses parâmetros de chamada, o driver de miniporta chama a funçãoNdisMCmMakeCallComplete para indicar que está pronto para fazer transferências de dados no VC. Nesta chamada, o driver de miniporta deve passar o identificador para o VC e as modificações feitas nos parâmetros da chamada telefônica.

  • O driver de miniporta deve modificar o CallMgrParameters membro da estrutura de CO_CALL_PARAMETERS para especificar a qualidade de serviço (QoS) de transferência de pacotes, como a largura de banda. Para definir este membro CallMgrParameters, o driver de miniporta preenche os membros de a estrutura CO_CALL_MANAGER_PARAMETERS e associa essa estrutura a CallMgrParameters. Por exemplo, para identificar as velocidades de transmissão e receção em bytes por segundo para o VC, o driver de miniporta deve definir o PeakBandwidth membros do Transmit e Receive membros do CO_CALL_MANAGER_PARAMETERS. Os membros Transmit e Receive são estruturas de FLOWSPEC. Para obter mais informações sobre a estrutura FLOWSPEC, consulte o SDK do Microsoft Windows.

  • Se o driver de miniport tiver modificado os parâmetros de chamada de telefonia, ele deverá definir o membro Flags na estrutura CO_CALL_PARAMETERS com "CALL_PARAMETERS_CHANGED." Como resultado da chamada NdisMCmMakeCallComplete feita pelo driver de miniporta, o NDIS chama a função ProtocolClMakeCallComplete do NDPROXY para concluir as operações assíncronas que foram iniciadas com NdisClMakeCall.

  • Depois que o driver de miniporta conclui com êxito a chamada de saída, o NDPROXY notifica um aplicativo TAPI de que a chamada está conectada. Este aplicativo TAPI em seguida chama a função TAPI lineGetID para informar NDPROXY a localizar o cliente CoNDIS apropriado. Nessa chamada lineGetID, o aplicativo TAPI fornece uma cadeia de caracteres para uma classe de dispositivo TAPI específica para a qual o aplicativo requer um identificador. O NDPROXY usa essa cadeia de caracteres para localizar o cliente CoNDIS que registrou anteriormente um SAP para a classe de dispositivo TAPI específica. Se o cliente CoNDIS for NDISWAN, a cadeia de caracteres será NDIS. Se o NDPROXY localizar um SAP com uma cadeia de caracteres que corresponda à cadeia de caracteres passada pelo aplicativo TAPI, o NDPROXY chamará NdisMCmCreateVc para configurar um ponto de extremidade de conexão com NDISWAN no qual ele pode enviar notificação da chamada de saída que foi feita. O NDIS, por sua vez, chama a função ProtocolCoCreateVc do NDISWAN e passa um identificador que representa o VC.

  • Depois que o NDPROXY configura o ponto de extremidade de conexão com NDISWAN, ele chama a funçãoNdisCmDispatchIncomingCall para notificar o NDISWAN da chamada de saída. Nesta chamada, o NDPROXY passa a estrutura encapsulada CO_AF_TAPI_MAKE_CALL_PARAMETERS, que contém os parâmetros de chamada de saída. O NDIS, por sua vez, chama a função ProtocolClIncomingCall do NDISWAN, dentro da qual o NDISWAN aceita ou rejeita a conexão solicitada. Se o NDISWAN alterar os parâmetros de chamada passados para ele, deverá definir o membro Flags na estrutura CO_CALL_PARAMETERS com CALL_PARAMETERS_CHANGED.

  • Depois de decidir se aceita a conexão e depois de possivelmente alterar os parâmetros da chamada, NDISWAN chama a funçãoNdisClIncomingCallComplete. O NDIS, por sua vez, chama a função ProtocolCmIncomingCallComplete do driver de miniporta. Dependendo se o NDISWAN aceitou a chamada de saída e se o driver de miniporta aceita ou rejeita as alterações propostas por NDISWAN para os parâmetros de chamada, o driver de miniporta chama as funções NdisCmDispatchCallConnected ou NdisCmDispatchIncomingCloseCall. NdisCmDispatchCallConnected notifica o NDISWAN que as transferências de dados podem começar no VC que o NDPROXY criou para a chamada efetuada. NdisCmDispatchIncomingCloseCall informa a NDISWAN e a NDPROXY para derrubar a chamada de saída proposta.

  • Depois que o NDISWAN aceita a chamada de saída, o NDPROXY chama a função NdisCoGetTapiCallId para recuperar uma cadeia de caracteres que identifica o contexto do NDISWAN para o VC. NDPROXY passa essa cadeia de caracteres de volta para o aplicativo TAPI. O aplicativo TAPI usa essa cadeia de caracteres de contexto VC para concluir sua chamada para lineGetID.