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;
}