入力セグメント判定UOCは,メッセージを受信したとき,そのメッセージでセグメントが完成しているかどうか,完成している場合は,完成したセグメントと後続のセグメントの境界がどこであるかを判定します。UOCは,相手システムからのメッセージを受信するたびに起動します。セグメントが未完成のとき(後続メッセージがある場合)は,後続メッセージに対して,監視タイマを設定できます。
ただし,コネクションの切断を抑止している場合は,監視タイマを設定しないでください。コネクションの切断抑止については,「2.3.2(5) コネクションの切断抑止」を参照してください。
なお,入力セグメント判定UOCは,次に示す条件に該当する場合は呼び出されません。
メッセージのデータ形式の詳細については,「2.3.7 メッセージの分割と組み立て」を参照してください。
TP1/NET/TCP/IPはUOCを呼び出すと,受信したメッセージのセグメントが格納されている受信バッファを引き渡します。未完成の受信メッセージがTP1/NET/TCP/IPに蓄積されている場合,受信バッファには未完成の受信メッセージと今回受信したメッセージが連結して格納されます。UOCでは,受信バッファに格納された受信メッセージの内容を基に,セグメントが完成しているかどうかを判定し,リターン値を設定します。UOCでの判定結果別に,設定する必要がある情報について説明します。
入力セグメントの判定処理の流れを次の図に示します。ここでは,データAとデータBを相手システムから送信する場合を例に説明します。
図5-1 入力セグメントの判定処理の流れ
各パラメタに設定した値が不正の場合,TP1/NET/TCP/IPはMCFイベントを通知して,コネクションを解放します。
セグメントが未完成のとき,必要に応じて後続メッセージ監視タイマを設定できます。後続メッセージ監視タイマのセットを指示したあとで後続メッセージのタイムアウトが発生したときは,コネクションを解放してMCFイベント処理用MHPを起動します。このとき,該当メッセージは破棄されます。また,各パラメタに設定した値が不正の場合,TP1/NET/TCP/IPはMCFイベントを起動して,コネクションを解放します。
ユーザが作成する入力セグメント判定UOCの処理の流れを次の図に示します。
図5-2 入力セグメント判定の処理
UOCを呼び出した時点で残っている該当メッセージのサイズを一意に決定できない場合は,一意に決定できる情報が格納された位置までの残りサイズ,または受信バッファの残りサイズを設定してください。
UOCからDCTCP_UOC_SGCK_NGでリターンした場合,TP1/NET/TCP/IPは障害通知イベント(CERREVT)を通知します。
UOCで設定した値に不正があった場合,MCFはメッセージログを出力し,障害通知イベント(CERREVT)を通知してコネクションを解放します。該当するメッセージは破棄します。
スタート関数(dc_mcf_svstart)を発行するMCFメイン関数に,作成したUOCの関数アドレスを設定します。入力セグメント判定UOCの関数アドレスは任意に決められます。UOC関数をコンパイルして生成したUOCオブジェクトファイルを,UOC関数を登録したMCFメイン関数と結合して,TP1/NET/TCP/IPの実行形式プログラムを生成します。MCFメイン関数の詳細については,「8.2 MCFメイン関数の作成」を参照してください。
入力セグメント判定UOCには,TP1/NET/TCP/IPが標準提供するUOC(標準提供UOC)があります。標準提供UOCを使用する場合は,MCFメイン関数に標準提供UOC関数(dc_mcf_stduoc_tcp_segchk)の関数アドレスを登録します。
標準提供する入力セグメント判定UOCが正常に動作するためには,受信するメッセージの先頭4バイト(ヘッダ)にメッセージ全体の長さ(メッセージのサイズ)が設定されていなければなりません。メッセージのサイズはバイト順序がビッグエンディアン※である整数型でなければなりません。また,標準提供の入力セグメント判定UOCを使用する場合,メッセージの先頭にアプリケーション名を設定できなくなります。このため,アプリケーション名は入力メッセージ編集UOCなど,別の方法で決定してください。また,セグメント未完のときの後続メッセージに対する監視タイマ値を30秒で設定します。
メッセージの形式を次に示します。
入力セグメント判定UOCは,ヘッダ(メッセージのサイズ)の妥当性をチェックします。
受信メッセージの先頭4バイトに格納されている値(メッセージのサイズ)が4バイト未満の場合は,エラーリターンします。
入力セグメント判定UOCでエラーを検出すると,リターンコードにDCTCP_UOC_SGCK_NGを設定します。その場合,詳細リターンコード(rtn_detail)に-19001(メッセージのサイズ不正)を設定します。
標準提供UOCの処理の流れを次の図に示します。
図5-3 標準提供UOCの処理の流れ
UAPやUOCに通知するメッセージの形式を次に示します。
ホストバイトオーダがリトルエンディアンのOS(LinuxまたはWindows)では,ビックエンディアンで設定されたメッセージサイズを参照する場合,UAPまたはUOCでバイトオーダを変換してください。