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インタフェース用のパラメタとバッファの関係(メッセージの最大サイズを拡張している場合)