mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-19 15:14:23 +01:00
libplugin: make rpc_conn a global, so we can access it from timers.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
committed by
Christian Decker
parent
688574b89c
commit
c83066f8ed
@@ -33,10 +33,13 @@ struct plugin_conn {
|
||||
MEMBUF(char) mb;
|
||||
};
|
||||
|
||||
/* Connection to make RPC requests. */
|
||||
static struct plugin_conn rpc_conn;
|
||||
|
||||
struct command {
|
||||
u64 id;
|
||||
const char *methodname;
|
||||
struct plugin_conn *rpc;
|
||||
bool usage_only;
|
||||
};
|
||||
|
||||
struct out_req {
|
||||
@@ -144,8 +147,7 @@ static struct command *read_json_request(const tal_t *ctx,
|
||||
plugin_err("JSON id '%*.s' is not a number",
|
||||
id->end - id->start,
|
||||
membuf_elems(&conn->mb) + id->start);
|
||||
/* Putting this in cmd avoids a global, or direct exposure to users */
|
||||
cmd->rpc = rpc;
|
||||
cmd->usage_only = false;
|
||||
cmd->methodname = json_strdup(cmd, membuf_elems(&conn->mb), method);
|
||||
|
||||
return cmd;
|
||||
@@ -271,7 +273,7 @@ struct command_result *command_fail(struct command *cmd,
|
||||
/* We invoke param for usage at registration time. */
|
||||
bool command_usage_only(const struct command *cmd)
|
||||
{
|
||||
return cmd->rpc == NULL;
|
||||
return cmd->usage_only;
|
||||
}
|
||||
|
||||
/* FIXME: would be good to support this! */
|
||||
@@ -409,13 +411,13 @@ send_outreq_(struct command *cmd,
|
||||
out->arg = arg;
|
||||
uintmap_add(&out_reqs, out->id, out);
|
||||
|
||||
printf_json(cmd->rpc->fd,
|
||||
printf_json(rpc_conn.fd,
|
||||
"{ 'method': '%s', 'id': %"PRIu64", 'params': {",
|
||||
method, out->id);
|
||||
va_start(ap, paramfmt_single_ticks);
|
||||
vprintf_json(cmd->rpc->fd, paramfmt_single_ticks, ap);
|
||||
vprintf_json(rpc_conn.fd, paramfmt_single_ticks, ap);
|
||||
va_end(ap);
|
||||
printf_json(cmd->rpc->fd, "} }");
|
||||
printf_json(rpc_conn.fd, "} }");
|
||||
return &pending;
|
||||
}
|
||||
|
||||
@@ -477,7 +479,7 @@ static struct command_result *handle_init(struct command *init_cmd,
|
||||
plugin_err("chdir to %s: %s", dir, strerror(errno));
|
||||
|
||||
rpctok = json_delve(buf, params, ".configuration.rpc-file");
|
||||
init_cmd->rpc->fd = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||
rpc_conn.fd = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||
if (rpctok->end - rpctok->start + 1 > sizeof(addr.sun_path))
|
||||
plugin_err("rpc filename '%.*s' too long",
|
||||
rpctok->end - rpctok->start,
|
||||
@@ -486,14 +488,14 @@ static struct command_result *handle_init(struct command *init_cmd,
|
||||
addr.sun_path[rpctok->end - rpctok->start] = '\0';
|
||||
addr.sun_family = AF_UNIX;
|
||||
|
||||
if (connect(init_cmd->rpc->fd, (struct sockaddr *)&addr, sizeof(addr)) != 0)
|
||||
if (connect(rpc_conn.fd, (struct sockaddr *)&addr, sizeof(addr)) != 0)
|
||||
plugin_err("Connecting to '%.*s': %s",
|
||||
rpctok->end - rpctok->start, buf + rpctok->start,
|
||||
strerror(errno));
|
||||
|
||||
deprecated_apis = streq(rpc_delve(tmpctx, "listconfigs",
|
||||
"'config': 'allow-deprecated-apis'",
|
||||
init_cmd->rpc,
|
||||
&rpc_conn,
|
||||
".allow-deprecated-apis"),
|
||||
"true");
|
||||
|
||||
@@ -515,7 +517,7 @@ static struct command_result *handle_init(struct command *init_cmd,
|
||||
}
|
||||
|
||||
if (init)
|
||||
init(init_cmd->rpc);
|
||||
init(&rpc_conn);
|
||||
|
||||
return command_done_ok(init_cmd, "");
|
||||
}
|
||||
@@ -569,7 +571,7 @@ static void setup_command_usage(const struct plugin_command *commands,
|
||||
struct command *usage_cmd = tal(tmpctx, struct command);
|
||||
|
||||
/* This is how common/param can tell it's just a usage request */
|
||||
usage_cmd->rpc = NULL;
|
||||
usage_cmd->usage_only = true;
|
||||
for (size_t i = 0; i < num_commands; i++) {
|
||||
struct command_result *res;
|
||||
|
||||
@@ -585,7 +587,7 @@ void plugin_main(char *argv[],
|
||||
const struct plugin_command *commands,
|
||||
size_t num_commands, ...)
|
||||
{
|
||||
struct plugin_conn request_conn, rpc_conn;
|
||||
struct plugin_conn request_conn;
|
||||
const tal_t *ctx = tal(NULL, char);
|
||||
struct command *cmd;
|
||||
const jsmntok_t *params;
|
||||
|
||||
Reference in New Issue
Block a user