Browse Source
This allows us to not care too much about bringing JSON into the new subdaemons.ppa-0.6.1
Christian Decker
8 years ago
committed by
Rusty Russell
3 changed files with 170 additions and 166 deletions
@ -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