4.4.2.3客户端插件描述符

每个客户端插件必须有一个描述符,用于向客户端插件API提供信息。描述符结构以一组对所有客户端插件都通用的固定成员开始,然后是特定于插件类型的任何成员。

st_mysql_client_plugin结构client_plugin.h.文件定义A.通用的包含通用成员的描述符:

struct st_mysql_client_plugin {int类型;unsigned int interface_version;const char *姓名;const char *作者;const char * desc;unsigned int版本[3];const char *许可;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成员应指定为以空结束的字符串。

  • 类型:插件类型。这必须是来自的插件类型值之一client_plugin.h., 如mysql_client_authentication_plugin.

  • interface_version.:插件界面版本。例如,这是MYSQL_CLIENT_AUTHENTICATION_PLUGIN_INTERFACE_VERSION用于身份验证插件。

  • 名称:一个给出插件名称的字符串。这是您致电时引用插件的名称mysql_options()mysql_default_auth.选项或指定- Default-Auth.选择MySQL客户端程序。

  • 作者:一个字符串命名插件作者。这可以是你喜欢的。

  • 去世:提供插件的概述的字符串。这可以是你喜欢的。

  • 版本:插件版本,由三个整数组成,分别表示主要版本、次要版本和teeny版本。例如,{1,2,3}显示版本1.2.3。

  • 许可证: license类型的字符串。

  • mysql_api.:内部使用。指定它在插件描述符中。

  • 在里面:一次初始化函数,或如果没有这样的函数。客户端库在加载插件时执行这个函数。该函数返回零以实现失败的成功和非零。

    在里面函数使用其前两个参数如果发生错误,则会返回错误消息。第一个参数是指向a的指针字符缓冲区,第二个参数表示缓冲区长度。返回的任何消息在里面函数必须为null终止,因此最大消息长度是缓冲长度减去一个。下一个参数通过mysql_load_plugin()。第一个指示有多少参数(如果没有),其次是任何剩余的参数。

  • deinit:仅一次的反初始化函数如果没有这样的函数。客户端库在卸载插件时执行此功能。该函数没有参数。它返回零以获得失败的成功和非零。

  • 选项:将选项处理到插件的函数,或如果没有这样的函数。该函数需要两个参数,表示选项名称和指向其值的指针。该函数返回零以实现失败的成功和非零。

对于给定的客户端插件类型,公共描述符成员可以接下来的是实现该类型的插件所需的其他成员。例如,st_mysql_client_plugin_AUTHENTICATION身份验证插件的结构在客户端库呼叫执行身份验证的末尾具有功能。

要声明插件,请使用mysql_declare_client_plugin()mysql_end_client_plugin宏:

mysql_declare_client_plugin(plugin_type)…所有客户端插件的成员……特定类型的额外成员... mysql_end_client_plugin;

不要指定类型interface_version.明确成员。这mysql_declare_client_plugin()宏使用plugin_typeArgum自动生成其值。例如,声明如下所示的身份验证客户端插件:

mysql_declare_client_plugin(验证)“my_auth_plugin”,“author name”,“我的客户端身份验证plugin”,{1,0,0},“gpl”,null,my_auth_init,my_auth_deinit,my_auth_options,my_auth_main mysql_end_client_plugin;

此声明使用身份验证设置的论点类型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“; / * ...进程命令行选项... * / 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客户端插件接口