4.4.2.3客户端插件描述符

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

st_mysql_client_plugin结构client_plugin.h文件定义了一个通用的包含公共成员的描述符:

Struct st_mysql_client_plugin {int类型;unsigned int interface_version;const char *名称;const char *作者;const char * desc;无符号整数版本[3];const char *执照;void * mysql_api;Int (*init)(char *, size_t, 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客户端程序。

  • 作者:命名插件作者的字符串。这可以是你喜欢的任何东西。

  • desc:提供插件的一般描述的字符串。这可以是你喜欢的任何东西。

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

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

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

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

    初始化函数使用其前两个参数在发生错误时返回错误消息。第一个参数是指向字符第二个参数指示缓冲区长度。控件返回的任何消息初始化函数必须以空结束,因此最大消息长度是缓冲区长度减1。下一个参数被传递给mysql_load_plugin ().第一个参数指示还有多少个参数(如果没有则为0),后面是剩余的参数。

  • deinit:仅一次的反初始化函数如果没有这样的函数。客户端库在卸载插件时执行此函数。该函数不带参数。它返回0表示成功,返回非0表示失败。

  • 选项:用于处理传递给插件的选项的函数,或者如果没有这样的函数。该函数接受两个参数,分别表示选项名和指向其值的指针。函数成功返回0,失败返回非0。

对于给定的客户端插件类型,通用描述符成员后面可能跟着实现该类型插件所需的其他成员。例如,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_type参数自动生成它们的值。例如,像这样声明一个认证客户端插件:

mysql_declare_client_plugin(身份验证)"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;

此声明使用身份验证参数设置类型interface_version成员MYSQL_CLIENT_AUTHENTICATION_PLUGINMYSQL_CLIENT_AUTHENTICATION_PLUGIN_INTERFACE_VERSION

根据插件类型,描述符可能在公共成员之后有其他成员。例如,对于一个认证插件,有一个函数(my_auth_main ()在刚刚显示的描述符中),它处理与服务器的通信。看到第4.4.9节,“编写认证插件”

通常,支持使用身份验证插件的客户端程序会通过调用来加载插件mysql_options ()设置MYSQL_DEFAULT_AUTHMYSQL_PLUGIN_DIR选项:

Char *plugin_dir = "path_to_plugin_dir";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客户端插件接口