Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 TP1/EE/Message Control Extension 使用の手引


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) バッファとパラメタの関係」を参照してください。