Browse Source

jsonrpc: Added 'getnodes' to list known nodes.

getnodes returns an object containing a single array of 'nodes'. Each
element contains the node's ID, its hostname and its port. If
unknown (because we haven't seen a node announcement yet) then the port
is 0 and the hostname is null.
ppa-0.6.1
Christian Decker 8 years ago
parent
commit
594eb8109c
  1. 1
      daemon/jsonrpc.c
  2. 1
      daemon/jsonrpc.h
  3. 37
      daemon/routing.c

1
daemon/jsonrpc.c

@ -285,6 +285,7 @@ static const struct json_command *cmdlist[] = {
&getlog_command,
&connect_command,
&getpeers_command,
&getnodes_command,
&gethtlcs_command,
&close_command,
&newaddr_command,

1
daemon/jsonrpc.h

@ -61,6 +61,7 @@ extern const struct json_command newaddr_command;
extern const struct json_command connect_command;
extern const struct json_command close_command;
extern const struct json_command getpeers_command;
extern const struct json_command getnodes_command;
/* Invoice management. */
extern const struct json_command invoice_command;

37
daemon/routing.c

@ -64,6 +64,7 @@ struct node *new_node(struct lightningd_state *dstate,
n->id = *id;
n->in = tal_arr(n, struct node_connection *, 0);
n->out = tal_arr(n, struct node_connection *, 0);
n->port = 0;
node_map_add(dstate->nodes, n);
tal_add_destructor(n, destroy_node);
@ -511,4 +512,40 @@ const struct json_command dev_routefail_command = {
"Returns an empty result on success"
};
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->nodes, &i);
json_object_start(response, NULL);
json_array_start(response, "nodes");
while (n != NULL) {
json_object_start(response, NULL);
json_add_pubkey(response, cmd->dstate->secpctx,
"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->nodes, &i);
}
json_array_end(response);
json_object_end(response);
command_success(cmd, response);
}
const struct json_command getnodes_command = {
"getnodes",
json_getnodes,
"List all known nodes in the network.",
"Returns a 'nodes' array"
};

Loading…
Cancel
Save