* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
+#include <libubox/blobmsg.h>
+#include <libubox/blobmsg_json.h>
+
#include <rpcd/uci.h>
#include <rpcd/session.h>
}
snprintf(path, sizeof(path) - 1,
- "/tmp/.uci-rpc-%s", (char *)blobmsg_data(sid));
+ RPC_UCI_SAVEDIR_PREFIX "%s", blobmsg_get_string(sid));
uci_set_savedir(cursor, path);
}
return rpc_uci_status();
}
+static void
+rpc_uci_trigger_event(struct ubus_context *ctx, const char *config)
+{
+ char *pkg = strdup(config);
+ static struct blob_buf b;
+ uint32_t id;
+
+ if (!ubus_lookup_id(ctx, "service", &id)) {
+ void *c;
+
+ blob_buf_init(&b, 0);
+ blobmsg_add_string(&b, "type", "config.change");
+ c = blobmsg_open_table(&b, "data");
+ blobmsg_add_string(&b, "package", pkg);
+ blobmsg_close_table(&b, c);
+ ubus_invoke(ctx, id, "event", b.head, NULL, 0, 1000);
+ }
+ free(pkg);
+}
+
static int
-rpc_uci_revert_commit(struct blob_attr *msg, bool commit)
+rpc_uci_revert_commit(struct ubus_context *ctx, struct blob_attr *msg, bool commit)
{
struct blob_attr *tb[__RPC_C_MAX];
struct uci_package *p = NULL;
uci_commit(cursor, &p, false);
uci_unload(cursor, p);
}
+ rpc_uci_trigger_event(ctx, blobmsg_get_string(tb[RPC_C_CONFIG]));
}
else
{
struct ubus_request_data *req, const char *method,
struct blob_attr *msg)
{
- return rpc_uci_revert_commit(msg, false);
+ return rpc_uci_revert_commit(ctx, msg, false);
}
static int
struct ubus_request_data *req, const char *method,
struct blob_attr *msg)
{
- return rpc_uci_revert_commit(msg, true);
+ return rpc_uci_revert_commit(ctx, msg, true);
}
static int
* Remove given delta save directory (if any).
*/
static void
-rpc_uci_purge_savedir(const char *path)
+rpc_uci_purge_dir(const char *path)
{
DIR *d;
struct stat s;
{
char path[PATH_MAX];
- snprintf(path, sizeof(path) - 1, "/tmp/.uci-rpc-%s", ses->id);
- rpc_uci_purge_savedir(path);
+ snprintf(path, sizeof(path) - 1, RPC_UCI_SAVEDIR_PREFIX "%s", ses->id);
+ rpc_uci_purge_dir(path);
}
/*
- * Removes all delta directories which match the /tmp/.uci-rpc-* pattern.
+ * Removes all delta directories which match the RPC_UCI_SAVEDIR_PREFIX.
* This is used to clean up garbage when starting rpcd.
*/
-static void
-rpc_uci_purge_savedirs(void)
+void rpc_uci_purge_savedirs(void)
{
int i;
glob_t gl;
- if (!glob("/tmp/.uci-rpc-*", 0, NULL, &gl))
+ if (!glob(RPC_UCI_SAVEDIR_PREFIX "*", 0, NULL, &gl))
{
for (i = 0; i < gl.gl_pathc; i++)
- rpc_uci_purge_savedir(gl.gl_pathv[i]);
+ rpc_uci_purge_dir(gl.gl_pathv[i]);
globfree(&gl);
}
if (!cursor)
return UBUS_STATUS_UNKNOWN_ERROR;
- rpc_uci_purge_savedirs();
rpc_session_destroy_cb(&cb);
return ubus_add_object(ctx, &obj);