5.4.5 入力セグメント判定UOCインタフェース
入力セグメント判定UOCは,次に示す形式で呼び出します。
- 〈この項の構成〉
(1) 形式
- ANSI C,C++の形式
#include <eemcp.h> int uoc_func(struct eemcp_uoc_segchk *parm)
(2) 説明
入力セグメント判定UOCを呼び出すとき,MCPは次に示す所定のパラメタをparmに設定します。
(3) パラメタの内容
(a) eemcp_uoc_segchkの内容
typedef struct eemcp_uoc_segchk {
int pro_kind; … プロトコル種別
char le_name[9]; … 論理端末名称
char reserve1[7]; … 予備
int rcv_prim; … 受信サービスプリミティブ
char *rcv_data_adr; … 受信データ先頭アドレス
int rcv_data_size; … 受信データ有効サイズ
char reserve3[4]; … 予備
char *uoc_inf_adr; … MCP使用領域
int uoc_inf_size; … MCP使用領域
char reserve4[4]; … 予備
EEMCPSEGUOCPROT *pro_indv_ifa;
… プロトコル個別インタフェース領域アドレス
EEMCPUOCTIMEINF *ptimerinf_adr;
… プロトコルタイマ情報アドレス
int rtn_detail; … 詳細リターンコード
int reserve2[3]; … 予備
char *usat_adr; … ユーザSATアドレス
EEULONG usat_size; … ユーザSATサイズ
EEULONG lebuf_size; … MCP使用領域
void *lebuf; … MCP使用領域
EEULONG64 usat_large_size; … 拡張ユーザSATサイズ
char reserve5[40]; … 予備
}EEMCPUOCSEGCHK;(b) eemcp_seguoc_protの内容
typedef struct eemcp_seguoc_prot {
int rest_data_size; … 残っている該当メッセージのサイズ
int next_data_size; … 次メッセージの有効長
char *next_data_adr; … 次メッセージの先頭アドレス
int now_data_size; … 該当メッセージの有効長
int reserve[3]; … 予備
}EEMCPSEGUOCPROT;(c) eemcp_uoctimer_infの内容
typedef struct eemcp_uoctimer_inf {
int timer_code; … タイマセット指示
int timer_value; … 後続メッセージ監視タイマ値
int timer_result; … MCP使用領域
int reserve1[3]; … 予備
}EEMCPUOCTIMEINF;(d) eemcp_uocbufheadの内容
typedef struct eemcp_uocbufhead {
struct eemcp_uocbufhead *next_bufhead_adr;
… 次バッファ情報のアドレス
char *buf_adr; … 受信データのバッファアドレス
int buf_size; … 受信データのバッファサイズ
char reserve[4]; … 予備
}EEMCPUOCBUFHEAD;(4) MCPが値を設定する項目
(a) eemcp_uoc_segchk
- ●pro_kind
-
プロトコル種別として,次の値が設定されます。
- EEMCP_UOC_PRO_TCP
-
TCP/IPプロトコル
- ●le_name
-
メッセージを入力した論理端末名が設定されます。
- ●rcv_prim
-
受信サービスプリミティブとして,次の値が設定されます。
- EEMCP_UOC_RCV_BRD
-
一方送信メッセージの受信
- EEMCP_UOC_RCV_REP_SR
-
同期送受信メッセージの受信
- ●rcv_data_adr
-
受信したメッセージの先頭アドレスが設定されます。
- ●rcv_data_size
-
受信したメッセージの有効長が設定されます。
- ●uoc_inf_adr
-
MCPで使用するパラメタです。
- ●uoc_inf_size
-
MCPで使用するパラメタです。
- ●pro_indv_ifa
-
プロトコル個別インタフェース領域アドレスです。
- ●ptimerinf_adr
-
プロトコルタイマ情報アドレスが設定されます。
- ●usat_adr
-
ユーザSATエリアのアドレスが設定されます。TP1/EEのサービス定義のメモリ関連定義のsystem_user_areaオペランドに0を指定した場合は,値を参照できません。
- ●usat_size
-
ユーザSATエリアのサイズが設定されます(単位:バイト)。
ユーザSATエリアのサイズが4ギガバイト以上の場合は,0が設定されます。0の場合,ユーザSATエリアのサイズは,usat_large_sizeのエリアを参照してください。なお,ユーザSATエリアのサイズが4ギガバイト未満の場合でも,usat_large_sizeのエリアからサイズを取得できます。
- ●lebuf_size
-
MCPで使用するパラメタです。
- ●lebuf
-
MCPで使用するパラメタです。
- ●usat_large_size
-
ユーザSATエリアのサイズが設定されます(単位:バイト)。
(b) eemcp_uoctimer_inf(タイマ情報)
- ●ptimerinf_adr
-
プロトコルタイマ情報アドレスが設定されます。
- ●timer_result
-
MCPで使用するパラメタです。
(c) eemcp_uocbufhead(受信バッファ情報)
メッセージの最大サイズを拡張している場合(eemcpfunc定義コマンドのmsglenオペランドにextendを指定)に,eemcp_uoc_segchkのrcv_data_adrが指すパラメタです。受信したメッセージは複数の受信バッファに分割して渡します。
- ●next_bufhead_adr
-
次受信バッファ情報のアドレスが設定されます。最終受信バッファの場合,NULLが設定されます。
- ●buf_adr
-
受信バッファの先頭アドレスが設定されます。
- ●buf_size
-
受信バッファの有効長が設定されます。
(5) ユーザが値を設定する項目
(a) eemcp_uoc_segchk
- ●rtn_detail 〜((-19999〜-19000))
-
詳細リターンコードを設定できます。このコードはUOCがEEMCP_UOC_SGCK_NGをリターンしたときにMCPに返されます。MCPは詳細リターンコードをメッセージログファイルに出力します。
詳細リターンコードは,-19999〜-19000の範囲で指定してください。
(b) eemcp_seguoc_prot(領域アドレス)
- ●rest_data_size
-
残っている該当メッセージのサイズを設定します。
受信したメッセージのセグメントが未完成の場合は,不足分のメッセージサイズを設定します。EEMCP_UOC_SGCK_OK_NSEGでリターンした場合だけ有効です。
- ●next_data_size
-
次のメッセージサイズを設定します。受信したメッセージのセグメントが完成している場合,次のメッセージが含まれているときは,次のメッセージサイズを設定します。EEMCP_UOC_SGCK_OK_LASTでリターンした場合だけ有効です。
- ●next_data_adr
-
次のメッセージの先頭アドレスを設定します。next_data_sizeが0でない場合に設定します。
- ●now_data_size
-
該当するメッセージのサイズを設定します。next_data_sizeが0でない場合に設定します。
(c) eemcp_uoctimer_inf
- ●timer_code
-
後続メッセージ監視タイマを設定します。
受信したメッセージのセグメントが未完成の場合,後続メッセージの受信に対して監視タイマをセットするかどうかを設定します。EEMCP_UOC_SGCK_OK_NSEGでリターンした場合だけ有効です。
- EEMCP_TIME_SET
-
監視タイマをセットします。
- EEMCP_TIME_NO_SET
-
監視タイマをセットしません。
- ●timer_value 〜〈10進数字〉((1〜2550))(単位:秒)
-
後続メッセージの監視タイマの値を設定します。
この値は,監視タイマをセットする場合に設定します。timer_codeでEEMCP_TIME_SETを設定した場合だけ有効になります。監視時間は最大で1秒早くタイムアウトする場合があります。
(6) リターン値
入力セグメント判定UOCは,次のコードでリターンしてください。
|
リターン値 |
意味 |
|---|---|
|
EEMCP_UOC_SGCK_OK_NSEG |
正常リターン(セグメント未完成) |
|
EEMCP_UOC_SGCK_OK_LAST |
正常リターン(最終セグメント受信完了) |
|
EEMCP_UOC_SGCK_NG |
セグメント判定エラー |
- ■EEMCP_UOC_SGCK_NGがリターンした場合
-
UOCからEEMCP_UOC_SGCK_NGでリターンした場合,コネクションを解放してMCP後処理トランザクションを起動します。該当するメッセージは破棄します。
- ■UOCのパラメタが不正の場合
-
UOCで設定した値に不正があった場合,MCPはメッセージログを出力して,コネクションを解放します。そのあと,MCP後処理トランザクションを起動します。該当するメッセージは破棄します。
- ■受信バッファオーバフロー
-
-
メッセージ長エリアにTP1/EEサービス定義で定義した受信バッファのサイズを超える値が設定されていた場合,MCPは受信バッファオーバフローと見なし,コネクションを解放してMCP後処理トランザクションを起動します。該当するメッセージは破棄します。
-
メッセージの最大サイズを拡張していて(eemcpfunc定義コマンドのmsglenオペランドにextendを指定),かつメッセージ長エリアに設定された値が8388608を超える場合,MCPは受信バッファオーバフローと見なします。
-
(7) セグメントの組み立て
入力セグメント判定UOCでのセグメントの分割・組み立てを次の図に示します。
|
|
未完成のセグメントを次の図に示します。
|
|
完成済みのセグメント(次のメッセージが含まれている場合)を次の図に示します。
|
|
セグメントが未完成として判定されたあとに,後続メッセージを受信した場合のセグメントを次の図に示します。
|
|
(8) 受信メッセージ
受信メッセージの構成について説明します。
- ■メッセージの最大サイズを拡張していない場合
-
メッセージの最大サイズを拡張していない場合の受信メッセージの構成は,次の図に示すとおりです。
図5‒7 メッセージの最大サイズを拡張していない場合の受信メッセージの構成 - ■メッセージの最大サイズを拡張している場合
-
メッセージの最大サイズを拡張している場合(eemcpfunc定義コマンドのmsglenオペランドにextendを指定)の受信メッセージの構成は,次の図に示すとおりです。
図5‒8 メッセージの最大サイズを拡張している場合の受信メッセージの構成
(9) 注意事項
入力セグメント判定UOCが登録されていない場合は,受信した単位(入力バッファに格納された単位)を論理メッセージ(セグメント)として,該当のサービスキューに登録します。