9.4.2 電文組立UOC
機能
業務システムの利用者と、業務システムとの間のパケットをキャプチャしたときにUOCを実行します。パケットをプロトコル電文に組み立てます。
形式
ANSI C、C++の形式
#include <esplg_uoc.h> ESLONG uoc_func(struct es_plg_uoc_build *parm)
「uoc_func」部分には、システム内で一意の名称を指定してください。
説明
電文組立UOCは、パケットをキャプチャしたときに、そのパケットで電文が完成しているかどうかを判定します。
- 入力パケットの組立
-
システム検証支援はパケット受信ごとに電文組立UOCにパケットが格納されている受信バッファを引き渡します。電文組立UOCでは、受信バッファを基に電文が完成しているかどうかを判定し、電文が完成したかどうかをリターン値で指定します。電文が未完成の場合、前回までのパケットと、今回受信したパケットを連結して通知します。
なお、電文を組立中のコネクションでパケットロストやコネクション断が検知された場合、システム検証支援は組立中の電文を破棄します。
図9‒2 電文組立UOCによるパケットの組み立て - 組み立て中の電文の破棄
-
組立て中のパケットが不要となった場合は、ESPLG_UOC_MSG_DESTRUCTでリターンすると不要な電文を破棄することができます。
パラメタの内容
es_plg_uoc_buildのパラメタ内容
typedef struct es_plg_uoc_build { ESULONG run_mode; ……………実行形態 ESULONG protocol; ……………プロトコル種別 unsigned char msgtype; ……………電文種別 char reserve[7]; ……………予備領域 ESCOM_IPADDR src_ip; ……………送信元IPアドレス ESCOM_IPADDR dst_ip; ……………送信先IPアドレス unsigned short src_port; ……………送信元ポート番号 unsigned short dst_port; ……………送信先ポート番号 char reserve2[4]; ……………予備領域 ESCOM_AREA rcv_telegram; ……………受信電文情報 ESULONG now_data_size; ……………当該メッセージの有効長 ESLONG rtn_detail; ……………詳細エラーコード ESCOM_AREA usr_tel_area; ……………電文単位ユーザ領域 char usr_tel_area_state; …………電文単位ユーザ領域の状態 char reserve3[7]; ……………… 予備領域 ESCOM_AREA usr_con_area; ……………コネクション単位ユーザ領域 char usr_con_area_state; ………コネクション単位ユーザ領域の状態 char reserve4[3]; ………………予備領域 ESULONG abort_code; ………………強制停止理由コード } ESPLG_UOC_BUILD;
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;
システム検証支援基盤が設定するパラメタ項目
- run_mode
-
システム分析支援アダプタの実行形態を設定します。
ESFRW_RUNMODE_CREATE_A:システム分析支援リアルタイムモニタ連携
- protocol
-
プロトコル種別を設定します。
ESFRW_PROT_TCP:TCP
- msgtype
-
電文種別を設定します。
ESFRW_MSGTYPE_REQUEST_PRO:要求電文
ESFRW_MSGTYPE_RESPONSE_PRO:応答電文
- src_ip
-
パケットの送信元のIPアドレスを設定します。※
- dst_ip
-
パケットの送信先のIPアドレスを設定します。※
- src_port
-
パケットの送信元のポート番号をホストバイトオーダーで設定します。
- dst_port
-
パケットの送信先のポート番号をホストバイトオーダーで設定します。
- rcv_telegram
-
組立て中の電文のサイズと先頭アドレスを設定します。
- now_data_size
-
ユーザが設定する値です。
システム検証支援はデフォルト値として、現時点の電文サイズを設定します。
- usr_tel_area
-
電文単位に共有するユーザ領域を設定します。
各メンバには以下の値が設定されています。
-
size
電文単位ユーザ領域のサイズを設定します。
-
data
電文単位ユーザ領域の先頭アドレスを設定します。
-
- usr_tel_area_state
-
電文単位ユーザ領域の状態を設定します。電文単位ユーザ領域の状態は電文単位ユーザ領域の領域サイズが0以外のときに設定します。
-
ESFRW_CONTST_NEW
新規に割り当てられた領域であることを示します。
-
ESFRW_CONTST_RENEW
処理済みとなった電文のユーザ領域が再割り当てされて、通知されたことを示します。ユーザ領域内には現在処理している電文とは無関係の情報が設定されている場合があります。必要に応じて、ユーザ領域に残っている必要な情報の退避、および初期化などを実施して使用してください。
-
ESFRW_CONTST_CONTINUE
当該電文のユーザ領域として、UOCに通知済みの領域であることを示します。以前に通知された際に情報を設定していれば、参照することができます。
-
- usr_con_area
-
コネクション単位で共有するユーザ領域を設定します。
各メンバには以下の値が設定されています。
-
size
コネクション単位ユーザ領域のサイズを設定します。
-
data
コネクション単位ユーザ領域の先頭アドレスを設定します。
-
- usr_con_area_state
-
コネクション単位ユーザ領域の状態を設定します。コネクション単位ユーザ領域の状態はコネクション単位ユーザ領域の領域サイズが0以外のときに設定します。
-
ESFRW_CONTST_NEW
新規に割り当てられた領域であることを示します。
-
ESFRW_CONTST_RENEW
切断されたコネクションのユーザ領域が再割り当てされて、通知されたことを示します。ユーザ領域内には現在のコネクションとは無関係の情報が設定されている場合があります。必要に応じて、ユーザ領域に残っている必要な情報の退避、および初期化などを実施して使用してください。
-
ESFRW_CONTST_CONTINUE
当該コネクションのユーザ領域として、UOCに通知済みの領域であることを示します。以前に通知された際に情報を設定していれば、参照することができます。
-
- 注※
IPアドレスは、次に示す形式で設定します。
IPv4の場合
例) 送信元IPが172.165.112.20の場合
ユーザが設定するパラメタ項目
- abort_code
-
システム検証支援を強制停止する理由を示すコードを0 ~ 4294967295の範囲で設定できます。
このコードはUOCがESPLG_UOC_ABORTをリターンしたときのみ有効です。システム検証支援は強制停止理由コードをKFSE64109-Eメッセージに出力します。
- now_data_size
-
当該メッセージのサイズを設定します。
- rtn_detail
-
詳細エラーコードを-2147483648〜2147483647の範囲で設定できます。このコードはUOCがES_UOC_NGをリターンしたときにシステム検証支援に返されます。システム検証支援は詳細エラーコードをメッセージログファイルに出力します。
ユーザが設定する項目とリターン値の関係を次に示します。
項目 |
リターン値 |
||||
---|---|---|---|---|---|
ESPLG_UOC_OK_NSEG |
ESPLG_UOC_OK_LAST |
ESPLG_UOC_MSG_DESTRUCT |
ES_UOC_NG |
ESPLG_UOC_ABORT |
|
当該メッセージの有効長 |
○ |
○ |
× |
× |
× |
詳細エラーコード |
× |
× |
× |
○ |
× |
強制停止理由コード |
× |
× |
× |
× |
○ |
- (凡例)
-
○:指定可能
×:指定不可(指定値は無視します)
リターン値
次のコードでリターン値を設定してください。
- ESPLG_UOC_OK_NSEG
-
電文未完成です。後続パケットを待ちます。
- ESPLG_UOC_OK_LAST
-
電文が完成しました。
- ESPLG_UOC_MSG_DESTRUCT
-
組立て中の電文を破棄します。
- ESPLG_UOC_NG
-
パケット判定でエラーが発生しました。組立て中の電文を破棄します。
- ES_UOC_ABORT
-
異常リターン。KFSE64109-Eメッセージを出力し、プロセスダウンします。
- 上記以外
-
指定リターン値以外でリターンした場合、電文を破棄します。
注意事項
-
UOCで設定した値に不正があった場合、対象の電文を破棄します。
-
now_data_sizeにframework_definition定義の–b max_message_sizeオペランドで指定したサイズを超える値が設定されていた場合、該当するメッセージを破棄します。