次の方法で共有


テレフォニー サービス プロバイダーのライフ サイクル

このトピックでは、TSP 操作の概要を説明します。

セッションとは、特定の構成が有効なままで、テレフォニー操作が実行される時間です。サービス プロバイダーは、最初に読み込まれてから最終的に解放されるまでの間に、多くのセッションをサポートできます。 各セッションについて、TAPI はインターフェイスのバージョンをネゴシエートし、セッションを開始し、操作を実行して、最終的にセッションをシャットダウンします。 サービス プロバイダーは、あるセッションから次のセッションに情報を保持することはできません。

インターフェイスのバージョンがわかったら、TAPI は TSPI_providerInit 関数を呼び出して、すべての操作パラメーターを設定します。 サービス プロバイダーは、 TSPI_providerInit 関数が呼び出されたときに、レジストリ内のすべての構成情報が安定していることを確認します。 ほとんどのサービス プロバイダーは、その時点ですべての構成情報を読み取ります。

通常の操作は、サービス プロバイダーが初期化された後、任意の順序で続行できます。

TAPI は、デバイスごとにデバイス固有の情報をネゴシエートします。 TAPI とサービス プロバイダーは、デバイスを開いたときにバージョンにコミットします。

サービス プロバイダーは、拡張機能のバージョンを選択して取り消す要求を受け取ることができます。 拡張機能のバージョンが選択されている間、デバイスはそのデバイス固有の拡張機能のバージョンに厳密に従って動作します。

デバイス固有の拡張機能バージョンのネゴシエーションは、デバイスが開かれる前と後の両方で複数回発生する可能性があります。 TAPI はバージョン範囲を渡し、サービス プロバイダーはこの範囲の値を選択して返します。 通常、サービス プロバイダーでは、デバイス固有の拡張機能が無効になっています。

これにより、TAPI とサービス プロバイダーの両方が、選択が取り消されるまで、その拡張機能のバージョン レベルで動作するようにコミットされます。 デバイス固有の拡張機能が有効になっている間に、拡張機能のバージョン レベルをネゴシエートしようとすると、現在有効なバージョン レベルのみが許可されます。 デバイス固有の拡張機能が取り消されると、別のバージョンをネゴシエートして選択できます。

Open/Close ペア内の電話操作を次の図に示します。 これらの操作の一部は同期的であり、他の操作は非同期です。 操作が非同期的に完了した場合は、最初のレポートが完了する前に別の操作を要求できます。 したがって、操作は何らかの方法で重複する可能性があります。 サービス プロバイダーは、要求された非同期操作の完了を最終的に報告する必要があります。 電話を閉じると、未処理の非同期操作が強制的に完了します ("障害" 表示が表示される可能性があります)。

回線デバイスのライフ サイクルは、電話のライフ サイクルに似ていますが、回線には独自のネゴシエーション、初期化、開く、閉じる手順があります。 開いている行に対する操作は、独自の Open/Close ペアで角かっこで囲まれています。 このペアは、電話機のオープン/クローズと同じ初期化/シャットダウン ペアの間で角かっこで囲まれます。

呼び出しのライフ サイクルは、呼び出しを含む行の Open/Close の間に厳密にかっこで囲まれます。 呼び出しの有効期間は、いくつかの方法で開始できます。

  • LINEMakeCalllineSetupTransferlineSetupConference などの関数を介して TAPI から要求されます。
  • サービス プロバイダーで、新しい着信、接続されている電話受話器でのユーザー開始呼び出し、または既存の通話を保留にするなどの他の操作の副作用として生成された通話として自発的に発信されます。

同じ行内の個別の呼び出しの有効期間は、どのような方法でも互いに重複する可能性があります。 すべての呼び出しは、TSPI 関数 TSPI_lineCloseCall が呼び出された時点で有効期間を終了します。 次の図に、複数の呼び出しのライフ サイクルを示します。

重複する呼び出しのライフ サイクル

呼び出しは、 MakeCall/CloseCall ペアで示されているように TAPI で発信できます。 呼び出しは、サービス プロバイダーでも発信できます。 サービス プロバイダーは、TAPI が指定したコールバック プロシージャに LINE_NEWCALL メッセージでこれを読み上げる。 このような場合、TAPI は呼び出しの識別子を返します。これは、呼び出しで発生するイベントを報告する後続のコールバックに含まれます。 TAPI で有効期間が発生した呼び出しの場合、この識別子は呼び出しを作成する TSPI 操作に含まれます。

呼び出しの有効期間を開始するすべての操作により、TAPI とサービス プロバイダーは新しい呼び出しの識別子を交換します。 TAPI が発信した呼び出しの場合、TAPI はその識別子を渡し、サービス プロバイダーの識別子を戻り値パラメーターとして受け取ります。 サービス プロバイダーで呼び出しが発生した場合、サービス プロバイダーはその識別子を TAPI に渡し、TAPI 識別子を戻り値パラメーターとして受け取ります。

次の図は、サービス プロバイダーのインストール、構成、および削除の概要を示しています。多くのセッションにまたがるライフサイクル シーケンス。 これらの操作の一般的なライフ サイクルは、次のタイム ラインで示すことができます。

サービス プロバイダーのインストール、構成、および削除

一般的なインストールと削除のライフ サイクルが示され、複数のセッションにまたがっています。 Install プロシージャと Remove プロシージャの呼び出しは厳密にペアになり、重複しません。 Config プロシージャの呼び出しは、このペア内で複数回発生する可能性があります。 1 つは通常、回線と電話のエントリを作成するための インストール 手順の内部副作用として、サービス プロバイダーによって行われます。 Config プロシージャは、既存のセットアップを変更するために、他の時点で呼び出される場合があります。 他の TSPI 機能を許可する前に、 インストール 手順を実行する必要があります。 理想的なシナリオでは、すべてのセッションが Install/Remove プロシージャ ペア内で厳密に入れ子になっています。

関数 TSPI_providerInstallTSPI_providerConfigおよびTSPI_providerRemove は、特定のデバイスではなく、サービス プロバイダー自体と対話します。 これらは、複数のセッション間で存続する静的構成情報に影響を与え、他の操作を続行するために存在する必要があります。 したがって、他のすべての操作は、 TSPI_providerInstall の呼び出しと一致する TSPI_providerRemoveの完了の間に入れ子になります。 通常、これら 2 つの操作は非常に離れて発生します。サービス プロバイダーの負荷が異なるか、コンピューターのブートが異なる可能性が高くなります。 Config 関数を外部で呼び出すことは省略可能です。これは、独自の動作に加えて Config の動作を含めるためにインストール プロシージャが必要であるためです。 外部で呼び出す通常の理由は、既存の構成を変更することです。

TSPI_providerRemove操作の完了の概念には、微妙な部分が埋め込まれています。 テレフォニー操作 (セッション) が進行中であっても、ユーザーがテレフォニー サービスに付属のテレフォニー コントロール パネル ユーティリティを実行してサービス プロバイダーの構成を変更できるようにすることが望ましいです。 したがって、 TSPI_providerConfigTSPI_providerRemove の両方の仕様で、未処理のセッションがある間に呼び出しが可能になります。 ただし、テレフォニー操作がシャットダウンされて再起動されるまで、構成に対する変更を遅延させる必要があります。 したがって、厳密には、 TSPI_providerConfig または TSPI_providerRemove 操作の完了は、セッション外で行われます。 プロシージャの呼び出しが少し異なる順序で表示される場合でも、アクションの入れ子は図のように表示されます。 サービス プロバイダーは、操作の進行中に Config または Remove を許可するだけで済みますが、ユーザーにはダイアログ ボックスで通知する必要があります。 操作の少なくともサブセットを許可する、より使いやすい実装をお勧めします。

これらの インストール構成および削除 操作はすべて、実行中のテレフォニー アプリケーションにシグナルを通知する副作用があり、最終的にテレフォニー サービスの使用がシャットダウンされます。 これにより、サービス プロバイダーに対するすべての未処理のセッションが終了します。 これは、新しいセッションの開始時に新しいレジストリ構成を読み取る必要があることをサービス プロバイダーに示します。 操作の進行中に Config または Remove が原因で保留中だった変更はすべて有効になります。