7.2.5 編集UOC(復元UOC、蓄積編集UOC、送信電文編集UOC、受信電文編集UOC)
機能
編集UOCは、ユーザ任意の電文の送信時、受信時、蓄積時、復元時の電文の編集が行うことができます。
形式
ANSI C、C++の形式
#include <esplg_uoc.h> ESLONG uoc_func(ESPLG_UOC_EDIT *parm)
「uoc_func」部分には、システム内で一意の名称を指定してください。
説明
電文の送信時、受信時、蓄積時、復元時に呼び出されるUOCです。
各実行形態と入力電文によるUOC実行の有無を以下に示します。
- IIOP以外の場合
-
フェーズ
本番環境
テスト環境
要求電文
応答電文
要求電文
応答電文
蓄積実行モード(PCAP)
蓄積
蓄積
×
×
蓄積実行モード(キャプチャ)
蓄積
蓄積
×
×
テスト実行モード
復元
復元
送信+蓄積(※1)
受信+蓄積(※2)
- (凡例)
-
送信:電文送信時、編集UOCを実行します。
受信:電文受信時、編集UOCを実行します。
蓄積:電文蓄積時、編集UOCを実行します。
復元:電文復元時(蓄積電文を読み出し時)、編集UOCを実行します。
×:編集UOCを実行しません。
- 注※1
-
accumulate_file -t REQTS -f “testuse=Y”が指定されていない場合は、UOCが呼び出されても、電文は蓄積されません
- 注※2
-
accumulate_file -t RPYTS -f “testuse=Y”が指定されていない場合は、UOCが呼び出されても、電文は蓄積されません
- IIOPの場合
-
フェーズ
本番環境
テスト環境
要求電文
応答電文
要求電文
応答電文
PCAP実行
×
×
送信+蓄積(※1)
受信+蓄積(※2)
蓄積実行
(電文作成フェーズ)
蓄積
蓄積
×
×
リプレイ実行
(テスト実行フェーズ)
復元
復元
送信+蓄積(※1)
受信+蓄積(※2)
- (凡例)
-
送信:電文送信時、編集UOCを実行します。
受信:電文受信時、編集UOCを実行します。
蓄積:電文蓄積時、編集UOCを実行します。
復元:電文復元時(蓄積電文を読み出し時)、編集UOCを実行します。
×:編集UOCを実行しません。
- 注※1
-
accumulate_file -t REQTS -f “testuse=Y”が指定されていない場合は、本UOCを呼び出しません。
- 注※2
-
accumulate_file -t RPYTS -f “testuse=Y”が指定されていない場合は、本UOCを呼び出しません。
それぞれの電文が編集UOCを呼ぶタイミングは以下の通りです。
蓄積実行モード |
要求電文 (本番環境) |
|
応答電文 (本番環境) |
|
|
テスト実行モード |
要求電文 (本番環境) |
(要求電文(テスト環境)へ続く) |
応答電文 (本番環境) |
|
|
要求電文 (テスト環境) |
|
|
応答電文 (テスト環境) |
|
対象メッセージのテキスト部のデータは、編集前の電文先頭アドレスに格納されています。編集が必要な場合、編集結果は設定される編集後の電文先頭アドレス以降のエリアに格納してください。プロトコルがTCPまたはHTTPの場合、編集後の電文先頭アドレスのバッファはframework_definition定義の–b max_message_sizeオペランド指定値分を用意しています。プロトコルヘッダを含めてこのバッファサイズを超えて格納しないでください。プロトコルがRPCの場合、framework_definition定義の-bオプションのmax_message_size、および8MBのうち小さい値が電文先頭アドレスのバッファサイズとなります。framework_definition定義の-bオプションのmax_message_size、および8MBのどちらも超えない値を設定してください。
パラメタの内容
ESPLG_UOC_EDITのパラメタ内容
typedef struct es_plg_uoc_edit { ESULONG run_mode; ………………… 実行形態 ESULONG protocol; ………………… プロトコル種別 unsigned char msgtype; ………………… 電文種別 unsigned char reqtype; ………………… 要求電文種別 unsigned char call_timing; …………… 呼び出し契機 char reserve[5]; ………… 予備領域 ESCOM_IPADDR src_ip; ………… 送信元IPアドレス ESCOM_IPADDR dst_ip; ………… 送信先IPアドレス unsigned short src_port; ………………… 送信元ポート番号 unsigned short dst_port; ………………… 送信先ポート番号 char reserve2[4]; ………… 予備領域 ESCOM_AREA usr_tel_area; ………… 電文単位ユーザ領域(IIOPでは未使用) char usr_tel_area_state; ………… 電文単位ユーザ領域の状態(IIOPでは未使用) char reserve3[7]; ……………… 予備領域 ESCOM_AREA usr_clt_area; ……… クライアント単位ユーザ領域(IIOPでは未使用) char usr_clt_area_state; ……… クライアント単位ユーザ領域の状態(IIOPでは未使用) char reserve4[7]; ……………… 予備領域 ESCOM_AREA rcv_telegram; ………… 編集前の電文情報 ESPLG_UOC_TELSIZE rcv_telegram_size; …… 編集前の電文サイズ ESCOM_AREA edt_telegram ………… 編集後の電文情報 ESPLG_UOC_TELSIZE edt_telegram_size; …… 編集後の電文サイズ char key[64]; ……………… ペアリングキー(IIOPでは未使用) void *protoinf; ……………… プロトコル情報(IIOP以外は参照出来ません) ESULONG abort_code; …………… 強制停止理由コード char reserve5[4]; ……………… 予備領域 void *protocol_inf; …………… プロトコル固有の情報(IIOPでは未使用) void *protocol_editinf; ……… プロトコル固有の編集情報(IIOPでは未使用) } ESPLG_UOC_EDIT;
es_com_ipaddr(ESCOM_IPADDR)のパラメタ内容
typedef union es_com_ipaddr{ ESCOM_IPV4 ipv4; ……………… IPアドレス(IPv4) char reserve[16]; ……………… 予備領域 } ESCOM_IPADDR;
es_com_ipv4(ESCOM_IPV4)のパラメタ内容
typedef struct es_com_ipv4 { char reserve[12]; ……………… 予備領域 char ip[4]; ……………… IPアドレス(IPv4) } ESCOM_IPV4;
es_com_area(ESCOM_AREA)のパラメタ内容
typedef struct es_com_area { ESULONG size; ……………… 領域サイズ char reserve[4]; ……………… 予備領域 char *data; ……………… 領域先頭アドレス } ESCOM_AREA;
es_frw_telegram_rpc(ESFRW_TELEGRAM_RPC)の内容
typedef struct es_frw_telegram_rpc { char protocol_type; …………… プロトコル詳細種別 char clt_nid[5]; …………… クライアント側ノードID char srv_nid[5]; …………… サーバ側ノードID char reserve1[5]; …………… 予備領域 char group[32]; …………… サービスグループ名 char service[32]; …………… サービス名 ESLONG rtncode; …………… RPCリターンコード ESULONG out_len; …………… 応答データ長 } ESFRW_TELEGRAM_RPC;
es_frw_send_interface_rpc(ESFRW_SEND_IF_RPC)の内容
typedef struct es_frw_send_interface_rpc { char group[32]; ……………… サービスグループ名 char service[32]; ………………… サービス名 ESULONG out_len; ………………… 応答データ長 } ESFRW_SEND_IF_RPC;
ESPLG_UOC_TELSIZEのパラメタ内容
typedef union { ESPLG_UOC_HTTPSIZE http_size; ………… HTTPプロトコルのサイズ格納領域 ESPLG_UOC_TCPSIZE tcp_size; ………… TCPプロトコルのサイズ格納領域 } ESPLG_UOC_TELSIZE;
ESPLG_UOC_HTTPSIZEのパラメタ内容
typedef struct es_plg_uoc_httpsize{ ESULONG header_size; ………… HTTPヘッダ部サイズ ESULONG body_size; ………… HTTPボディ部サイズ } ESPLG_UOC_HTTPSIZE;
ESPLG_UOC_TCPSIZEのパラメタ内容
typedef struct es_plg_uoc_tcpsize{ ESULONG size; ………… 電文サイズ char reserve[4]; } ESPLG_UOC_TCPSIZE;
es_plg_proto_iiop(ESPLG_PROTO_IIOP)のパラメタ内容
typedef struct es_plg_proto_iiop { char protoinf_type; …………… プロトコル情報種別 char req_byte_order; …………… 要求電文バイトオーダー char rpy_byte_order; …………… 応答電文バイトオーダー char reserve1[5]; …………… 予備領域 char *object_key; …………… オブジェクトキー ESULONG object_key_size; …………… オブジェクトキーサイズ char reserve2[4]; …………… 予備領域 char *operation; …………… オペレーション名 ESULONG operation_size; …………… オペレーション名サイズ char reserve3[4]; …………… 予備領域 void *req_service_context; ……… 要求電文サービスコンテキスト ESULONG req_service_context_size; … 要求電文サービスコンテキストサイズ char reserve4[4]; …………… 予備領域 void *rpy_service_context; ……… 応答電文サービスコンテキスト ESULONG rpy_service_context_size; … 応答電文サービスコンテキストサイズ char reserve5[4]; …………… 予備領域 ESULONG reply_status; …………… リターン値 char system1; ………………… 製品情報1 char system2; ………………… 製品情報2 char system3; ………………… 製品情報3 char reserve6[49]; ………… 予備領域 } ESPLG_PROTO_IIOP;
編集前後の電文アドレスと電文長の関係を以下に示します。
- TCPの場合
- HTTPの場合
- IIOPの場合
- RPCの場合
システム検証支援が値を設定するESPLG_UOC_EDITパラメタ項目
- run_mode
-
システム検証支援の実行形態を設定します。
ESFRW_RUNMODE_CREATE_C:電文作成フェーズ(PCAP)
ESFRW_RUNMODE_CREATE_A:電文作成フェーズ(キャプチャ)
ESFRW_RUNMODE_CREATE_R:テスト実行フェーズ
ESFRW_RUNMODE_TEST_C:テスト実行フェーズ(PCAP)
- protocol
-
プロトコル種別を設定します。
ESFRW_PROT_TCP:TCP
ESFRW_PROT_HTTP:HTTP
ESFRW_PROT_IIOP:IIOP
ESFRW_PROT_RPC:RPC
- msgtype
-
電文種別を設定します。
ESFRW_MSGTYPE_REQUEST_PRO:要求電文(本番環境)
ESFRW_MSGTYPE_RESPONSE_PRO:応答電文(本番環境)
ESFRW_MSGTYPE_REQUEST_TST:要求電文(テスト環境)
ESFRW_MSGTYPE_RESPONSE_TST:応答電文(テスト環境)
- reqtype
-
要求電文の種別を設定します。
- 要求電文種別は以下の条件を満たす場合に設定します。
-
電文種別がESFRW_MSGTYPE_REQUEST_PROまたはESFRW_MSGTYPE_REQUEST_TST
- プロトコル種別がESFRW_PROT_TCPの場合、電文増幅UOCで指定された要求電文の種別を設定します。電文増幅UOCを省略した場合、電文情報設定UOCで指定された要求電文の種別を設定します。以下のどちらかとなります。
-
ESFRW_MSGFORM_SYNC_ANSWER:同期応答型
ESFRW_MSGFORM_NOANSWER:非応答型
なお、電文情報設定UOC、電文増幅UOCをともに省略した場合、ESFRW_MSGFORM_SYNC_ANSWERとなります。
- プロトコル種別がESFRW_PROT_HTTPの場合、以下となります。
-
ESFRW_MSGFORM_SYNC_ANSWER:同期応答型
- プロトコル種別がESFRW_PROT_IIOPの場合、以下のどちらかとなります。
-
ESFRW_MSGFORM_SYNC_ANSWER:同期応答型(プロトコルヘッダ部のみの応答電文含む)
ESFRW_MSGFORM_NOANSWER:非応答型
- プロトコル種別がESFRW_PROT_RPCの場合、以下のどれかとなります。
-
ESFRW_MSGFORM_SYNC_ANSWER:同期応答型
ESFRW_MSGFORM_NOANSWER:非応答型
ESFRW_MSGFORM_NOSYNC_ANSWER:非同期応答型
- call_timing
-
編集UOCの呼び出し契機を設定します。
ESPLG_UOC_CALL_SEND:電文送信時の編集UOC呼び出し
ESPLG_UOC_CALL_RECEIVE:電文受信時の編集UOC呼び出し
ESPLG_UOC_CALL_ACCUMULATE:電文蓄積時の編集UOC呼び出し
ESPLG_UOC_CALL_RESTORE:電文復元時の編集UOC呼び出し
- src_ip
-
電文の送信元のIPアドレス※を設定します。
- dst_ip
-
電文の送信先のIPアドレス※を設定します。
- src_port
-
電文の送信元のポート番号をホストバイトオーダーで設定します。
- dst_port
-
電文の送信先のポート番号をホストバイトオーダーで設定します。
- usr_tel_area
-
電文単位に共有するユーザ領域を設定します。
各メンバには以下の値が設定されています。
-
size
電文単位ユーザ領域のサイズを設定します。
-
data
電文単位ユーザ領域の先頭アドレスを設定します。
-
- usr_tel_area_state
-
電文単位ユーザ領域の状態を設定します。電文単位ユーザ領域の状態は電文単位ユーザ領域の領域サイズが0以外のときに設定します。
-
ESFRW_CONTST_NEW
新規に割当てられた領域であることを示します。
-
ESFRW_CONTST_RENEW
処理済みとなった電文のユーザ領域が再割当てされて、通知されたことを示します。ユーザ領域内には現在処理している電文とは無関係の情報が設定されている場合があります。必要に応じて、ユーザ領域に残っている必要な情報の退避、および初期化等を実施して使用してください。
-
ESFRW_CONTST_CONTINUE
当該電文のユーザ領域として、UOCに通知済の領域であることを示します。以前に通知された際に情報を設定していれば、参照することができます。
-
- usr_clt_area
-
クライアント識別子単位で共有するユーザ領域を設定します。
各メンバには以下の値が設定されています。
-
size
クライアント識別子単位ユーザ領域のサイズを設定します。
-
data
クライアント識別子単位ユーザ領域の先頭アドレスを設定します。
-
- usr_clt_area_state
-
クライアント単位ユーザ領域の状態を設定します。クライアント単位ユーザ領域の状態はクライアント単位ユーザ領域の領域サイズが0以外のときに設定します。
-
ESFRW_CONTST_NEW
新規に割当てられた領域であることを示します。
-
ESFRW_CONTST_RENEW
不要となったクライアントのユーザ領域が再割当てされて、通知されたことを示します。ユーザ領域内には処理中の電文のクライアントとは無関係の情報が設定されている場合があります。必要に応じて、ユーザ領域に残っている必要な情報の退避、および初期化等を実施して使用してください。
-
ESFRW_CONTST_CONTINUE
当該クライアントのユーザ領域として、UOCに通知済の領域であることを示します。以前に通知された際に情報を設定していれば、参照することができます。
-
- rcv_telegram
-
編集前の電文に関する情報を設定します。
IIOPの場合、ユーザデータ部は、符号化(marshaling)されたCDR形式です。
各メンバには以下の値が設定されています。
-
size
編集前電文のサイズを設定します。
-
data
編集前電文の先頭アドレスを設定します。
-
- rcv_telegram_size
-
プロトコルに応じて編集前電文のサイズをESPLG_UOC_TELSIZE形式で設定します。
IIOPの場合は、電文のサイズをESPLG_UOC_TELSIZE形式(HTTP電文サイズ形式)に設定します。
- edt_telegram
-
編集後の電文に関する情報を設定します。
各メンバには以下の値が設定されています。
-
size
編集後電文の格納領域の最大サイズを設定します。
-
data
編集後電文の格納領域の先頭アドレスを設定します。
IIOPの場合は、ユーザが設定します。
-
- edt_telegram_size
-
プロトコル種別ごとの編集後電文のヘッダ領域を設定します。
プロトコルに応じて編集後電文のサイズをESPLG_UOC_TELSIZE形式で設定します。
IIOPの場合は、ESPLG_UOC_TELSIZE形式(HTTP電文サイズ形式)で設定します。
ESPLG_UOC_TELSIZE形式の各パラメタの値はデフォルト値として0を設定します。
- key
-
ユーザが設定する項目です。
システム検証支援では、次の条件をすべて満たす場合だけデフォルト値を設定します。
-
プロトコル種別がTCP
-
呼び出し契機がESPLG_UOC_CALL_SEND
-
要求電文種別がESFRW_MSGFORM_SYNC_ANSWER
蓄積ファイル読み出し時に電文情報設定UOCで設定した要求電文(本番環境)のペアリングキー値を基に、デフォルト値を設定します。要求電文(本番環境)のペアリングキーが、コネクション(本番環境)毎にユニークとなる値(デフォルト値をそのまま使用)の場合、デフォルト値として、コネクション(テスト環境)毎にユニークとなる値を設定します。このデフォルト値を使用したとき、同一コネクションの要求電文と応答電文がペアリングされます。
上記以外の場合、デフォルト値として、要求電文(本番環境)と同じペアリングキーを設定します。
-
- protoinf
-
プロトコル情報ESPLG_PROTO_IIOPの領域アドレスを設定します。
- protocol_inf
-
プロトコル固有の情報を格納した構造体のアドレスを設定します。各プロトコル用の構造体にキャストして使用してください。
プロトコル種別がESFRW_PROT_RPCの場合:ESFRW_TELEGRAM_RPCを設定します。
プロトコル種別がESFRW_PROT_TCPまたはESFRW_PROT_HTTPの場合:NULLを設定します。
- protocol_editinf
-
呼び出し契機がESPLG_UOC_CALL_SENDの場合、プロトコル固有の編集情報を格納した構造体のアドレスを設定します。各プロトコル用の構造体にキャストして使用してください。
プロトコル種別がESFRW_PROT_RPCの場合:ESFRW_SEND_IF_RPCを設定します。
プロトコル種別がESFRW_PROT_TCPまたはESFRW_PROT_HTTPの場合:NULLを設定します。
呼び出し契機がESPLG_UOC_CALL_SEND以外の場合:参照できません。
- 注※
-
IPアドレスは、次に示す形式で設定します。
IPv4の場合
例)送信元IPが172.165.112.20の場合
- group
-
ユーザが設定する項目です。
システム検証支援では、本番環境のサービスグループ名をデフォルト値として設定します。
- service
-
ユーザが設定する項目です。
システム検証支援では、本番環境のサービス名をデフォルト値として設定します。
- out_len
-
ユーザが設定する項目です。
システム検証支援では、応答型の要求電文の場合は本番環境の応答データ長(dc_rpc_call()等で指定したout_len値)を設定します。それ以外の場合は0を設定します。
システム検証支援が値を設定するes_plg_proto_iiop(ESPLG_PROTO_IIOP)パラメタ項目
- protoinf_type
-
ESPLG_PROTO_IIOPに設定するプロトコル情報の種別を論理和で設定します。
ESPLG_IIOP_MSG_REQUEST:Request電文情報あり
ESPLG_IIOP_MSG_REPLY:Reply電文情報あり
- req_byte_order
-
要求電文のバイトオーダーを設定します。
ESPLG_IIOP_BIG_ENDIAN:ビッグエンディアン
ESPLG_IIOP_LITTLE_ENDIAN:リトルエンディアン
- rpy_byte_order
-
応答電文のバイトオーダーを設定します。
ESPLG_IIOP_BIG_ENDIAN:ビッグエンディアン
ESPLG_IIOP_LITTLE_ENDIAN:リトルエンディアン
- object_key※1
-
オブジェクトキーの格納領域アドレスを設定します。
- object_key_size※1
-
オブジェクトキーのサイズを設定します。
- operation※1
-
オペレーション名の格納領域アドレスを設定します。
- operation_size※1
-
オペレーション名のサイズを設定します。
- req_service_context※1 ※2
-
要求電文のサービスコンテキストの格納領域アドレスを設定します。
サービスコンテキストの形式は、OMGで規定されているIOP::ServiceContextListとなります。
- req_service_context_size※1
-
要求電文のサービスコンテキストサイズを設定します。
サイズが0の場合、要求電文サービスコンテキストは参照できません。
- rpy_service_context※2 ※3
-
応答電文のサービスコンテキストの格納領域アドレスを設定します。
サービスコンテキストの形式は、OMGで規定されているIOP::ServiceContextListとなります。
- rpy_service_context_size※3
-
応答電文のサービスコンテキストサイズを設定します。
サイズが0の場合、応答電文サービスコンテキストは参照できません。
- reply_status※3
-
応答電文のリプライステータス(reply_status)を設定します。
ESPLG_IIOP_NO_EXCEPTION:NO_EXCEPTION
- 注※1
-
プロトコル情報種別にESPLG_IIOP_MSG_REQUESTが設定されているときのみ参照可能です。
- 注※2
-
各電文のバイトオーダーを考慮して参照してください。
- 注※3
-
プロトコル情報種別にESPLG_IIOP_MSG_REPLYが設定されているときのみ参照可能です。
ユーザが設定するパラメタ項目
- edt_telegram
-
IIOPの場合に必要な設定です。
編集後の電文の先頭アドレスおよび編集後の電文長を指定してください。RPCの場合は、編集後電文の格納領域に編集前のプロトコルヘッダ部を含めて編集後の電文を設定してください。
ユーザデータ部は、符号化(marshaling)されたCDR形式で設定してください。
- edt_telegram_size
-
- IIOP以外の場合
-
プロトコルに応じて編集後電文のサイズをESPLG_UOC_TELSIZE形式で設定します。
edt_telegram.data領域に編集後の電文を格納した場合に、各パラメタに正しいサイズを設定してください。
- IIOPの場合
-
編集後電文のヘッダ領域サイズを設定します。プロトコルヘッダ部のサイズは、編集前のプロトコルヘッダ部のサイズをそのまま設定してください。
- key
-
次の条件をすべて満たす場合、ペアとなる要求電文と応答電文で同じ値となるペアリングキーを設定してください。ペアとなる応答電文(テスト環境)の受信時は、電文情報設定UOCにおいて、このペアリングキーと同じ値を設定してください。
-
プロトコル種別がTCP
-
呼び出し契機がESPLG_UOC_CALL_SEND
-
要求電文種別がESFRW_MSGFORM_SYNC_ANSWER
-
- abort_code
-
システム検証支援を強制停止する理由を示すコードを0 ~ 4294967295の範囲で設定してください。
このコードはUOCがESPLG_UOC_ABORTをリターンしたときのみ有効です。システム検証支援は強制停止理由コードをKFSE64109-Eメッセージに出力します。
- group
-
本番環境とテスト環境でサービスグループ名が異なる場合、テスト環境のサービスグループ名を設定してください。
- service
-
本番環境とテスト環境でサービス名が異なる場合、テスト環境のサービス名を設定してください。
- out_len
-
本番環境とテスト環境で応答データ長が異なる場合、テスト環境の応答データ長を設定してください。非応答型の場合、設定値を無視します。
リターン値
次のコードでリターン値を設定してください。
- ESPLG_UOC_OK
-
ユーザが編集した電文、および電文長を使用してテストを続行します。
- ESPLG_UOC_OK_IN
-
ユーザが編集する前の電文、および編集する前の電文長を使用してテストを続行します。
- ESPLG_UOC_NG
-
電文を破棄します。破棄した電文はテスト対象システムへの送信、蓄積ファイルへの蓄積、電文ン比較の対象になりません。
- ES_UOC_ABORT
-
異常リターン。KFSE64109-Eメッセージを出力し、プロセスダウンします。
- ESPLG_UOC_MSG_DESTRUCT
-
電文を破棄します。破棄した電文はテスト対象システムへの送信、蓄積ファイルへの蓄積、結果判定の対象になりません。
- 上記以外
-
指定リターン値以外でリターンした場合、電文を破棄します。
注意事項
- TCP、HTTP、RPC場合
-
-
UOCで設定した値に不正があった場合、対象の電文を破棄します。
-
編集前の電文先頭アドレスにある電文を編集しないでください。電文を編集した場合、その後の処理の保証はできません。
-
- TCP、HTTPの場合
-
-
テキスト部に、framework_definition定義における-bオプションのmax_message_sizeオペランド指定値以上を格納した場合、対象メッセージを含め、その後の処理の保障はできません。
-
- IIOPの場合
-
-
編集前の電文情報、及びプロトコルヘッダ部を編集しないでください。編集した場合、その後の処理の保障はできません。
-
編集後の電文情報格納領域サイズは編集しないでください。
-
編集後の電文サイズは、プロトコルヘッダを含めてframework_definition定義の-bオプションのmax_message_sizeフラグメンバ指定値以下となるようにしてください。
-