每個客戶端外掛程式都必須有一個描述符,向客戶端外掛程式 API 提供資訊。描述符結構以所有客戶端外掛程式通用的固定成員集開始,後接特定於外掛程式類型的任何成員。
client_plugin.h
檔案中的 st_mysql_client_plugin
結構定義了一個 「通用」描述符,其中包含通用成員
struct st_mysql_client_plugin
{
int type;
unsigned int interface_version;
const char *name;
const char *author;
const char *desc;
unsigned int version[3];
const char *license;
void *mysql_api;
int (*init)(char *, size_t, int, va_list);
int (*deinit)();
int (*options)(const char *option, const void *);
};
通用的 st_mysql_client_plugin
描述符結構成員的使用方式如下。char *
成員應指定為以 null 結尾的字串。
type
:外掛程式類型。這必須是client_plugin.h
中的外掛程式類型值之一,例如MYSQL_CLIENT_AUTHENTICATION_PLUGIN
。interface_version
:外掛程式介面版本。例如,驗證外掛程式的此值為MYSQL_CLIENT_AUTHENTICATION_PLUGIN_INTERFACE_VERSION
。name
:提供外掛程式名稱的字串。當您使用MYSQL_DEFAULT_AUTH
選項呼叫mysql_options()
或向 MySQL 客戶端程式指定--default-auth
選項時,會使用此名稱來參考外掛程式。author
:命名外掛程式作者的字串。這可以是任何您喜歡的內容。desc
:提供外掛程式一般描述的字串。這可以是任何您喜歡的內容。version
:外掛程式版本,表示為三個整數的陣列,表示主要版本、次要版本和微小版本。例如,{1,2,3}
表示版本 1.2.3。license
:指定授權類型的字串。mysql_api
:供內部使用。在外掛程式描述符中將其指定為NULL
。-
init
:一次性初始化函式,如果沒有此類函式,則為NULL
。客戶端程式庫在載入外掛程式時會執行此函式。該函式成功時會傳回零,失敗時會傳回非零值。init
函式會使用其前兩個引數,在發生錯誤時傳回錯誤訊息。第一個引數是指向char
緩衝區的指標,第二個引數表示緩衝區長度。init
函式傳回的任何訊息都必須以 null 結尾,因此最大訊息長度為緩衝區長度減一。接下來的引數會傳遞給mysql_load_plugin()
。第一個表示還有多少個引數(如果沒有,則為 0),後接任何剩餘引數。 deinit
:一次性取消初始化函式,如果沒有此類函式,則為NULL
。客戶端程式庫在卸載外掛程式時會執行此函式。該函式不接受任何引數。它成功時會傳回零,失敗時會傳回非零值。options
:用於處理傳遞給外掛程式的選項的函式,如果沒有此類函式,則為NULL
。該函式接受兩個引數,表示選項名稱和指向其值的指標。該函式成功時會傳回零,失敗時會傳回非零值。
對於給定的客戶端外掛程式類型,通用描述符成員後面可能會有額外的成員,這些成員對於實作該類型的外掛程式是必要的。例如,驗證外掛程式的 st_mysql_client_plugin_AUTHENTICATION
結構的末尾有一個函式,客戶端程式庫會呼叫該函式來執行驗證。
若要宣告外掛程式,請使用 mysql_declare_client_plugin()
和 mysql_end_client_plugin
巨集
mysql_declare_client_plugin(plugin_type)
... members common to all client plugins ...
... type-specific extra members ...
mysql_end_client_plugin;
請勿明確指定 type
或 interface_version
成員。mysql_declare_client_plugin()
巨集會使用 plugin_type
引數自動產生它們的值。例如,像這樣宣告驗證客戶端外掛程式
mysql_declare_client_plugin(AUTHENTICATION)
"my_auth_plugin",
"Author Name",
"My Client Authentication Plugin",
{1,0,0},
"GPL",
NULL,
my_auth_init,
my_auth_deinit,
my_auth_options,
my_auth_main
mysql_end_client_plugin;
此宣告會使用 AUTHENTICATION
引數,將 type
和 interface_version
成員設定為 MYSQL_CLIENT_AUTHENTICATION_PLUGIN
和 MYSQL_CLIENT_AUTHENTICATION_PLUGIN_INTERFACE_VERSION
。
根據外掛程式類型,描述符在通用成員之後可能會有其他成員。例如,對於驗證外掛程式,有一個函式(剛才顯示的描述符中的 my_auth_main()
)處理與伺服器的通訊。請參閱第 4.4.9 節,〈編寫驗證外掛程式〉。
一般來說,支援使用驗證外掛程式的客戶端程式會呼叫 mysql_options()
以設定 MYSQL_DEFAULT_AUTH
和 MYSQL_PLUGIN_DIR
選項,來載入外掛程式
char *plugin_dir = "path_to_plugin_dir";
char *default_auth = "plugin_name";
/* ... process command-line options ... */
mysql_options(&mysql, MYSQL_PLUGIN_DIR, plugin_dir);
mysql_options(&mysql, MYSQL_DEFAULT_AUTH, default_auth);
通常,該程式也會接受 --plugin-dir
和 --default-auth
選項,讓使用者可以覆寫預設值。
如果客戶端程式需要較低層級的外掛程式管理,客戶端程式庫包含接受 st_mysql_client_plugin
引數的函式。請參閱C API 客戶端外掛程式介面。