発信の実行
アプリケーションは、発信呼び出しを試みる場合、最初に 1 行を開く必要があります。 1 行は、アプリケーションが TAPI lineOpen 関数を呼び出す結果として開かれます。 以前に開いた行に電話呼び出しを行う場合、アプリケーションは TAPI lineMakeCall 関数を呼び出し、特定の宛先アドレスへポインターを渡します。 デフォルト呼び出しセットアップ パラメーター以外のパラメーターが要求された場合、アプリケーションは LINECALLPARAMS 構造体へもポインターを渡します。 アプリケーションで既定の呼び出しセットアップ パラメーターを使用する場合、lineMakeCall はこれらのパラメーターを LINECALLPARAMS 構造体で提供します。 この構造体のメンバーは、電話呼び出しのセットアップ方法を指定します。
これらの TAPI 関数呼び出しにより、NDPROXY ドライバーは、最初に CoNDIS WAN ミニポート ドライバーとの仮想接続 (VC) を作成し、それから、送信呼び出しを行うために NDIS 構造体の TAPI パラメーターをカプセル化します。 ミニポート ドライバーは、これらの TAPI パラメーターを使用して、発信呼び出しをセットアップします。 次に、発信呼び出しの接続、セットアップ、実行方法などについて説明します。
NDPROXY は NdisCoCreateVc を呼び出して、ミニポート ドライバーを使用して VC の作成を開始します。 NDPROXY が NdisCoCreateVc を呼び出した後、NDIS は同期オペレーションとして、ミニポート ドライバーに統合された呼び出しマネージャーの ProtocolCoCreateVc 関数を呼び出します。 NDIS は、VC を表すハンドルProtocolCoCreateVc に渡します。 NdisCoCreateVc への呼び出しが成功した場合、NDIS は VC ハンドルを満たし、返します。 ProtocolCoCreateVc は、後でアクティブ化される VC に対してミニポート呼び出しマネージャー (MCM) ドライバーが後続のオペレーションを実行するために必要とする動的なリソースと構造体の必要な割り当てを実行します。 このようなリソースには、メモリ バッファー、データ構造体、イベント、他の同様のリソースなどが含まれますが、それらに限定されません。
NDPROXY は、CO_AF_TAPI_MAKE_CALL_PARAMETERS 構造体内の発信呼び出しの TAPI パラメーターを指定します。 NDPROXY は、TAPI lineMakeCall 関数で渡された次の情報でこの構造体のメンバーを満たします。
- DestAddress メンバーの宛先アドレス
- ulLineID メンバーのオープンライン識別子
- LineCallParams メンバーの LINECALLPARAMS 構造体
NDPROXY は、Parameters メンバー (CO_SPECIFIC_PARAMETERS構造体内) をオーバーレイし、Length メンバー (CO_SPECIFIC_PARAMETERS 構造体内) を CO_AF_TAPI_MAKE_CALL_PARAMETERS のサイズに設定します。
NDPROXY は、CO_SPECIFIC_PARAMETERS 構造体を MediaSpecific メンバー (CO_MEDIA_PARAMETERS 構造体内) に設定します。
NDPROXY は、CO_MEDIA_PARAMETERS 構造体へのポインターを MediaParameters メンバー (CO_CALL_PARAMETERS 構造体内) に設定します。
NDPROXY が TAPI パラメーターをカプセル化すると、NDPROXY は NdisClMakeCall 関数を呼び出して発信呼び出しを開始します。 この関数呼び出しで、NDPROXY は、満たされた CO_CALL_PARAMETERS 構造体へのポインターを渡します。 NDIS は、CoNDIS WAN ミニポート ドライバーの呼び出しマネージャーの ProtocolCmMakeCall 関数を呼び出します。 ミニポート ドライバーは、CO_CALL_PARAMETERS に埋め込まれている CO_AF_TAPI_MAKE_CALL_PARAMETERS 構造体のみを調べることになります。 この場合、他の呼び出しパラメーターは意味がありません。 ミニポート ドライバーが後で発信呼び出しの VC をアクティブ化する場合、ミニポート ドライバーは NdisMCmActivateVc 関数を呼び出し、満たされた CO_CALL_PARAMETERS へポインターを渡します。
ミニポート ドライバーは、ネットワークとネゴシエートして、VC の電話呼び出しパラメーターの確立と、それらの呼び出しパラメーターにおける NIC のセットアップを行った後、NdisMCmMakeCallComplete 関数を呼び出して、VC でデータ転送を行う準備ができていることを示します。 この呼び出しでミニポート ドライバーは、VC と、電話呼び出しパラメーターに加えられた変更にハンドルを渡す必要があります。
ミニポート ドライバーは、CallMgrParameters メンバー (CO_CALL_PARAMETERS 構造体内) を変更して、帯域幅など、パケット転送のサービス品質 (QoS) を指定する必要があります。 この CallMgrParameters メンバーを設定する場合、ミニポート ドライバーは、CO_CALL_MANAGER_PARAMETERS 構造体のメンバーを満たし、この構造体を CallMgrParameters に向けます。 たとえば、VC の送信速度と受信速度を 1 秒あたりのバイト数で識別する場合、ミニポート ドライバーは、CO_CALL_MANAGER_PARAMETERS の Transmit および Receive メンバーの PeakBandwidth メンバーを設定する必要があります。 Transmit メンバーと Receive メンバーは FLOWSPEC 構造体です。 FLOWSPEC 構造体の詳細については、Microsoft Windows SDK を参照してください。
ミニポート ドライバーが電話呼び出しパラメーターを変更した場合は、CO_CALL_PARAMETERS 構造体の Flags メンバーを CALL_PARAMETERS_CHANGED により設定する必要があります。 ミニポート ドライバーによって行われた NdisMCmMakeCallComplete 呼び出しの結果として、NDIS は NDPROXY の ProtocolClMakeCallComplete 関数を呼び出して、NdisClMakeCall で開始された非同期オペレーションを完了します。
ミニポート ドライバーが正常に発信呼び出しを完了した後、NDPROXY は、呼び出しが接続されていることを TAPI アプリケーションに通知します。 次に、この TAPI アプリケーションは TAPI lineGetID 関数を呼び出して、適切な CoNDIS クライアントを見つけるように NDPROXY に通知します。 この lineGetID 呼び出しで、TAPI アプリケーションは、アプリケーションがハンドルを必要とする特定の TAPI デバイス クラスの文字列を提供します。 NDPROXY は、この文字列を使用して、特定の TAPI デバイス クラスにおいて以前 SAP を登録した CoNDIS クライアントを検索します。 CoNDIS クライアントが NDISWAN の場合、文字列は NDIS です。 NDPROXY が TAPI アプリケーションによって渡された文字列と一致する文字列で SAP を探す場合、NDPROXY は NdisMCmCreateVc を呼び出して、行われた発信呼び出しの通知をディスパッチできる NDISWAN により接続エンドポイントをセットアップします。 NDIS は、次に NDISWAN の ProtocolCoCreateVc 関数を呼び出して、VC を表すハンドルを渡します。
NDPROXY は NDISWAN により接続エンドポイントをセットアップした後、NdisCmDispatchIncomingCall 関数を呼び出して、発信呼び出しについて NDISWAN に通知します。 この呼び出しで、NDPROXY は、発信呼び出しパラメーターを含むカプセル化された CO_AF_TAPI_MAKE_CALL_PARAMETERS 構造体を渡します。 NDIS は、NDISWAN の ProtocolClIncomingCall 関数を呼び出します。その中で、NDISWAN は要求された接続を受け入れるか拒否します。 NDISWAN が自らに渡された呼び出しパラメーターを変更する場合、CALL_PARAMETERS_CHANGED により CO_CALL_PARAMETERS 構造体内の Flags メンバーを設定する必要があります。
接続を受け入れるかどうかを決定し、場合により呼び出しパラメーターを変更した後、NDISWAN は NdisClIncomingCallComplete 関数を呼び出します。 NDIS は、ミニポート ドライバーの ProtocolCmIncomingCallComplete 関数を呼び出します。 NDISWAN が発信呼び出しを受け入れたかどうか、およびミニポート ドライバーが呼び出しパラメーターに対する NDISWAN の提案された変更を受け入れるか拒否するかに応じて、ミニポート ドライバーは NdisCmDispatchCallConnected 関数か NdisCmDispatchIncomingCloseCall 関数を呼び出します。 NdisCmDispatchCallConnected は、NDPROXY が発信呼び出し用に作成した VC でデータ転送を開始できることを NDISWAN に通知します。 NdisCmDispatchIncomingCloseCall は、提案された発信呼び出しを破棄するように NDISWAN と NDPROXY に通知します。
NDISWAN が発信呼び出しを受け入れると、NDPROXY は NdisCoGetTapiCallId 関数を呼び出して、VC の NDISWAN のコンテキストを識別する文字列を取得します。 NDPROXY は、この文字列を TAPI アプリケーションに返します。 TAPI アプリケーションは、この VC コンテキスト文字列を使用して lineGetID への呼び出しを完了します。