Compartilhar via


Negociação de versão do TAPI

Com o tempo, diferentes versões podem existir para TAPI, aplicativos e provedores de serviços para uma linha ou telefone. Novas versões podem definir novos recursos, novos campos para estruturas de dados e assim por diante. Os números de versão, portanto, indicam 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, o TAPI fornece um mecanismo simples de negociação de versão em duas etapas para aplicativos. Duas versões diferentes devem ser acordadas pelo aplicativo, TAPI e o provedor de serviços para cada dispositivo de linha. O primeiro é o número de versão da Telefonia Básica e Complementar e é conhecido como a versão da API. A outra é para extensões específicas do provedor, se houver, e é conhecida como a versão de extensão. O formato das estruturas de dados e dos tipos de dados usados pelos recursos básicos e complementares do TAPI é definido pela versão da API, enquanto a versão de extensão determina o formato das estruturas de dados definidas pelas extensões específicas do fornecedor.

A negociação de versão prossegue em duas fases. Na primeira fase, o número de versão da API é negociado e o identificador de extensão associado a quaisquer extensões específicas do fornecedor com suporte no dispositivo é obtido. Na segunda fase, a versão da extensão é negociada. Se o aplicativo não usar extensões de API, ele ignorará a segunda fase e as extensões não serão ativadas pelo provedor de serviços. Se o aplicativo quiser usar extensões, mas as extensões do provedor de serviços (o identificador de extensão) não forem reconhecidas pelo aplicativo, o aplicativo também deverá ignorar a negociação para a versão de extensão. Cada fornecedor tem seu próprio conjunto de versões legais (reconhecidas) para cada conjunto de especificações de extensão que distribui.

A funçãolineNegotiateAPIVersioné usada para negociar o número de versão da API a ser usado. Ele também recupera o identificador de extensão compatível com o dispositivo de linha, retornando zeros se nenhuma extensão tiver suporte. Com essa chamada de função, o aplicativo fornece o intervalo de versão da API com o qual ele é compatível. O TAPI, por sua vez, negocia com o provedor de serviços da linha para determinar qual intervalo de versão de API ele dá suporte. Em seguida, o TAPI seleciona um número de versão (normalmente, embora não necessariamente, o número de versão mais alto) no intervalo de versão sobreposto que o aplicativo, a DLL e o provedor de serviços forneceram. Esse número é retornado ao aplicativo, juntamente com o identificador de extensão que define as extensões disponíveis do provedor de serviços dessa linha.

Se o aplicativo quiser usar as extensões definidas pelo identificador de extensão retornado, ele deverá primeiro chamar lineNegotiateExtVersion para negociar a versão da extensão. Em uma fase de negociação semelhante, o aplicativo especifica a versão da API já acordada e o intervalo de versão de extensão compatível. O TAPI passa essas informações para o provedor de serviços da linha. O provedor de serviços verifica a versão da API e o intervalo de versão de extensão em relação ao seu próprio e seleciona o número de versão de extensão apropriado, se houver.

Quando o aplicativo mais tarde chama lineGetDevCaps, ele retorna um conjunto de recursos de dispositivo para a linha que corresponde aos resultados da negociação de versão. Isso inclui os recursos de dispositivo da linha consistentes com a versão da API e as funcionalidades específicas do dispositivo da linha consistentes com a versão de extensão. O aplicativo deve especificar ambos os números de versão quando abrir uma linha. Nesse ponto, o aplicativo, a DLL e o provedor de serviços estão comprometidos em usar as versões acordadas. Se as extensões específicas do dispositivo não forem usadas, a versão da extensão deverá ser especificada como zero.

Em um ambiente em que vários aplicativos abrem o mesmo dispositivo de linha, o primeiro aplicativo para abrir o dispositivo de linha seleciona as versões para todos os aplicativos futuros que desejam usar a linha (os provedores de serviço não dão suporte a várias versões simultaneamente).) Da mesma forma, um aplicativo que abre vários dispositivos de linha pode achar mais fácil operar todos os dispositivos de linha no mesmo número de versão da API.

Cada função que usa um dwAPIVersion ou parâmetro semelhante deve definir esse parâmetro como a versão de API mais alta compatível com o aplicativo ou a versão da API negociada usando alineNegotiateAPIVersionou phoneNegotiateAPIVersion em um dispositivo específico. Use a tabela a seguir como guia:

Função Significado
lineGetAddressCaps Usar a versão retornada por lineNegotiateAPIVersion.
lineGetCountry Use a versão mais alta com suporte do aplicativo.
lineGetDevCaps Usar a versão retornada por lineNegotiateAPIVersion.
lineGetProviderList Use a versão mais alta com suporte do aplicativo.
lineGetTranslateCaps Use a versão mais alta com suporte do aplicativo.
lineNegotiateAPIVersion Use a versão mais alta com suporte do aplicativo.
lineNegotiateExtVersion Usar a versão retornada por lineNegotiateAPIVersion.
lineOpen Usar a versão retornada por lineNegotiateAPIVersion.
lineTranslateAddress Use a versão mais alta com suporte do aplicativo.
lineTranslateDialog Use a versão mais alta com suporte do aplicativo.
phoneGetDevCaps Use a versão retornada por phoneNegotiateAPIVersion.
phoneNegotiateAPIVersion Use a versão mais alta com suporte do aplicativo.
phoneNegotiateExtVersion Use a versão retornada por phoneNegotiateAPIVersion.
phoneOpen Use a versão retornada por phoneNegotiateAPIVersion.

 

Importante

Ao negociar uma versão da API, sempre defina os números de versão alto e baixo para o intervalo de versões que seu aplicativo pode dar suporte. Por exemplo, nunca use 0x00000000 para a versão baixa ou 0xFFFFFFFF para a alta, pois esses valores exigem que seu aplicativo dê suporte a todas as versões do TAPI, passadas e futuras.