5.1.1.4.4 vtable設定関数
vtable
は、プラグイン・インタフェースの実際のビジネス・ロジックに必要な関数ポインタが格納される特有のC構造体です。つまり、有効なプラグイン・インタフェースでは、対応するvtableで定義されているすべての関数を実装する必要があります。
vtable設定関数の構文は次のとおりです:
int _ws_pi_set_vtbl_@ID@_@Name@(void * priv);
@ID@
は、実際のプラグインIDの値です。@Name@
は、実際のプラグイン名の値です。たとえば、プラグインIDがP_CUSTOM_TYPE
でプラグイン名がMyType
であるプラグインのvtable
設定関数は、次のとおりです:
_ws_pi_set_vtbl_P_CUSTOM_TYPE_MyType(void * priv)
vtable
構造体は、プラグインIDのカテゴリによって異なる場合があります。このSALTリリースでは、P_CUSTOM_TYPE
およびP_CREDENMAP
が唯一の有効なプラグインIDです。
使用可能なプラグイン・インタフェースのvtable
構造体を次の例に示します:
例5-1 VTable構造体
struct credmap_vtable {
int (* gwws_pi_map_http_basic) (char * domain, char * realm, char * t_userid, char * t_grpid, Cred_UserPass * credential); /* used for HTTP Basic Authentication */
/* for future use */
void * unused_1;
void * unused_2;
void * unused_3;
};
struct
credmap_vtableは、P_CREDENMAP
プラグイン・インタフェースに関数を1つ実装する必要があることを示します。詳細は、「発信認証プラグインの動作」を参照してください
関数の入力パラメータvoid * priv
は、具体的なvtable
インスタンスを指しています。vtable
設定関数内の実際の関数を使用してvtable
構造体を設定する必要があります。
vtable
設定関数内の実際の関数を使用してvtable
構造体を設定する例を次に示します:
例5-2 vtable設定関数内の実際の関数を使用したvtable構造体の設定
int _DLLEXPORT_ _ws_pi_set_vtbl_P_CREDENMAP_TEST (void * vtbl)
{
struct credmap_vtable * vtable;
if ( ! vtbl )
return -1;
vtable = (struct credmap_vtable *) vtbl;
vtable->gwws_pi_map_http_basic = Credmap_HTTP_Basic;
return 0;
}
親トピック: プラグイン登録関数