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;
}親トピック: プラグイン登録関数