Controle de versão do TSPI

Ao longo do tempo, diferentes versões do TAPI, aplicativos e provedores de serviços podem ser produzidas. Essas novas versões podem criar novas definições, como para novos recursos, novos membros em estruturas de dados e novos campos de bits. Portanto, os números de versão são necessários para indicar como interpretar várias estruturas de dados.

Para permitir a interoperabilidade ideal de diferentes versões de aplicativos, versões do próprio TAPI e versões de provedores de serviços por diferentes fornecedores, a Telefonia da Microsoft fornece um mecanismo de negociação de versão simples para aplicativos. Há duas versões diferentes que precisam ser acordadas pela TAPI e pelo provedor de serviços de telefonia para cada dispositivo de linha. O primeiro é o número de versão do SPI de Telefonia Básica e Suplementar, conhecido como a versão da interface TSPI. O outro é para extensões específicas do provedor, se houver, e é chamado de versão de extensão. O formato das estruturas de dados e dos tipos de dados usados pelos recursos Básico e Suplementar do TSPI é definido pela versão do TSPI, enquanto a versão da extensão determina o formato das estruturas de dados definidas pelas extensões específicas do fornecedor.

Esses dois tipos de negociação de versão são tratados por dois procedimentos diferentes: TSPI_lineNegotiateTSPIVersion é usado para negociar a versão da interface TSPI e TSPI_lineNegotiateExtVersion é usado para negociar a versão da extensão. A negociação de versão da extensão poderá ser ignorada se as extensões não forem desejadas. Se esses intervalos de entrada durante a negociação se sobrepõem, o provedor de serviços deverá retornar um valor dentro da parte sobreposta do intervalo como resultado da negociação. Normalmente, esse deve ser o valor mais alto possível. Se os intervalos não se sobrepõem, as duas partes serão incompatíveis e a função retornará um erro.

Os resultados de uma negociação simplesmente indicam que o provedor de serviços está disposto a operar em um número de versão específico, mas não confirma o provedor de serviços para fazê-lo. Por exemplo, o TAPI pode renegociar para determinar uma versão ideal depois de ter negociado uma versão possível. A versão da interface TSPI só é confirmada quando uma linha é aberta usando TSPI_lineOpen e sobrevive até que o dispositivo seja fechado. A versão da extensão é confirmada quando a função TSPI_lineSelectExtVersion é chamada e sobrevive até que a seleção seja cancelada selecionando a extensão versão zero.

A seleção de versão da extensão pode acontecer muitas vezes, inclusive enquanto uma versão de extensão está em vigor. Como o provedor de serviços está comprometido com a versão da extensão, seu intervalo de versões com suporte se restringe exatamente a essa versão de extensão. Por exemplo, considere um provedor de serviços que normalmente é compatível com as versões de extensão 1.0 a 5.5. Se a versão 3.0 estiver em vigor enquanto um chamador tentar negociar uma versão dentro do intervalo de 1.0 a 5.5, a negociação retornará 3.0.

Como o TAPI negocia a versão, você pode atualizar um provedor de serviços para novas versões da interface sem exigir que o TAPI também seja atualizado. Da mesma forma, o TAPI pode ser atualizado, mas ainda usa seu provedor de serviços mais antigo.