X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=luci2.c;h=50381a2760d7b8add5ae579fa009febec588d67e;hb=b3a5c08e087b5a8e96532efbb2e6849bb200248b;hp=f22d815e9bb7e98458063f2104437d5f761353fd;hpb=a00f2d08a2e5a5174569e79cbdf979b2ebd8f097;p=project%2Frpcd.git diff --git a/luci2.c b/luci2.c index f22d815..50381a2 100644 --- a/luci2.c +++ b/luci2.c @@ -1,5 +1,5 @@ /* - * luci-rpcd - LuCI UBUS RPC server + * rpcd - UBUS RPC server * * Copyright (C) 2013 Jo-Philipp Wich * @@ -30,10 +30,21 @@ #include #include #include +#include +#include +#include -#include "luci2.h" -#include "exec.h" -#include "session.h" +#include "plugin.h" + +/* limit of log size buffer */ +#define RPC_LUCI2_MAX_LOGSIZE (128 * 1024) +#define RPC_LUCI2_DEF_LOGSIZE (16 * 1024) + +/* location of menu definitions */ +#define RPC_LUCI2_MENU_FILES "/usr/share/luci2/menu.d/*.json" /* */ + + +static const struct rpc_daemon_ops *ops; static struct blob_buf buf; static struct uci_context *cursor; @@ -964,7 +975,7 @@ rpc_luci2_upgrade_test(struct ubus_context *ctx, struct ubus_object *obj, struct blob_attr *msg) { const char *cmd[4] = { "sysupgrade", "--test", "/tmp/firmware.bin", NULL }; - return rpc_exec(cmd, NULL, NULL, NULL, NULL, ctx, req); + return ops->exec(cmd, NULL, NULL, NULL, NULL, NULL, ctx, req); } static int @@ -994,7 +1005,7 @@ rpc_luci2_backup_restore(struct ubus_context *ctx, struct ubus_object *obj, const char *cmd[4] = { "sysupgrade", "--restore-backup", "/tmp/backup.tar.gz", NULL }; - return rpc_exec(cmd, NULL, NULL, NULL, NULL, ctx, req); + return ops->exec(cmd, NULL, NULL, NULL, NULL, NULL, ctx, req); } static int @@ -1082,15 +1093,17 @@ backup_parse_list(struct blob_buf *blob, char *buf, int len, void *priv) return (nl - buf + 1); } -static void +static int backup_finish_list(struct blob_buf *blob, int status, void *priv) { struct backup_state *s = priv; if (!s->open) - return; + return UBUS_STATUS_NO_DATA; blobmsg_close_array(blob, s->array); + + return UBUS_STATUS_OK; } static int @@ -1108,8 +1121,8 @@ rpc_luci2_backup_list(struct ubus_context *ctx, struct ubus_object *obj, memset(state, 0, sizeof(*state)); - return rpc_exec(cmd, backup_parse_list, NULL, backup_finish_list, - state, ctx, req); + return ops->exec(cmd, NULL, backup_parse_list, NULL, backup_finish_list, + state, ctx, req); } static int @@ -1799,16 +1812,18 @@ skip: return (nl - buf + 1); } -static void +static int opkg_finish_list(struct blob_buf *blob, int status, void *priv) { struct opkg_state *s = priv; if (!s->open) - return; + return UBUS_STATUS_NO_DATA; blobmsg_close_array(blob, s->array); blobmsg_add_u32(blob, "total", s->total); + + return UBUS_STATUS_OK; } static int @@ -1844,8 +1859,8 @@ opkg_exec_list(const char *action, struct blob_attr *msg, if (state->req_count <= 0 || state->req_count > 100) state->req_count = 100; - return rpc_exec(cmd, opkg_parse_list, NULL, opkg_finish_list, - state, ctx, req); + return ops->exec(cmd, NULL, opkg_parse_list, NULL, opkg_finish_list, + state, ctx, req); } @@ -1879,7 +1894,7 @@ rpc_luci2_opkg_update(struct ubus_context *ctx, struct ubus_object *obj, struct blob_attr *msg) { const char *cmd[3] = { "opkg", "update", NULL }; - return rpc_exec(cmd, NULL, NULL, NULL, NULL, ctx, req); + return ops->exec(cmd, NULL, NULL, NULL, NULL, NULL, ctx, req); } static int @@ -1899,7 +1914,7 @@ rpc_luci2_opkg_install(struct ubus_context *ctx, struct ubus_object *obj, cmd[3] = blobmsg_data(tb[RPC_OP_PACKAGE]); - return rpc_exec(cmd, NULL, NULL, NULL, NULL, ctx, req); + return ops->exec(cmd, NULL, NULL, NULL, NULL, NULL, ctx, req); } static int @@ -1919,7 +1934,7 @@ rpc_luci2_opkg_remove(struct ubus_context *ctx, struct ubus_object *obj, cmd[3] = blobmsg_data(tb[RPC_OP_PACKAGE]); - return rpc_exec(cmd, NULL, NULL, NULL, NULL, ctx, req); + return ops->exec(cmd, NULL, NULL, NULL, NULL, NULL, ctx, req); } static int @@ -1983,16 +1998,16 @@ menu_access(struct blob_attr *sid, struct blob_attr *acls, struct blob_buf *e) blobmsg_for_each_attr(acl, acls, rem) { - if (!rpc_session_access(blobmsg_data(sid), "luci-ui", - blobmsg_data(acl), "read")) + if (!ops->session_access(blobmsg_data(sid), "luci-ui", + blobmsg_data(acl), "read")) { rv = false; break; } blobmsg_add_u8(e, blobmsg_data(acl), - rpc_session_access(blobmsg_data(sid), "luci-ui", - blobmsg_data(acl), "write")); + ops->session_access(blobmsg_data(sid), "luci-ui", + blobmsg_data(acl), "write")); } blobmsg_close_table(e, c); @@ -2072,7 +2087,8 @@ skip: } -int rpc_luci2_api_init(struct ubus_context *ctx) +static int +rpc_luci2_api_init(const struct rpc_daemon_ops *o, struct ubus_context *ctx) { int rv = 0; @@ -2193,6 +2209,8 @@ int rpc_luci2_api_init(struct ubus_context *ctx) if (!cursor) return UBUS_STATUS_UNKNOWN_ERROR; + ops = o; + rv |= ubus_add_object(ctx, &system_obj); rv |= ubus_add_object(ctx, &network_obj); rv |= ubus_add_object(ctx, &opkg_obj); @@ -2200,3 +2218,7 @@ int rpc_luci2_api_init(struct ubus_context *ctx) return rv; } + +const struct rpc_plugin rpc_plugin = { + .init = rpc_luci2_api_init +};