mirror of
https://github.com/ElementsProject/lightning.git
synced 2024-11-20 02:27:51 +01:00
refactor: Move JSONRPC methods to separate compilation unit
This allows us to not care too much about bringing JSON into the new subdaemons.
This commit is contained in:
parent
76e2c980e1
commit
92bc0abdc3
@ -43,6 +43,7 @@ DAEMON_SRC := \
|
|||||||
daemon/pay.c \
|
daemon/pay.c \
|
||||||
daemon/peer.c \
|
daemon/peer.c \
|
||||||
daemon/routing.c \
|
daemon/routing.c \
|
||||||
|
daemon/routingrpc.c \
|
||||||
daemon/secrets.c \
|
daemon/secrets.c \
|
||||||
daemon/sphinx.c \
|
daemon/sphinx.c \
|
||||||
daemon/timeout.c \
|
daemon/timeout.c \
|
||||||
|
166
daemon/routing.c
166
daemon/routing.c
@ -1,4 +1,3 @@
|
|||||||
#include "jsonrpc.h"
|
|
||||||
#include "lightningd.h"
|
#include "lightningd.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "overflows.h"
|
#include "overflows.h"
|
||||||
@ -510,171 +509,6 @@ char *opt_add_route(const char *arg, struct lightningd_state *dstate)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void json_add_route(struct command *cmd,
|
|
||||||
const char *buffer, const jsmntok_t *params)
|
|
||||||
{
|
|
||||||
jsmntok_t *srctok, *dsttok, *basetok, *vartok, *delaytok, *minblockstok;
|
|
||||||
struct pubkey src, dst;
|
|
||||||
u32 base, var, delay, minblocks;
|
|
||||||
|
|
||||||
if (!json_get_params(buffer, params,
|
|
||||||
"src", &srctok,
|
|
||||||
"dst", &dsttok,
|
|
||||||
"base", &basetok,
|
|
||||||
"var", &vartok,
|
|
||||||
"delay", &delaytok,
|
|
||||||
"minblocks", &minblockstok,
|
|
||||||
NULL)) {
|
|
||||||
command_fail(cmd, "Need src, dst, base, var, delay & minblocks");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!pubkey_from_hexstr(buffer + srctok->start,
|
|
||||||
srctok->end - srctok->start, &src)) {
|
|
||||||
command_fail(cmd, "src %.*s not valid",
|
|
||||||
srctok->end - srctok->start,
|
|
||||||
buffer + srctok->start);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!pubkey_from_hexstr(buffer + dsttok->start,
|
|
||||||
dsttok->end - dsttok->start, &dst)) {
|
|
||||||
command_fail(cmd, "dst %.*s not valid",
|
|
||||||
dsttok->end - dsttok->start,
|
|
||||||
buffer + dsttok->start);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!json_tok_number(buffer, basetok, &base)
|
|
||||||
|| !json_tok_number(buffer, vartok, &var)
|
|
||||||
|| !json_tok_number(buffer, delaytok, &delay)
|
|
||||||
|| !json_tok_number(buffer, minblockstok, &minblocks)) {
|
|
||||||
command_fail(cmd,
|
|
||||||
"base, var, delay and minblocks must be numbers");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
add_connection(cmd->dstate->rstate, &src, &dst, base, var, delay, minblocks);
|
|
||||||
command_success(cmd, null_response(cmd));
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct json_command dev_add_route_command = {
|
|
||||||
"dev-add-route",
|
|
||||||
json_add_route,
|
|
||||||
"Add route from {src} to {dst}, {base} rate in msatoshi, {var} rate in msatoshi, {delay} blocks delay and {minblocks} minimum timeout",
|
|
||||||
"Returns an empty result on success"
|
|
||||||
};
|
|
||||||
AUTODATA(json_command, &dev_add_route_command);
|
|
||||||
|
|
||||||
static void json_getchannels(struct command *cmd,
|
|
||||||
const char *buffer, const jsmntok_t *params)
|
|
||||||
{
|
|
||||||
struct json_result *response = new_json_result(cmd);
|
|
||||||
struct node_map_iter it;
|
|
||||||
struct node *n;
|
|
||||||
struct node_map *nodes = cmd->dstate->rstate->nodes;
|
|
||||||
struct node_connection *c;
|
|
||||||
int num_conn, i;
|
|
||||||
|
|
||||||
json_object_start(response, NULL);
|
|
||||||
json_array_start(response, "channels");
|
|
||||||
for (n = node_map_first(nodes, &it); n; n = node_map_next(nodes, &it)) {
|
|
||||||
num_conn = tal_count(n->out);
|
|
||||||
for (i = 0; i < num_conn; i++){
|
|
||||||
c = n->out[i];
|
|
||||||
json_object_start(response, NULL);
|
|
||||||
json_add_pubkey(response, "from", &n->id);
|
|
||||||
json_add_pubkey(response, "to", &c->dst->id);
|
|
||||||
json_add_num(response, "base_fee", c->base_fee);
|
|
||||||
json_add_num(response, "proportional_fee", c->proportional_fee);
|
|
||||||
json_add_num(response, "expiry", c->delay);
|
|
||||||
json_add_bool(response, "active", c->active);
|
|
||||||
json_object_end(response);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
json_array_end(response);
|
|
||||||
json_object_end(response);
|
|
||||||
command_success(cmd, response);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct json_command getchannels_command = {
|
|
||||||
"getchannels",
|
|
||||||
json_getchannels,
|
|
||||||
"List all known channels.",
|
|
||||||
"Returns a 'channels' array with all known channels including their fees."
|
|
||||||
};
|
|
||||||
AUTODATA(json_command, &getchannels_command);
|
|
||||||
|
|
||||||
static void json_routefail(struct command *cmd,
|
|
||||||
const char *buffer, const jsmntok_t *params)
|
|
||||||
{
|
|
||||||
jsmntok_t *enabletok;
|
|
||||||
bool enable;
|
|
||||||
|
|
||||||
if (!json_get_params(buffer, params,
|
|
||||||
"enable", &enabletok,
|
|
||||||
NULL)) {
|
|
||||||
command_fail(cmd, "Need enable");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!json_tok_bool(buffer, enabletok, &enable)) {
|
|
||||||
command_fail(cmd, "enable must be true or false");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
log_debug(cmd->dstate->base_log, "dev-routefail: routefail %s",
|
|
||||||
enable ? "enabled" : "disabled");
|
|
||||||
cmd->dstate->dev_never_routefail = !enable;
|
|
||||||
|
|
||||||
command_success(cmd, null_response(cmd));
|
|
||||||
}
|
|
||||||
static const struct json_command dev_routefail_command = {
|
|
||||||
"dev-routefail",
|
|
||||||
json_routefail,
|
|
||||||
"FAIL htlcs that we can't route if {enable}",
|
|
||||||
"Returns an empty result on success"
|
|
||||||
};
|
|
||||||
AUTODATA(json_command, &dev_routefail_command);
|
|
||||||
|
|
||||||
static void json_getnodes(struct command *cmd,
|
|
||||||
const char *buffer, const jsmntok_t *params)
|
|
||||||
{
|
|
||||||
struct json_result *response = new_json_result(cmd);
|
|
||||||
struct node *n;
|
|
||||||
struct node_map_iter i;
|
|
||||||
|
|
||||||
n = node_map_first(cmd->dstate->rstate->nodes, &i);
|
|
||||||
|
|
||||||
json_object_start(response, NULL);
|
|
||||||
json_array_start(response, "nodes");
|
|
||||||
|
|
||||||
while (n != NULL) {
|
|
||||||
json_object_start(response, NULL);
|
|
||||||
json_add_pubkey(response, "nodeid", &n->id);
|
|
||||||
json_add_num(response, "port", n->port);
|
|
||||||
if (!n->port)
|
|
||||||
json_add_null(response, "hostname");
|
|
||||||
else
|
|
||||||
json_add_string(response, "hostname", n->hostname);
|
|
||||||
|
|
||||||
json_object_end(response);
|
|
||||||
n = node_map_next(cmd->dstate->rstate->nodes, &i);
|
|
||||||
}
|
|
||||||
|
|
||||||
json_array_end(response);
|
|
||||||
json_object_end(response);
|
|
||||||
command_success(cmd, response);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct json_command getnodes_command = {
|
|
||||||
"getnodes",
|
|
||||||
json_getnodes,
|
|
||||||
"List all known nodes in the network.",
|
|
||||||
"Returns a 'nodes' array"
|
|
||||||
};
|
|
||||||
AUTODATA(json_command, &getnodes_command);
|
|
||||||
|
|
||||||
bool add_channel_direction(struct routing_state *rstate,
|
bool add_channel_direction(struct routing_state *rstate,
|
||||||
const struct pubkey *from,
|
const struct pubkey *from,
|
||||||
const struct pubkey *to,
|
const struct pubkey *to,
|
||||||
|
169
daemon/routingrpc.c
Normal file
169
daemon/routingrpc.c
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
#include "jsonrpc.h"
|
||||||
|
#include "lightningd.h"
|
||||||
|
#include "log.h"
|
||||||
|
#include "routing.h"
|
||||||
|
|
||||||
|
static void json_add_route(struct command *cmd,
|
||||||
|
const char *buffer, const jsmntok_t *params)
|
||||||
|
{
|
||||||
|
jsmntok_t *srctok, *dsttok, *basetok, *vartok, *delaytok, *minblockstok;
|
||||||
|
struct pubkey src, dst;
|
||||||
|
u32 base, var, delay, minblocks;
|
||||||
|
|
||||||
|
if (!json_get_params(buffer, params,
|
||||||
|
"src", &srctok,
|
||||||
|
"dst", &dsttok,
|
||||||
|
"base", &basetok,
|
||||||
|
"var", &vartok,
|
||||||
|
"delay", &delaytok,
|
||||||
|
"minblocks", &minblockstok,
|
||||||
|
NULL)) {
|
||||||
|
command_fail(cmd, "Need src, dst, base, var, delay & minblocks");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!pubkey_from_hexstr(buffer + srctok->start,
|
||||||
|
srctok->end - srctok->start, &src)) {
|
||||||
|
command_fail(cmd, "src %.*s not valid",
|
||||||
|
srctok->end - srctok->start,
|
||||||
|
buffer + srctok->start);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!pubkey_from_hexstr(buffer + dsttok->start,
|
||||||
|
dsttok->end - dsttok->start, &dst)) {
|
||||||
|
command_fail(cmd, "dst %.*s not valid",
|
||||||
|
dsttok->end - dsttok->start,
|
||||||
|
buffer + dsttok->start);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!json_tok_number(buffer, basetok, &base)
|
||||||
|
|| !json_tok_number(buffer, vartok, &var)
|
||||||
|
|| !json_tok_number(buffer, delaytok, &delay)
|
||||||
|
|| !json_tok_number(buffer, minblockstok, &minblocks)) {
|
||||||
|
command_fail(cmd,
|
||||||
|
"base, var, delay and minblocks must be numbers");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
add_connection(cmd->dstate->rstate, &src, &dst, base, var, delay, minblocks);
|
||||||
|
command_success(cmd, null_response(cmd));
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct json_command dev_add_route_command = {
|
||||||
|
"dev-add-route",
|
||||||
|
json_add_route,
|
||||||
|
"Add route from {src} to {dst}, {base} rate in msatoshi, {var} rate in msatoshi, {delay} blocks delay and {minblocks} minimum timeout",
|
||||||
|
"Returns an empty result on success"
|
||||||
|
};
|
||||||
|
AUTODATA(json_command, &dev_add_route_command);
|
||||||
|
|
||||||
|
static void json_getchannels(struct command *cmd,
|
||||||
|
const char *buffer, const jsmntok_t *params)
|
||||||
|
{
|
||||||
|
struct json_result *response = new_json_result(cmd);
|
||||||
|
struct node_map_iter it;
|
||||||
|
struct node *n;
|
||||||
|
struct node_map *nodes = cmd->dstate->rstate->nodes;
|
||||||
|
struct node_connection *c;
|
||||||
|
int num_conn, i;
|
||||||
|
|
||||||
|
json_object_start(response, NULL);
|
||||||
|
json_array_start(response, "channels");
|
||||||
|
for (n = node_map_first(nodes, &it); n; n = node_map_next(nodes, &it)) {
|
||||||
|
num_conn = tal_count(n->out);
|
||||||
|
for (i = 0; i < num_conn; i++){
|
||||||
|
c = n->out[i];
|
||||||
|
json_object_start(response, NULL);
|
||||||
|
json_add_pubkey(response, "from", &n->id);
|
||||||
|
json_add_pubkey(response, "to", &c->dst->id);
|
||||||
|
json_add_num(response, "base_fee", c->base_fee);
|
||||||
|
json_add_num(response, "proportional_fee", c->proportional_fee);
|
||||||
|
json_add_num(response, "expiry", c->delay);
|
||||||
|
json_add_bool(response, "active", c->active);
|
||||||
|
json_object_end(response);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
json_array_end(response);
|
||||||
|
json_object_end(response);
|
||||||
|
command_success(cmd, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct json_command getchannels_command = {
|
||||||
|
"getchannels",
|
||||||
|
json_getchannels,
|
||||||
|
"List all known channels.",
|
||||||
|
"Returns a 'channels' array with all known channels including their fees."
|
||||||
|
};
|
||||||
|
AUTODATA(json_command, &getchannels_command);
|
||||||
|
|
||||||
|
static void json_routefail(struct command *cmd,
|
||||||
|
const char *buffer, const jsmntok_t *params)
|
||||||
|
{
|
||||||
|
jsmntok_t *enabletok;
|
||||||
|
bool enable;
|
||||||
|
|
||||||
|
if (!json_get_params(buffer, params,
|
||||||
|
"enable", &enabletok,
|
||||||
|
NULL)) {
|
||||||
|
command_fail(cmd, "Need enable");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!json_tok_bool(buffer, enabletok, &enable)) {
|
||||||
|
command_fail(cmd, "enable must be true or false");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
log_debug(cmd->dstate->base_log, "dev-routefail: routefail %s",
|
||||||
|
enable ? "enabled" : "disabled");
|
||||||
|
cmd->dstate->dev_never_routefail = !enable;
|
||||||
|
|
||||||
|
command_success(cmd, null_response(cmd));
|
||||||
|
}
|
||||||
|
static const struct json_command dev_routefail_command = {
|
||||||
|
"dev-routefail",
|
||||||
|
json_routefail,
|
||||||
|
"FAIL htlcs that we can't route if {enable}",
|
||||||
|
"Returns an empty result on success"
|
||||||
|
};
|
||||||
|
AUTODATA(json_command, &dev_routefail_command);
|
||||||
|
|
||||||
|
static void json_getnodes(struct command *cmd,
|
||||||
|
const char *buffer, const jsmntok_t *params)
|
||||||
|
{
|
||||||
|
struct json_result *response = new_json_result(cmd);
|
||||||
|
struct node *n;
|
||||||
|
struct node_map_iter i;
|
||||||
|
|
||||||
|
n = node_map_first(cmd->dstate->rstate->nodes, &i);
|
||||||
|
|
||||||
|
json_object_start(response, NULL);
|
||||||
|
json_array_start(response, "nodes");
|
||||||
|
|
||||||
|
while (n != NULL) {
|
||||||
|
json_object_start(response, NULL);
|
||||||
|
json_add_pubkey(response, "nodeid", &n->id);
|
||||||
|
json_add_num(response, "port", n->port);
|
||||||
|
if (!n->port)
|
||||||
|
json_add_null(response, "hostname");
|
||||||
|
else
|
||||||
|
json_add_string(response, "hostname", n->hostname);
|
||||||
|
|
||||||
|
json_object_end(response);
|
||||||
|
n = node_map_next(cmd->dstate->rstate->nodes, &i);
|
||||||
|
}
|
||||||
|
|
||||||
|
json_array_end(response);
|
||||||
|
json_object_end(response);
|
||||||
|
command_success(cmd, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct json_command getnodes_command = {
|
||||||
|
"getnodes",
|
||||||
|
json_getnodes,
|
||||||
|
"List all known nodes in the network.",
|
||||||
|
"Returns a 'nodes' array"
|
||||||
|
};
|
||||||
|
AUTODATA(json_command, &getnodes_command);
|
Loading…
Reference in New Issue
Block a user