7.2.7 電文増幅UOC(電文追加UOC)
機能
電文ファイルから読み出した電文の増幅または破棄が行えます。
IIOPの場合、要求電文を複製して、電文数およびクライアント数の追加を行うことが出来ます。
形式
ANSI C、C++の形式
#include <esplg_uoc.h> ESLONG uoc_func(ESPLG_UOC_AMPLIFY *parm)
「uoc_func」部分には、システム内で一意の名称を指定してください。
説明
電文の増幅または破棄時に呼び出されるUOCです。
IIOPの場合、送信電文編集UOC前に呼び出されるUOCです。本UOCのリターン値によっては、同じ要求電文に対して本UOCが再度呼び出されます。
各実行形態と入力電文によるUOC実行の有無を以下の表に示します。
- IIOP以外の場合
-
フェーズ
本番環境
テスト環境
要求電文
応答電文
要求電文
応答電文
電文作成フェーズ(PCAP)
×
×
×
×
電文作成フェーズ(キャプチャ)
×
×
×
×
テスト実行フェーズ
○
×
×
×
- (凡例)
-
○:UOCが実行される
×:UOCは実行されない
- IIOPの場合
-
フェーズ
本番環境
テスト環境
要求電文
応答電文
要求電文
応答電文
PCAP実行
○
×
×
×
蓄積実行
(電文作成フェーズ)
×
×
×
×
リプレイ実行
(テスト実行フェーズ)
○
×
×
×
- (凡例)
-
○:UOCが実行される
×:UOCは実行されない
パラメタの内容
ESPLG_UOC_AMPLIFYのパラメタ内容
typedef struct es_plg_uoc_amplify { ESULONG run_mode; ………………… 実行形態 ESULONG protocol; ………………… プロトコル種別 unsigned char msgtype; ………………… 電文種別 unsigned char reqtype; ………………… 要求電文種別 char reserve[6]; ……………… 予備領域 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_con_area; …………… コネクション単位ユーザ領域(IIOPでは未使用) char usr_con_area_state; …… コネクション単位ユーザ領域の状態(IIOPでは未使用) char reserve4[7]; …………… 予備領域 ESCOM_AREA telegram; ………………… 電文情報 ESPLG_UOC_TELSIZE telegram_size; …… 電文サイズ ESULONG amp_telegram_interval; …… 電文送信間隔(IIOPでは「電文追加の送信間隔」) ESULONG amp_client_cnt; ………… クライアント増幅数 ESULONG amp_client_delay; ……… クライアント増幅の遅延時間 ESLONG rtn_detail; ……………… 詳細エラーコード(IIOPでは未使用) void *protoinf; ……………… プロトコル情報(IIOP以外は参照出来ません) ESULONG abort_code;…………… 強制停止理由コード(IIOPでは未使用) char amp_client_interval; … クライアント増幅間隔有無 char reserve5[3]; …………… 予備領域 void *protocol_telinf; …… プロトコル固有情報(IIOPでは未使用) } ESPLG_UOC_AMPLIFY;
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;
ESPLG_UOC_TELSIZEのパラメタ内容
typedef union { ESPLG_UOC_HTTPSIZE http_size; ………… HTTPプロトコルのサイズ格納領域 ESPLG_UOC_TCPSIZE tcp_size; ………… TCPプロトコルのサイズ格納領域 ESPLG_UOC_RPCSIZE rpc_size; ………… RPCプロトコルのサイズ格納領域 } 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;
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;
電文アドレスと電文長の関係を以下に示します。
システム検証支援が値を設定するパラメタ項目
- ESPLG_UOC_AMPLIFYのパラメタ内容
-
- run_mode
-
システム検証支援の実行形態を設定します。
ESFRW_RUNMODE_CREATE_C:PCAP実行
ESFRW_RUNMODE_TEST_R:リプレイ実行(テスト実行フェーズ)
- protocol
-
プロトコル種別を設定します。
ESFRW_PROT_TCP:TCP
ESFRW_PROT_HTTP:HTTP
ESFRW_PROT_IIOP:IIOP
ESFRW_PROT_RPC:RPC
- msgtype
-
電文種別を設定します。
ESFRW_MSGTYPE_REQUEST_PRO:要求電文(本番環境)
- reqtype
-
プロトコル種別がESFRW_PROT_TCPの場合、ユーザが設定する値です。
システム検証支援基盤は、電文情報設定UOCで設定された、次のどちらかの要求電文種別を設定します。
-
ESFRW_MSGFORM_SYNC_ANSWER:同期応答型(プロトコルヘッダ部だけの応答電文含む)
-
ESFRW_MSGFORM_NOANSWER:非応答型
なお、電文情報設定UOCを省略した場合、システム検証支援はデフォルト値(ESFRW_MSGFORM_SYNC_ANSWER(同期応答型))を設定します。
プロトコル種別がESFRW_PROT_HTTPの場合、システム検証支援は次の値を設定します。
-
ESFRW_MSGFORM_SYNC_ANSWER:同期応答型
プロトコル種別がESFRW_PROT_RPCの場合、システム検証支援は次のどれかを設定します。
-
ESFRW_MSGFORM_SYNC_ANSWER:同期応答型
-
ESFRW_MSGFORM_NOANSWER:非応答型
-
ESFRW_MSGFORM_NOSYNC_ANSWER:非同期応答型
-
- src_ip
-
パケット(電文)の送信元のIPアドレスを設定します。※1
- dst_ip
-
パケット(電文)の送信先のIPアドレスを設定します。※1
- src_port
-
パケット(電文)の送信元のポート番号をホストバイトオーダーで設定します。
- dst_port
-
パケット(電文)の送信先のポート番号をホストバイトオーダーで設定します。
- usr_tel_area
-
電文単位に共有するユーザ領域をESCOM_AREA構造体で設定します。各メンバには以下の値が設定されています。
-
領域サイズ
電文単位ユーザ領域のサイズを設定します。
-
ユーザ領域先頭アドレス
電文単位ユーザ領域の先頭アドレスを設定します。
-
- usr_tel_area_state
-
電文単位ユーザ領域の状態を設定します。電文単位ユーザ領域の状態は電文単位ユーザ領域の領域サイズが0以外のときに設定します。
-
ESFRW_CONTST_NEW
新規に割当てられた領域であることを示します。
-
ESFRW_CONTST_RENEW
処理済みとなった電文のユーザ領域が再割当てされて、通知されたことを示します。ユーザ領域内には現在処理している電文とは無関係の情報が設定されている場合があります。必要に応じて、ユーザ領域に残っている必要な情報の退避、および初期化等を実施して使用してください。
-
ESFRW_CONTST_CONTINUE
当該電文のユーザ領域として、UOCに通知済の領域であることを示します。以前に通知された際に情報を設定していれば、参照することができます。
-
- usr_con_area
-
コネクション単位で共有するユーザ領域を設定します。
各メンバには以下の値が設定されています。
-
領域サイズ
コネクション単位ユーザ領域のサイズを設定します。
-
ユーザ領域先頭アドレス
コネクション単位ユーザ領域の先頭アドレスを設定します。
-
- usr_con_area_state
-
コネクション単位ユーザ領域の状態を設定します。コネクション単位ユーザ領域の状態はコネクション単位ユーザ領域の領域サイズが0以外のときに設定します。
-
ESFRW_CONTST_NEW
新規に割当てられた領域であることを示します。
-
ESFRW_CONTST_RENEW
切断されたコネクションのユーザ領域が再割当てされて、通知されたことを示します。ユーザ領域内には現在のコネクションとは無関係の情報が設定されている場合があります。必要に応じて、ユーザ領域に残っている必要な情報の退避、および初期化等を実施して使用してください。
-
ESFRW_CONTST_CONTINUE
当該コネクションのユーザ領域として、UOCに通知済の領域であることを示します。以前に通知された際に情報を設定していれば、参照することができます。
-
- telegram
-
入力電文に関する情報を設定します。
IIOPの場合、電文に関する情報を設定します。ユーザデータ部は、符号化(marshaling)されたCDR形式です。
各メンバには以下の値が設定されています。
-
size
電文のサイズを設定します。
-
data
電文の先頭アドレスを設定します。
-
- telegram_size
-
HTTPまたはTCPの場合、入力電文のサイズをESPLG_UOC_TELSIZE形式で設定します。
- protoinf
-
IIOPの場合、プロトコル情報ESPLG_PROTO_IIOPの領域アドレスを設定します。
- 注※1
-
IPアドレスは、次に示す形式で設定します。
IPv4の場合
例)送信元IPが172.165.112.20の場合
- 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が設定されているときのみ参照可能です。
ユーザが設定するパラメタ項目
- amp_telegram_interval
-
「電文増幅(電文追加)」を行う場合(ESFRW_OK_RECALLでリターン)、増幅した電文の送信間隔(当該電文と増幅電文の送信時間差異)を設定します。0~3600000(単位:ミリ秒)
0(デフォルト値)を指定した場合は、即時に送信します。
本設定値は実行形態関連定義reply_send_modeの影響を受けます。
倍速送信実行時は、同定義で指定された倍速値で短縮した送信間隔となります。等間隔送信実行時、および連続送信実行時は、本設定値を無視します。
reply_send_modeを省略した場合、システム検証支援は連続送信実行を行うため、設定を倍速送信実行にする必要があります。以下に例を示します。
- 例)
-
reply_send_mode \ -m wait -s 1
- amp_client_cnt
-
「クライアント増幅」を行う場合、電文を複製するクライアント数を設定します。0~20000
0を設定した場合は、クライアント増幅による複製を行いません。
- amp_client_delay
-
クライアント増幅による送信開始を遅延させる時間を設定します。0~3600000(単位:ミリ秒)。
amp_client_delayを1000ミリ秒に設定する例)
parm-> amp_client_delay=1000;
- amp_client_interval
-
クライアント増幅間隔の有無を設定します。
クライアント増幅数が2以上のときに有効となります。
-
ESCOM_YES(デフォルト値)
送信間隔を空けてクライアント増幅します。
-
ESCOM_NO
送信間隔を空けないでクライアント増幅します。
-
- rtn_detail
-
詳細エラーコードを設定します。-2147483648 ~ 2147483647
このコードはUOCがESPLG_UOC_NGをリターンしたときだけ有効です。システム検証支援は詳細エラーコードをKFSE54101-Eに出力します。
- reqtype
-
要求電文の種別を指定できます。リターン値ESPLG_UOC_OK_RECALLを返した(電文を増幅してUOC関数を再度呼び出した)場合、電文情報プラグイン設定UOCが呼び出されないため、この項目を設定してください。
指定できる電文種別は次のとおりです。
-
ESFRW_MSGFORM_SYNC_ANSWER:同期応答型
テスト対象システムからの応答電文を待ちます。
-
ESFRW_MSGFORM_NOANSWER:非応答型
テスト対象システムからの応答電文を待たずに、次の要求電文を送信します。
要求電文種別は次の条件をすべて満たす場合に設定してください。
-
プロトコル種別がTCP
-
要求電文(本番環境)
条件を満たさない場合、設定する必要はありません。システム検証支援基盤は設定値を無視します。
-
ユーザが設定する項目とリターン値の関係を次に示します。
-
電文のプロトコルがTCPの場合
項目
リターン値
ESPLG_UOC_OK
ESPLG_UOC_OK_RECALL
ESPLG_UOC_MSG_DESTRUCT
ESPLG_UOC_ABORT
ESPLG_UOC_NG(※)
amp_telegram_interval
(電文送信間隔)
×
○
×
×
×
amp_client_cnt
(クライアント増幅数)
○
○
×
×
×
amp_client_delay
(クライアント増幅の遅延時間)
○
○
×
×
×
rtn_detail
(詳細エラーコード)
×
×
×
×
○
abort_code
(強制停止理由コード)
×
×
×
○
×
reqtype
要求電文種別
○
○
×
×
×
- (凡例)
-
○:指定可能
×:指定不可(指定値は無視します)
- 注※
-
表のリターン値以外の場合を含みます。
-
電文のプロトコルがHTTPの場合
項目
リターン値
ESPLG_UOC_OK
ESPLG_UOC_OK_RECALL
ESPLG_UOC_MSG_DESTRUCT
ESPLG_UOC_ABORT
ESPLG_UOC_NG(※)
amp_telegram_interval
(電文送信間隔)
×
○
×
×
×
amp_client_cnt
(クライアント増幅数)
○
○
×
×
×
amp_client_delay
(クライアント増幅の遅延時間)
○
○
×
×
×
rtn_detail
(詳細エラーコード)
×
×
×
×
○
abort_code
(強制停止理由コード)
×
×
×
○
×
reqtype
要求電文種別
×
×
×
×
×
- (凡例)
-
○:指定可能
×:指定不可(指定値は無視します)
- 注※
-
表のリターン値以外の場合を含みます。
-
電文のプロトコルがRPCの場合
項目
リターン値
ESPLG_UOC_OK
ESPLG_UOC_OK_RECALL
ESPLG_UOC_MSG_DESTRUCT
ESPLG_UOC_ABORT
ESPLG_UOC_NG(※)
amp_telegram_interval
(電文送信間隔)
×
○
×
×
×
amp_client_cnt
(クライアント増幅数)
○
○
×
×
×
amp_client_delay
(クライアント増幅の遅延時間)
○
○
×
×
×
rtn_detail
(詳細エラーコード)
×
×
×
×
○
abort_code
(強制停止理由コード)
×
×
×
○
×
reqtype
要求電文種別
×
×
×
×
×
- (凡例)
-
○:指定可能
×:指定不可(指定値は無視します)
- 注※
-
表のリターン値以外の場合を含みます。
リターン値
次のコードでリターン値を設定してください。
- ESPLG_UOC_OK
-
電文を増幅・破棄せず、次の処理に移ります。
クライアント増幅の設定に従い、クライアント増幅による電文の複製を行います。
- ESPLG_UOC_OK_RECALL
-
クライアント増幅数の設定に従い、クライアント増幅による電文の複製を行います。
その後、電文追加を行うため、本UOCの再度呼び出しを行います。
- ESPLG_UOC_MSG_DESTRUCT
-
電文を破棄して、次の処理に移ります。
- ESPLG_UOC_ABORT
-
KFSE64109-Eメッセージを出力し、システム検証支援プロセスを強制停止します。
- ESPLG_UOC_NG、および上記以外
-
KFSE54101-Eメッセージを出力します。そして、電文を増幅・破棄せず、次の処理に移ります。
要求電文の複製を行いません。
IIOPの場合、次のリターン値以外は、ESPLG_UOC_NGとして処理を行います。
-
ESPLG_UOC_OK
-
ESPLG_UOC_OK_RECALL
注意事項
電文の内容を変更した場合、該当電文の内容、およびその後の処理の保障はできません。