5.4.9 出力メッセージ編集UOCインタフェース
出力メッセージ編集UOCは,次に示す形式で呼び出します。
(1) 形式
- ANSI C,C++の形式
#include <eemcp.h> int uoc_func(struct eemcp_uoc_mout_n *parm)
(2) 説明
出力メッセージ編集UOCを呼び出すとき,MCPは次に示す所定のパラメタをparmに設定します。
(3) パラメタの内容
(a) eemcp_uoc_mout_nの内容
typedef struct eemcp_uoc_mout_n { int pro_kind; … プロトコル種別 char le_name[9]; … 論理端末名称 char reserve1[11]; … 予備 EEMCPUOCBUFLIST *buflist_adr; … 送信バッファリストアドレス EEMCPUOCBUFLIST *ebuflist_adr; … 編集バッファリストアドレス int output_no; … メッセージ出力通番 char msg_type; … メッセージ種別 char outputno_flag; … メッセージ出力通番有効フラグ char resend_flag; … MCP使用領域 char reserve2[1]; … 予備 char *pro_indv_ifa; … MCP使用領域 int rtn_detail; … 詳細リターンコード char reserve3[20]; … 予備 EEULONG *usat_adr; … ユーザSATアドレス int usat_size; … ユーザSATサイズ EEULONG lebuf_size; … MCP使用領域 void *lebuf; … MCP使用領域 EEULONG64 usat_large_size; … 拡張ユーザSATサイズ char *uifa_adr; … ユーザIFAアドレス EEULONG64 uifa_large_size; … ユーザIFAサイズ char reserve4[32]; … 予備 }EEMCPUOCMOUT;
(b) eemcp_uocbuff_list_nの内容
typedef struct eemcp_uocbuff_list_n { int buf_num; … バッファ情報数 int used_buf_num; … 使用バッファ情報数 char reserve1[8]; … 予備 EEMCPUOCBUFINF buf_array[EEMCP_UOC_BUFF_MAX]; …バッファ情報 }EEMCPUOCBUFLIST;
(c) eemcp_uocbufinf_nの内容
typedef struct eemcp_uocbufinf_n { char *buf_adr; … バッファアドレス unsigned int buf_size; … バッファ最大長 unsigned int seg_size; … バッファ使用長 char reserve1[8]; … 予備 eemcpuoc_w_type buff_id; … MCP内部情報1 char *buff_addr; … MCP内部情報2 char reserve2[8]; … 予備 }EEMCPUOCBUFINF;
(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_mout_n
- ●pro_kind
-
プロトコル種別として,次の値が設定されます。
- EEMCP_UOC_PRO_TCP
-
TCP/IPプロトコル
- EEMCP_UOC_PRO_UDP
-
UDPプロトコル
- ●le_name
-
メッセージを入力した論理端末名が設定されます。
- ●buflist_adr
-
送信用バッファリストのアドレスが設定されます。
- ●ebuflist_adr
-
編集用バッファリストのアドレスが設定されます。
メッセージ編集バッファが未定義の場合(eemcpbuf定義コマンドの-eオプションを省略した場合),ebuflist_adrにはNULLが設定されます。
- ●output_no
-
MCPで使用するパラメタです。
- ●msg_type
-
メッセージ種別として,次の値が設定されます。
- 'n'
-
非同期一方送信メッセージ
- 's'
-
同期一方送信メッセージ
- 'v'
-
同期型送受信メッセージの送信メッセージ
- ●outputno_flag
-
MCPで使用するパラメタです。
- ●resend_flag
-
MCPで使用するパラメタです。
- ●pro_indv_ifa
-
MCPで使用するパラメタです。
- ●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エリアのサイズが設定されます(単位:バイト)。
- ●uifa_adr
-
ユーザIFAエリアのアドレスが設定されます。
ユーザIFAエリアサイズが0の場合は,値を参照できません。
- ●uifa_large_size
-
ユーザIFAエリアのサイズが設定されます(単位:バイト)。
(b) eemcp_uocbuff_list_n(バッファリスト)
- ●buf_num
-
バッファ情報の数として1が設定されます。メッセージの最大サイズを拡張している場合(eemcpfunc定義コマンドのmsglenオペランドにextendを指定),1以上の整数値が設定されます。
- ●buf_array
-
バッファ情報の配列が一つ設定されます。
(c) eemcp_uocbufinf_n(バッファ情報)
- ●buf_adr
-
バッファのアドレスが設定されます。
- ●buf_size
-
バッファの最大長が設定されます。メッセージの最大サイズを拡張している場合(eemcpfunc定義コマンドのmsglenオペランドにextendを指定),送信バッファリストでは,eemcp_uocbufheadのbuf_adrが示す送信バッファの最大長が設定されます。
- ●seg_size
-
送信,または受信用バッファリストの場合だけ,バッファの使用長が設定されます。メッセージの最大サイズを拡張している場合(eemcpfunc定義コマンドのmsglenオペランドにextendを指定),メッセージの全体長が設定されます。
- ●buff_id
-
MCPで使用するパラメタです。
- ●buff_addr
-
MCPで使用するパラメタです。
(d) eemcp_uocbufhead(送信バッファ情報)
メッセージの最大サイズを拡張している場合(eemcpfunc定義コマンドのmsglenオペランドにextendを指定)に,eemcp_uocbufinf_n(送信用バッファリスト)のbuf_adrが指すパラメタです。送信要求したメッセージは,複数の送信バッファに分割して渡します。
- ●next_bufhead_adr
-
次送信バッファ情報のアドレスが設定されます。最終送信バッファの場合,NULLが設定されます。
- ●buf_adr
-
送信バッファの先頭アドレスが設定されます。
- ●buf_size
-
送信バッファの有効長が設定されます。
(5) ユーザが値を設定する項目
(a) eemcp_uoc_mout_n
- ●rtn_detail 〜((-19999〜-19000))
-
詳細リターンコードを設定します。
このコードは,UOCがEEMCP_UOC_MSG_NGでリターンしたときに,MCPに渡されます。MCPは詳細リターンコードをメッセージログファイルに出力します。
詳細リターンコードは,-19999〜-19000の範囲で指定してください。
(b) eemcp_uocbuff_list_n(バッファリスト)
- ●used_buf_num
-
使用したバッファ情報の数として,buf_numと同じ値を設定してください。
(c) eemcp_uocbufinf_n(バッファ情報)
- ●seg_size
-
バッファの使用長を設定します。メッセージの最大サイズを拡張している場合(eemcpfunc定義コマンドのmsglenオペランドにextendを指定),編集後のメッセージの全体長を設定してください。
(d) eemcp_uocbufhead(送信バッファ情報)
メッセージの最大サイズを拡張している場合(eemcpfunc定義コマンドのmsglenオペランドにextendを指定)に,EEMCP_UOC_MSG_OK_SNDでリターンしたときに設定します。
- ●buf_size
-
送信バッファの有効長を設定します。UDPプロトコルを使用している場合,先頭の送信バッファには,制御ヘッダ以上のサイズを設定してください。
(6) リターン値
出力メッセージ編集UOCは次のコードでリターンしてください。
リターン値 |
意味 |
---|---|
EEMCP_UOC_MSG_OK |
正常リターン(編集バッファでスケジューリング) |
EEMCP_UOC_MSG_OK_SND |
正常リターン(送信バッファでスケジューリング) |
EEMCP_UOC_MSG_NG |
メッセージ編集エラー |
- ■EEMCP_UOC_MSG_NGの場合
-
UOCからEEMCP_UOC_MSG_NGでエラーリターンした場合,MCP後処理トランザクションを起動します。
- ■UOCパラメタ不正の場合
-
UOCで設定した値に不正があった場合,MCPはメッセージログを出力して,MCP後処理トランザクションを起動します。
- ■送信バッファオーバフロー
-
-
EEMCP_UOC_MSG_OKでリターンした場合に,バッファの使用長(seg_size)に送信できる最大サイズを超える値が設定されていたとき,MCPは送信バッファオーバフローと見なします。そのあと,論理端末を閉塞してMCP後処理トランザクションを起動します。
-
メッセージの最大サイズを拡張していて(eemcpfunc定義コマンドのmsglenオペランドにextendを指定),かつバッファの使用長(seg_size)に設定された値が8388608を超える場合,MCPは送信バッファオーバフローと見なします。
-
- ■送信バッファ不足
-
メッセージの最大サイズを拡張している場合(eemcpfunc定義コマンドのmsglenオペランドにextendを指定)に,EEMCP_UOC_MSG_OKでリターンして,送信バッファ不足が発生すると,論理端末を閉塞してMCP後処理トランザクションを起動します。
(7) バッファとパラメタの関係
UOCインタフェース用のパラメタとバッファの関係は,入力メッセージ編集UOCと同じです。「5.4.7(7) バッファとパラメタの関係」を参照してください。