diff --git a/contrib/plugins/helloworld.py b/contrib/plugins/helloworld.py index 6b5bba40e..1de3ffde8 100755 --- a/contrib/plugins/helloworld.py +++ b/contrib/plugins/helloworld.py @@ -45,7 +45,7 @@ def json_getmanifest(request): } -def json_init(request, options): +def json_init(request, options, configuration): """The main daemon is telling us the relevant cli options """ global greeting diff --git a/lightningd/lightningd.c b/lightningd/lightningd.c index 9e9fcb972..ebcac22dc 100644 --- a/lightningd/lightningd.c +++ b/lightningd/lightningd.c @@ -214,7 +214,7 @@ static struct lightningd *new_lightningd(const tal_t *ctx) *code. Here we initialize the context that will keep track and control *the plugins. */ - ld->plugins = plugins_new(ld, ld->log_book, ld->jsonrpc); + ld->plugins = plugins_new(ld, ld->log_book, ld->jsonrpc, ld); return ld; } diff --git a/lightningd/plugin.c b/lightningd/plugin.c index 121ddf42f..57bd60792 100644 --- a/lightningd/plugin.c +++ b/lightningd/plugin.c @@ -90,6 +90,7 @@ struct plugins { struct jsonrpc *rpc; struct timers timers; + struct lightningd *ld; }; /* Represents a pending JSON-RPC request that was forwarded to a @@ -116,7 +117,7 @@ struct plugin_opt { }; struct plugins *plugins_new(const tal_t *ctx, struct log_book *log_book, - struct jsonrpc *rpc) + struct jsonrpc *rpc, struct lightningd *ld) { struct plugins *p; p = tal(ctx, struct plugins); @@ -125,6 +126,7 @@ struct plugins *plugins_new(const tal_t *ctx, struct log_book *log_book, p->log = new_log(p, log_book, "plugin-manager"); p->rpc = rpc; timers_init(&p->timers, time_mono()); + p->ld = ld; return p; } @@ -825,6 +827,7 @@ static void plugin_config(struct plugin *plugin) struct plugin_opt *opt; const char *name; struct plugin_request *req; + struct lightningd *ld = plugin->plugins->ld; /* No writer since we don't flush concurrently. */ req = plugin_request_new(plugin, "init", plugin_config_cb, plugin); @@ -839,6 +842,12 @@ static void plugin_config(struct plugin *plugin) } json_object_end(req->stream); /* end of .params.options */ + /* Add .params.configuration */ + json_object_start(req->stream, "configuration"); + json_add_string(req->stream, "lightning-dir", ld->config_dir); + json_add_string(req->stream, "rpc-file", ld->rpc_filename); + json_object_end(req->stream); + json_object_end(req->stream); /* end of .params */ plugin_request_queue(req); diff --git a/lightningd/plugin.h b/lightningd/plugin.h index 73317ec91..2e9582e7b 100644 --- a/lightningd/plugin.h +++ b/lightningd/plugin.h @@ -17,7 +17,7 @@ struct plugins; * Create a new plugins context. */ struct plugins *plugins_new(const tal_t *ctx, struct log_book *log_book, - struct jsonrpc *rpc); + struct jsonrpc *rpc, struct lightningd *ld); /** * Initialize the registered plugins. diff --git a/lightningd/test/run-find_my_abspath.c b/lightningd/test/run-find_my_abspath.c index 31e160052..143f211cf 100644 --- a/lightningd/test/run-find_my_abspath.c +++ b/lightningd/test/run-find_my_abspath.c @@ -140,7 +140,7 @@ void plugins_init(struct plugins *plugins UNNEEDED) { fprintf(stderr, "plugins_init called!\n"); abort(); } /* Generated stub for plugins_new */ struct plugins *plugins_new(const tal_t *ctx UNNEEDED, struct log_book *log_book UNNEEDED, - struct jsonrpc *rpc UNNEEDED) + struct jsonrpc *rpc UNNEEDED, struct lightningd *ld UNNEEDED) { fprintf(stderr, "plugins_new called!\n"); abort(); } /* Generated stub for register_opts */ void register_opts(struct lightningd *ld UNNEEDED)