Separate the general plug-in version constant and v3 plug-in structs version

After a review of the second round of the the v3 plug-in implementation, it
was decided to use a separate constant defining the version of the structs
used for argument and return value passing, instead of OPENVPN_PLUGIN_VERSION.

To not make it too complex, this patch uses a shared version constant for all
the v3 structures.  It is not expected that these strucutures will change too
much and too often.

Signed-off-by: David Sommerseth <dazo@users.sourceforge.net>
Acked-by: James Yonan <james@openvpn.net>
This commit is contained in:
David Sommerseth 2011-01-06 23:24:52 +01:00 committed by David Sommerseth
parent 10960e3cd3
commit dc299b6e7d
3 changed files with 18 additions and 4 deletions

View file

@ -168,6 +168,20 @@ struct openvpn_plugin_string_list
/* openvpn_plugin_{open,func}_v3() related structs */
/* Defines version of the v3 plugin argument structs
*
* Whenever one or more of these structs are modified, this constant
* must be updated. A changelog should be appended in this comment
* as well, to make it easier to see what information is available
* in the different versions.
*
* Version Comment
* 1 Initial plugin v3 structures providing the same API as
* the v2 plugin interface + X509 certificate information.
*
*/
#define OPENVPN_PLUGINv3_STRUCTVER 1
/**
* Arguments used to transport variables to the plug-in.
* The struct openvpn_plugin_args_open_in is only used

View file

@ -305,7 +305,7 @@ plugin_open_item (struct plugin *p,
struct openvpn_plugin_args_open_return retargs;
CLEAR(retargs);
if ((*p->open3)(OPENVPN_PLUGIN_VERSION, &args, &retargs) == OPENVPN_PLUGIN_FUNC_SUCCESS) {
if ((*p->open3)(OPENVPN_PLUGINv3_STRUCTVER, &args, &retargs) == OPENVPN_PLUGIN_FUNC_SUCCESS) {
p->plugin_type_mask = retargs.type_mask;
p->plugin_handle = retargs.handle;
retlist = retargs.return_list;
@ -377,7 +377,7 @@ plugin_call_item (const struct plugin *p,
struct openvpn_plugin_args_func_return retargs;
CLEAR(retargs);
status = (*p->func3)(OPENVPN_PLUGIN_VERSION, &args, &retargs);
status = (*p->func3)(OPENVPN_PLUGINv3_STRUCTVER, &args, &retargs);
retlist = retargs.return_list;
} else if (p->func2)
status = (*p->func2)(p->plugin_handle, type, (const char **)a.argv, envp, per_client_context, retlist);

View file

@ -72,14 +72,14 @@ get_env (const char *name, const char *envp[])
}
OPENVPN_EXPORT int
openvpn_plugin_open_v3 (const int apiver,
openvpn_plugin_open_v3 (const int v3structver,
struct openvpn_plugin_args_open_in const *args,
struct openvpn_plugin_args_open_return *ret)
{
struct plugin_context *context = NULL;
/* Check that we are API compatible */
if( apiver != OPENVPN_PLUGIN_VERSION ) {
if( v3structver != OPENVPN_PLUGINv3_STRUCTVER ) {
return OPENVPN_PLUGIN_FUNC_ERROR;
}