6.4.3 蓄積編集UOC
機能
入力電文蓄積時にUOCを実行します。入力電文の編集を行うことができます。
形式
ANSI C、C++の形式
#include <esrpc.h> ESLONG uoc_func(ESRPC_UOC_STORE_TBL *parm)
説明
電文入力の蓄積時に呼び出されるUOCです。
各実行形態と入力電文によるUOC実行の有無を以下の表に示します。
- |
本番環境 |
テスト環境 |
||
---|---|---|---|---|
要求電文 |
応答電文 |
要求電文※1 |
応答電文※2 |
|
並行実行 |
× |
× |
○ |
○ |
蓄積実行 |
○ |
○ |
× |
× |
並行+蓄積実行 |
○ |
○ |
○ |
○ |
リプレイ実行 |
× |
× |
○ |
○ |
PCAP実行 |
× |
× |
○ |
○ |
- 凡例
-
○:UOCが実行される
×:UOCは実行されない
- ※1:
-
accumulate_file -t REQTS -f “testuse=Y”が指定されていない場合は、UOCが呼び出されても、電文は蓄積されません
- ※2:
-
accumulate_file -t RPYTS -f “testuse=Y”が指定されていない場合は、UOCが呼び出されても、電文は蓄積されません
それぞれの電文がUOCを呼ぶタイミングは以下の通りです。
電文種別 |
タイミング |
---|---|
本番環境 要求電文 |
本番環境から要求電文をキャプチャした後 |
本番環境 応答電文 |
本番環境から応答電文をキャプチャした後 |
テスト環境 要求電文 |
テスト環境へ要求電文を送信した後 |
テスト環境 応答電文 |
テスト環境から応答電文を受信した後 |
ユーザオウンコーディング(UOC)が起動される入力電文は、RPC電文とRAPのAPI代理実行電文です。
システムテスト支援は、uoc_func(蓄積編集UOC)を呼び出すとき、次に示す所定のパラメタをparmに設定します。「uoc_func」部分には、システム内で一意の名称を指定してください。
対象メッセージのテキスト部のデータは、編集前データアドレスに格納されています。編集が必要な場合、編集結果は設定される編集後データアドレス以降のエリアに格納してください。なお、バッファとして8MBを用意しています。8MBを超えて格納しないでください。
- |
call_system |
telegram_type |
---|---|---|
本番環境要求電文 |
ESRPC_CALL_PRODUCTION_SYSTEM |
ESRPC_TELEGRAM_REQUEST |
本番環境応答電文 |
ESRPC_CALL_PRODUCTION_SYSTEM |
ESRPC_TELEGRAM_REPLY |
テスト環境要求電文 |
ESRPC_CALL_TEST_SYSTEM |
ESRPC_TELEGRAM_REQUEST |
テスト環境応答電文 |
ESRPC_CALL_TEST_SYSTEM |
ESRPC_TELEGRAM_REPLY |
上記のパラメタの値を使うことで、どの電文でUOCが実行されたのかを判別することができます。
パラメタの内容
ESRPC_UOC_STORE_TBLのパラメタ内容
typedef struct es_rpc_uoc_store{ ESULONG running_mode; ……………… 実行形態 ESLONG call_system; ……………… 電文送信元の環境 ESLONG protocol_type; ……………… プロトコル種別(rpc|rap) ESLONG telegram_type; ……………… 電文種別 ESLONG rpc_model; ……………… RPC形態 char reserve1[4]; ……………… 予備 char srv_group [32]; ……………… 要求先のサービスグループ名 char srv_service [32]; ……………… 要求先のサービス名 char srv_nid[5]; ……………… 要求先のノード識別子 char reserve2[3]; ……………… 予備領域 char clt_nid[5]; ……………… 要求元のノード識別子 char reserve3[3]; ……………… 予備領域 unsigned char srv_ipaddr[4]; ……………… 要求先のIPアドレス unsigned char clt_ipaddr[4]; ……………… 要求元のIPアドレス unsigned short srv_portno; ……………… 要求先のポート番号 unsigned short clt_portno; ……………… 要求元のポート番号 ESLONG retcode; ……………… リターンコード ESULONG usr_data_len; ……………… 編集前後ユーザデータ長 char reserve4[4]; ……………… 予備領域 char *usr_data; ……………… ユーザデータ char *edt_data; ……………… 編集後のユーザデータ }ESRPC_UOC_STORE_TBL;
- 編集前データアドレスと編集前データ長の関係
-
- 編集後データアドレスと編集後データ長の関係
-
システムテスト支援が設定するパラメタ項目
- running_mode
-
実行形態を設定します。実行形態が複数の場合は論理和で設定します。
ESCLT_RUNMODE_P:並行実行
ESCLT_RUNMODE_A:蓄積実行
ESCLT_RUNMODE_R:リプレイ実行
ESCLT_RUNMODE_C:PCAP実行
- call_system
-
電文送信元の環境を設定します。
ESRPC_CALL_PRODUCTION_SYSTEM:本番環境
ESRPC_CALL_TEST_SYSTEM:テスト環境
- protocol_type
-
プロトコル種別を設定します。
ESRPC_TYPE_RPC:rpc
ESRPC_TYPE_RAP:rap
- telegram_type
-
電文種別を設定します。
ESRPC_TELEGRAM_REQUEST:要求電文
ESRPC_TELEGRAM_REPLY:応答電文
- rpc_model
-
RPC形態を設定します。
ESRPC_MODEL_NOFLAGS:同期応答型
ESRPC_MODEL_NOWAIT:非同期応答型
ESRPC_MODEL_NOREPLY:非応答型
- srv_group
-
サーバ側のサービスグループ名(※1)を設定します。
- srv_service
-
サーバ側のサービス名(※1)を設定します。
- srv_nid
-
サーバ側のノードID(※1)を設定します。
- clt_nid
-
クライアント側のノードID(※1)を設定します。
- srv_ipaddr
-
サーバ側のIPアドレス(※2)を設定します。
- clt_ipaddr
-
クライアント側のIPアドレス(※2)を設定します。
- srv_portno
-
サーバ側の受信ポート番号を設定します。
- clt_portno
-
クライアント側の送信ポート番号を設定します。
- retcode
-
応答電文の場合に設定されているRPC・RAPのリターンコード(※1)を設定します。
- usr_data_len
-
電文に設定されているユーザデータ長を設定します。
- usr_data
-
ユーザデータ先頭アドレスを設定します。
- ※1:
-
電文中に設定されておらず、取得できない場合は空文字列、または0が設定されています。
- ※2:
-
IPアドレスは、次に示す形式で設定します。
例) 172.165.112.20
[0]
[1]
[2]
[3]
0xAC
0xA5
0x70
0x14
ユーザが設定するパラメタ項目
- usr_data_len
-
編集後のユーザデータ長を設定してください。
0以下、または8MBを超える値が設定されている場合はエラーとして、対象のメッセージを破棄します。ただし、ES_UOC_MSG_OK_INのリターンコードを返却した場合は、編集前のユーザデータ長で蓄積します。
- edt_data
-
編集後のユーザデータを設定してください。
リターン値
次のコードでリターン値を設定してください。
- ESRPC_UOC_OK
-
ユーザが編集したユーザデータおよびユーザデータ長を使って、蓄積します。
- ESRPC_UOC_OK_IN
-
-
編集後のユーザデータ長が0以下もしくは8MBを超える場合
編集する前のユーザデータおよびユーザデータ長を使って、蓄積します。
-
編集後のユーザデータ長が編集前のユーザデータ長以下の場合
編集する前のユーザデータと編集後のユーザデータ長を使って、蓄積します。
-
編集後のユーザデータ長が編集前のユーザデータ長より大きい場合
編集する前のユーザデータおよびユーザデータ長を使って、蓄積します。
-
- ESRPC_UOC_NG
-
対象メッセージを蓄積しません。
- 上記以外
-
指定リターン値以外でリターンした場合、対象メッセージを蓄積しません。
編集時の注意
-
編集前ユーザデータを変更した場合、要求電文およびその後の処理の保証はしません。
-
編集前データアドレスで編集を行った場合、対象メッセージの後の処理は保証しません。
-
テキスト部に8MB以上格納した場合、対象メッセージを含め、後の処理は保証しません。
-
変更前ユーザデータ長が0byteの電文はユーザデータおよび、ユーザデータ長は変更できません。