Ciclo de vida de um provedor de serviços de telefonia
Este tópico fornece uma revisão de alto nível das operações tsp.
Uma sessão é o tempo durante o qual uma configuração específica permanece válida e operações de telefonia são realizadas. Um provedor de serviços pode dar suporte a muitas sessões entre o momento em que é carregado pela primeira vez e quando é finalmente liberado. Para cada sessão, o TAPI negocia a versão da interface, inicia a sessão, executa operações e, eventualmente, desliga a sessão. O provedor de serviços não deve reter informações de uma sessão para a outra.
Depois que a versão da interface for conhecida, o TAPI chamará a função TSPI_providerInit para definir todos os parâmetros operacionais. O provedor de serviços garante que todas as informações de configuração no registro sejam estáveis quando a função TSPI_providerInit for chamada. A maioria dos provedores de serviços lê todas as informações de configuração nesse momento.
As operações normais podem continuar em qualquer ordem, depois que o provedor de serviços é inicializado.
O TAPI negocia informações específicas do dispositivo por dispositivo. O TAPI e o provedor de serviços confirmam uma versão quando um dispositivo é aberto.
O provedor de serviços pode receber solicitações para selecionar e cancelar versões de extensão. Enquanto uma versão de extensão é selecionada, o dispositivo opera estritamente de acordo com essa versão de extensão específica do dispositivo.
A negociação de uma versão de extensão específica do dispositivo pode acontecer várias vezes, antes e depois que o dispositivo é aberto. O TAPI passa um intervalo de versão e o provedor de serviços escolhe e retorna um valor desse intervalo. Normalmente, o provedor de serviços tem extensões específicas do dispositivo desabilitadas.
Isso confirma o TAPI e o provedor de serviços a operar nesse nível de versão de extensão até que a seleção seja cancelada. Durante o tempo em que uma extensão específica do dispositivo está em vigor, uma tentativa de negociar um nível de versão de extensão deve permitir apenas o nível de versão que está em vigor no momento. Depois que a extensão específica do dispositivo for cancelada, uma versão diferente poderá ser negociada e selecionada.
As operações de telefone dentro do par Abrir/Fechar são mostradas na ilustração a seguir. Algumas dessas operações são síncronas, outras são assíncronas. Se uma operação for concluída de forma assíncrona, outra operação poderá ser solicitada antes da conclusão dos primeiros relatórios. Portanto, as operações podem se sobrepor de qualquer maneira. O provedor de serviços deve, eventualmente, relatar a conclusão de qualquer operação assíncrona solicitada. Fechar um telefone força a conclusão de operações assíncronas pendentes (possivelmente com uma indicação de "falha").
O ciclo de vida dos dispositivos de linha é semelhante ao ciclo de vida dos telefones, exceto que as linhas têm seus próprios procedimentos de negociação, inicialização, abertura e fechamento. As operações em linhas abertas são entre colchetes pelo próprio par Abrir/Fechar . Esse par, por sua vez, está entre colchetes entre o mesmo par Inicialização/Desligamento que o telefone Abrir/Fechar.
Os ciclos de vida das chamadas são entre colchetes estritamente entre Abrir /Fechar da linha que as contém. Os tempos de vida das chamadas podem começar de várias maneiras:
- Solicitado do TAPI por meio de funções como lineMakeCall, lineSetupTransfer ou lineSetupConference.
- Originou-se espontaneamente no provedor de serviços como novas chamadas de entrada, chamadas iniciadas pelo usuário em um aparelho telefônico anexado ou chamadas geradas como um efeito colateral de outras operações, como colocar uma chamada existente em espera.
Os tempos de vida de chamadas distintas dentro da mesma linha podem se sobrepor de qualquer maneira. Todas as chamadas encerram seu tempo de vida no momento em que a função TSPI TSPI_lineCloseCall é invocada. O ciclo de vida de várias chamadas é mostrado na ilustração a seguir.
Uma chamada pode ser originada no TAPI, conforme mostrado com o par MakeCall/CloseCall . Uma chamada também pode ser originada no provedor de serviços. O provedor de serviços anuncia isso com uma mensagem de LINE_NEWCALL para um procedimento de retorno de chamada fornecido pelo TAPI. Nesse caso, TAPI retorna seu identificador para a chamada, que é incluído em retornos de chamada subsequentes relatando eventos que ocorrem na chamada. No caso de chamadas cujo tempo de vida se origina no TAPI, esse identificador é incluído na operação TSPI que cria a chamada.
Todas as operações que iniciam o tempo de vida de uma chamada resultam em TAPI e provedor de serviços trocando identificadores para a nova chamada. No caso de chamadas originadas por TAPI, o TAPI passa seu identificador e recebe o identificador do provedor de serviços como um parâmetro de retorno. No caso em que a chamada se origina no provedor de serviços, o provedor de serviços passa seu identificador para TAPI e recebe o identificador TAPI como um parâmetro de retorno.
A ilustração a seguir oferece uma exibição muito alta da instalação, configuração e remoção do provedor de serviços; sequências de ciclo de vida que abrangem muitas sessões. O ciclo de vida típico dessas operações pode ser mostrado com a linha de tempo a seguir.
O ciclo de vida típico de instalação e remoção é mostrado, abrangendo várias sessões. As chamadas para os procedimentos Instalar e Remover são estritamente emparelhadas e não se sobrepõem. As chamadas para o procedimento Config podem ocorrer várias vezes nesse par. Normalmente, uma é feita pelo provedor de serviços como um efeito colateral interno do procedimento Install para criar entradas de linha e telefone. O procedimento Config pode ser chamado em outros momentos para alterar uma configuração existente. O procedimento Install deve ser feito antes que qualquer outra função TSPI seja permitida. No cenário ideal, todas as sessões são estritamente aninhadas dentro do par de procedimentos Instalar/Remover .
As funções TSPI_providerInstall, TSPI_providerConfig e TSPI_providerRemove interagem com o próprio provedor de serviços em vez de com qualquer dispositivo específico. Elas afetam as informações de configuração estática que sobrevivem em várias sessões e devem estar presentes para que qualquer outra operação prossiga. Assim, todas as outras operações são aninhadas entre a invocação de TSPI_providerInstall e a conclusão de sua TSPI_providerRemove correspondente. Essas duas operações normalmente acontecem muito distantes, provavelmente em uma carga diferente do provedor de serviços ou em uma inicialização diferente do computador. Chamar a função Config externamente é opcional, pois o procedimento Install é necessário para incluir o comportamento de Configuração além do próprio. O motivo usual para chamá-lo externamente é modificar uma configuração existente.
Há uma sutileza inserida no conceito de conclusão de uma operação de TSPI_providerRemove . É desejável permitir que o usuário execute o utilitário Painel de Controle telefonia fornecido com o serviço de telefonia para alterar as configurações do provedor de serviços, mesmo quando as operações de telefonia (sessões) estiverem em andamento. Consequentemente, as especificações de TSPI_providerConfig e TSPI_providerRemove permitem a invocação enquanto há uma sessão pendente. No entanto, todas as alterações na configuração devem ser atrasadas até que as operações de telefonia sejam desligadas e reiniciadas. Portanto, estritamente falando, a conclusão de qualquer operação de TSPI_providerConfig ou TSPI_providerRemove ocorre fora de qualquer sessão. O aninhamento de ações é conforme mostrado na figura, embora as chamadas de procedimentos possam aparecer em uma ordem ligeiramente diferente. É permitido que um provedor de serviços simplesmente não permitir a Configuração ou Remover enquanto as operações estiverem em andamento, embora o usuário deva ser notificado com uma caixa de diálogo. Uma implementação mais amigável que permite pelo menos um subconjunto de operações é preferencial.
Essas operações Instalar, Configurar e Remover têm o efeito colateral de sinalizar todos os aplicativos de telefonia em execução, o que eventualmente faz com que eles desliguem o uso do serviço de telefonia. Juntos, isso encerra todas as sessões pendentes para provedores de serviços. Isso significa aos provedores de serviços que eles devem ler a nova configuração do Registro quando novas sessões começarem. Todas as alterações que estavam pendentes devido a uma configuração ou remoção enquanto as operações estavam em andamento entrarão em vigor.