Hitachi

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


5.4.7 入力メッセージ編集UOCインタフェース

入力メッセージ編集UOCは,次に示す形式で呼び出します。

〈この項の構成〉

(1) 形式

ANSI C,C++の形式
#include <eemcp.h>
int  uoc_func(struct eemcp_uoc_min_n  *parm)

(2) 説明

入力メッセージ編集UOCを呼び出すとき,MCPは次に示す所定のパラメタをparmに設定します。

(3) パラメタの内容

(a) eemcp_uoc_min_nの内容

typedef struct eemcp_uoc_min_n {
    int  pro_kind;              … プロトコル種別
    char le_name[9];            … 論理端末名称
    char priority;              … プライオリティ
    char reserve1[6];           … 予備
    int  rcv_prim;              … 受信サービスプリミティブ
    EEMCPUOCBUFLIST *buflist_adr;
                                … 受信バッファリストアドレス
    EEMCPUOCBUFLIST *ebuflist_adr;
                                … 編集バッファリストアドレス
    char svname[32];            … サービス名
    char *pro_indv_ifa;         … MCP使用領域
    int  rtn_detail;            … 詳細リターンコード
    char reserve3[4];           … 予備
    char *usat_adr;             … ユーザSATアドレス
    EEULONG usat_size;          … ユーザSATサイズ
    EEULONG lebuf_size;         … MCP使用領域
    void *lebuf;                … MCP使用領域
    EEULONG64 usat_large_size;  … 拡張ユーザSATサイズ
    char reserve2[40];          … 予備
}EEMCPUOCMIN;

(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_min_n

●pro_kind

プロトコル種別として,次の値が設定されます。

EEMCP_UOC_PRO_TCP

TCP/IPプロトコル

EEMCP_UOC_PRO_UDP

UDPプロトコル

●le_name

メッセージを入力した論理端末名が設定されます。

●rcv_prim

受信サービスプリミティブとして,次の値が設定されます。

EEMCP_UOC_RCV_BRD

一方送信メッセージの受信

EEMCP_UOC_RCV_REP_SR

同期送受信メッセージの受信

●buflist_adr

受信用バッファリストのアドレスが設定されます。

●ebuflist_adr

編集用バッファリストのアドレスが設定されます。

メッセージ編集バッファが未定義の場合(eemcpbuf定義コマンドの-eオプションを省略した場合),ebuflist_adrにはNULLが設定されます。

●svname

eemcple定義コマンドの-vオプションで指定したサービス名が設定されます。

●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エリアのサイズが設定されます(単位:バイト)。

(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_min_n

同期送受信メッセージの受信メッセージの場合,priorityとsvnameの指定は無視します。

●priority

入力メッセージの優先度を設定します。

EEMCP_UOC_HI

優先

EEMCP_UOC_LOW(EEMCP_UOC_HI以外も含む)

通常

●svname

UOCで決定したサービス名を設定します。

サービス名の形式は,サービス名格納領域の先頭から,'\0'の手前までの1〜31バイトの識別子で設定してください。

●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_RCVでリターンしたときに設定します。

●buf_size

受信バッファの有効長を設定します。UDPプロトコルを使用している場合,先頭の受信バッファには,制御ヘッダ以上のサイズを設定してください。

(6) リターン値

入力メッセージ編集UOCは次のコードでリターンしてください。

リターン値

意味

EEMCP_UOC_MSG_OK

正常リターン(編集バッファでスケジューリング)

EEMCP_UOC_MSG_OK_RCV

正常リターン(受信バッファでスケジューリング)

EEMCP_UOC_MSG_DESTRUCT

メッセージ破棄

EEMCP_UOC_MSG_NG

メッセージ編集エラー

■メッセージの破棄

UOCからEEMCP_UOC_MSG_DESTRUCTでリターンした場合,MCPは入力メッセージを破棄します。このとき,サービスは起動しません。同期送受信メッセージの受信メッセージについては,正常にメッセージを受信したとして扱います(EEMCP_UOC_MSG_OK_RCVと同じ扱いです)。

■EEMCP_UOC_MSG_NGの場合

UOCからEEMCP_UOC_MSG_NGでエラーリターンした場合,論理端末を閉塞しMCP後処理トランザクションを起動します。

■UOCパラメタ不正の場合

UOCで設定した値に不正があった場合,MCPはメッセージログ出力後に,論理端末を閉塞して,MCP後処理トランザクションを起動します。

■受信バッファオーバフロー
  • EEMCP_UOC_MSG_OKでリターンした場合に,バッファの使用長(seg_size)にTP1/EEサービス定義で定義した受信バッファのサイズを超える値が設定されていたとき,MCPは受信バッファオーバフローと見なして,論理端末を閉塞します。そのあと,MCP後処理トランザクションを起動します。該当するメッセージは破棄します。

  • メッセージの最大サイズを拡張していて(eemcpfunc定義コマンドのmsglenオペランドにextendを指定),かつバッファの使用長(seg_size)に設定された値が8388608を超える場合,MCPは受信バッファオーバフローと見なします。

■サービス名不正

サービス名の形式は,サービス名格納領域の先頭から,'\0'の手前までの1〜31バイトの識別子です。先頭から32バイト目までに'\0'がないときは,サービス名を不正として,エラートランザクション(ERRTRN1)を起動します。

■受信バッファ不足

メッセージの最大サイズを拡張している場合(eemcpfunc定義コマンドのmsglenオペランドにextendを指定)に,EEMCP_UOC_MSG_OKでリターンしたとき,受信バッファ不足が発生すると,論理端末を閉塞してMCP後処理トランザクションを起動します。このとき,該当するメッセージは破棄されます。

(7) バッファとパラメタの関係

UOCインタフェース用のパラメタとバッファの関係を次の図に示します。

■メッセージの最大サイズを拡張していない場合

メッセージの最大サイズを拡張していない場合の受信メッセージの構成は,次の図に示すとおりです。

図5‒9 UOCインタフェース用のパラメタとバッファの関係(メッセージの最大サイズを拡張していない場合)

[図データ]

■メッセージの最大サイズを拡張している場合

メッセージの最大サイズを拡張している場合(eemcpfunc定義コマンドのmsglenオペランドにextendを指定)の受信メッセージの構成は,次の図に示すとおりです。

図5‒10 UOCインタフェース用のパラメタとバッファの関係(メッセージの最大サイズを拡張している場合)

[図データ]