ダイアログとは,TP1/NET/OSI-TPがOSI TPプロトコルに準拠して提供する,メッセージ送受信のサービスです。ダイアログ開始要求(TP-BEGIN-DIALOGUE)をすることで,メッセージの送受信ができるようになります。
ダイアログ開始には,確認型と拒否応答型があります。確認型では,ダイアログ開始要求をしたあと,相手システムから,受諾または拒否応答を必ず受信します。拒否応答型では,ダイアログの開始を受け入れない場合に,相手システムに対して拒否応答を返します。これらの型は,ダイアログ開始要求時に,確認項目(Confirmation)で指定します。
ダイアログ開始要求をする場合には,次の三つの条件を満たす必要があります。
コンテンションとは,ダイアログ開始時に,両方のシステムから開始要求が出される状態をいいます。TP1/NET/OSI-TPでは,コンテンションの勝者になるか,敗者になるかをシステム定義で指定します。勝者を指定した場合だけ,ダイアログ開始要求を出せます。
相手システムからダイアログ開始要求を受けると,TP1/NET/OSI-TPはメッセージを編集し,UAPを起動します。UAPは,編集されたメッセージをRECEIVE文またはreceive関数で受け取ったあと,応答を送信します。確認型の場合は,ダイアログ開始応答をTP1/NET/OSI-TPに送信します。拒否応答型の場合は,ダイアログ開始要求を受け入れない場合だけ,TP1/NET/OSI-TPは,拒否応答のメッセージを編集し,相手システムに返します。
UAPがコネクショングループ名を指定してダイアログ開始要求をすると,TP1/NET/OSI-TPはコネクショングループ内の使用できるコネクションを自動的に選択して,ダイアログを開始します。
ダイアログを終了するときは,ダイアログ終了要求を出します。このとき,メッセージの送受信は終了させておきます。半二重の場合,ダイアログ終了要求は制御権のある側だけが出すことができます。
ダイアログ終了には,確認型と非確認型があります。確認型では,相手システムから終了の応答を必ず受信し,非確認型では,自システムは一方的にダイアログを終了します。型の指定は,ダイアログ終了要求時に確認項目(Confirmation)で行います。
ダイアログ終了時,UAPはSENDSYNC文またはsendsync関数でダイアログ終了要求をTP1/NET/OSI-TPに送信します。確認型の場合は,相手システムからのダイアログ終了応答を受信します。
相手システムからダイアログ終了要求を受けた場合は,TP1/NET/OSI-TPはUAPにダイアログ終了要求を渡します。確認型の場合,UAPはSENDSYNC文,またはsendsync関数でダイアログ終了応答をTP1/NET/OSI-TPに送信します。確認型でダイアログ終了を受け入れない場合は,ダイアログ終了拒否応答を送信します。
なお,ダイアログを終了しても,コネクションの確立状態は継続できます。
ダイアログによるメッセージ送受信では,プロトコル固有のインタフェースを使用します。インタフェースの詳細については,「3. メッセージ送受信インタフェース」の「サービスプリミティブ」を参照してください。
ダイアログの開始と終了を次の図に示します。
図2-17 ダイアログの開始と終了
ダイアログの異常終了には,自システムおよび相手システムのUAPでの異常検知による終了と,TP1/NET/OSI-TPまたは相手システムによる異常検知による終了とがあります。自システムおよび相手システムのUAPでのダイアログの異常終了(TP-U-ABORT)では,コネクションの確立状態は継続できます。TP1/NET/OSI-TPまたは相手システムでのダイアログ異常終了では,コネクションも強制解放されます。
TP1/NET/OSI-TPでは,一つのUAPでダイアログの開始から終了までの一連のメッセージ送受信をする必要があります。TP1/NET/OSI-TPは,UAPの終了時に未終了のダイアログを中止します。また,UAPからロールバックの資源回復要求をする場合,その要求はダイアログとは無関係です。ダイアログを継続して使用するか,中止するかの判断はUAPに依存します。
ダイアログの開始要求時は,メッセージの応答を必ず要求するようにしてください。応答を不要とすると,相手システムがダイアログ開始要求を拒否した場合,メッセージが破棄されることがあります。また,一方のシステムからダイアログ開始要求(応答不要)後にメッセージを送信し,ダイアログ終了要求(応答不要)を送信した場合,メッセージが相手システムに届かないことがあります。
応答を不要とした場合にメッセージを破棄する例を次の図に示します。
図2-18 応答を不要とした場合のメッセージ破棄の例
TP1/NET/OSI-TPを使用して相手システムと通信する場合,ダイアログの開始要求は必ずコンテンション勝者側から行ってください。コンテンション敗者側からのダイアログ開始要求はエラーとなります。コンテンションの勝者,および敗者の指定は,相手システムとの間で事前に取り決めておいてください。