X-Git-Url: http://git.archive.openwrt.org/?p=project%2Frpcd.git;a=blobdiff_plain;f=include%2Frpcd%2Fplugin.h;fp=include%2Frpcd%2Fplugin.h;h=6b3d244106b1aca5e8669ad5ca3101e6ce370886;hp=0000000000000000000000000000000000000000;hb=e0afdb10ae879d26d7f81d1dba8d47978a9a2aa9;hpb=b3a5c08e087b5a8e96532efbb2e6849bb200248b diff --git a/include/rpcd/plugin.h b/include/rpcd/plugin.h new file mode 100644 index 0000000..6b3d244 --- /dev/null +++ b/include/rpcd/plugin.h @@ -0,0 +1,65 @@ +/* + * rpcd - UBUS RPC server + * + * Copyright (C) 2013 Jo-Philipp Wich + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef __RPC_PLUGIN_H +#define __RPC_PLUGIN_H + +#define _GNU_SOURCE /* asprintf() */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "exec.h" +#include "session.h" + +/* location of plugin executables */ +#define RPC_PLUGIN_DIRECTORY "/usr/libexec/rpcd" + +/* location of plugin libraries */ +#define RPC_LIBRARY_DIRECTORY "/usr/lib/rpcd" + +struct rpc_daemon_ops { + bool (*session_access)(const char *sid, const char *scope, + const char *object, const char *function); + void (*session_create_cb)(struct rpc_session_cb *cb); + void (*session_destroy_cb)(struct rpc_session_cb *cb); + int (*exec)(const char **args, + rpc_exec_write_cb_t in, rpc_exec_read_cb_t out, + rpc_exec_read_cb_t err, rpc_exec_done_cb_t end, + void *priv, struct ubus_context *ctx, + struct ubus_request_data *req); +}; + +struct rpc_plugin { + struct list_head list; + int (*init)(const struct rpc_daemon_ops *ops, struct ubus_context *ctx); +}; + +int rpc_plugin_api_init(struct ubus_context *ctx); + +#endif