TSPI のバージョン管理
時間の経過と同時に、TAPI、アプリケーション、およびサービス プロバイダーの異なるバージョンが生成される可能性があります。 これらの新しいバージョンでは、新機能、データ構造の新しいメンバー、新しいビット フィールドなど、新しい定義を作成できます。 したがって、さまざまなデータ構造を解釈する方法を示すには、バージョン番号が必要です。
さまざまなバージョンのアプリケーション、TAPI 自体のバージョン、および異なるベンダーによるサービス プロバイダーのバージョンの最適な相互運用性を実現するために、Microsoft テレフォニーはアプリケーション用の単純なバージョン ネゴシエーション メカニズムを提供します。 TAPI と各回線デバイスのテレフォニー サービス プロバイダーで合意する必要がある 2 つの異なるバージョンがあります。 1 つ目は、 TSPI インターフェイス バージョンと呼ばれる Basic テレフォニー SPI と補助テレフォニー SPI のバージョン番号です。 もう 1 つはプロバイダー固有の拡張機能 (存在する場合) 用であり、 拡張機能バージョンと呼ばれます。 TSPI の基本機能と補助機能で使用されるデータ構造とデータ型の形式は TSPI バージョンによって定義され、拡張バージョンはベンダー固有の拡張機能によって定義されるデータ構造の形式を決定します。
この 2 種類のバージョン ネゴシエーションは、2 つの異なる手順によって処理されます。 TSPI_lineNegotiateTSPIVersion は TSPI インターフェイスのバージョンをネゴシエートするために使用され、 TSPI_lineNegotiateExtVersion を使用して拡張機能のバージョンをネゴシエートします。 拡張機能が不要な場合は、拡張機能のバージョン ネゴシエーションをスキップできます。 ネゴシエーション中にこれらの範囲の入力が重複する場合、サービス プロバイダーはネゴシエーションの結果として範囲の重複部分内の値を返す必要があります。 通常、これは可能な限り高い値である必要があります。 範囲が重複しない場合、2 つのパーティは互換性がありません。関数はエラーを返します。
ネゴシエーションの結果は、サービス プロバイダーが特定のバージョン番号で操作する意思があることを示しているだけですが、サービス プロバイダーはそうすることをコミットしません。 たとえば、TAPI は再ネゴシエーションして、可能なバージョンをネゴシエートした後に、理想的なバージョンを決定できます。 TSPI インターフェイス バージョンは、 TSPI_lineOpenを使用 して回線が開かれたときにのみコミットされ、デバイスが閉じられるまで存続します。 拡張機能のバージョンは、 TSPI_lineSelectExtVersion 関数が呼び出されたときにコミットされ、拡張機能バージョン 0 を選択して選択が取り消されるまで存続します。
拡張機能のバージョンの選択は、拡張機能のバージョンが有効になっている間など、何度も行われる可能性があります。 サービス プロバイダーは拡張機能バージョンにコミットされるため、サポートされているバージョンの範囲は、その拡張機能のバージョンに厳密に絞り込まれます。 たとえば、通常は拡張機能バージョン 1.0 から 5.5 と互換性があるサービス プロバイダーを考えてみましょう。 呼び出し元が 1.0 から 5.5 の範囲のバージョンをネゴシエートしようとしているときにバージョン 3.0 が有効な場合、ネゴシエーションは 3.0 を返します。
TAPI はバージョンをネゴシエートするため、TAPI もアップグレードしなくても、サービス プロバイダーを新しいバージョンのインターフェイスにアップグレードできます。 同様に、TAPI はアップグレードできますが、古いサービス プロバイダーを引き続き使用できます。