diff --git a/daemon/routing.c b/daemon/routing.c index 1b63a5669..dec8dc7fe 100644 --- a/daemon/routing.c +++ b/daemon/routing.c @@ -28,6 +28,7 @@ static bool node_eq(const struct node *n, const secp256k1_pubkey *key) { return structeq(&n->id.pubkey, key); } + HTABLE_DEFINE_TYPE(struct node, keyof_node, hash_key, node_eq, node_map); struct node_map *empty_node_map(struct lightningd_state *dstate) @@ -69,6 +70,26 @@ struct node *new_node(struct lightningd_state *dstate, return n; } +struct node *add_node( + struct lightningd_state *dstate, + const struct pubkey *pk, + char *hostname, + int port) +{ + struct node *n = get_node(dstate, pk); + if (!n) { + n = new_node(dstate, pk); + log_debug_struct(dstate->base_log, "Creating new node %s", + struct pubkey, pk); + } else { + log_debug_struct(dstate->base_log, "Update existing node %s", + struct pubkey, pk); + } + n->hostname = tal_steal(n, hostname); + n->port = port; + return n; +} + static bool remove_conn_from_array(struct node_connection ***conns, struct node_connection *nc) { diff --git a/daemon/routing.h b/daemon/routing.h index faeede061..5430c47ba 100644 --- a/daemon/routing.h +++ b/daemon/routing.h @@ -20,6 +20,11 @@ struct node_connection { struct node { struct pubkey id; + + /* IP/Hostname and port of this node */ + char *hostname; + int port; + /* Routes connecting to us, from us. */ struct node_connection **in, **out; @@ -46,6 +51,12 @@ struct node *get_node(struct lightningd_state *dstate, * If it returns more than msatoshi, it overflowed. */ s64 connection_fee(const struct node_connection *c, u64 msatoshi); +/* Updates existing node, or creates a new one as required. */ +struct node *add_node(struct lightningd_state *dstate, + const struct pubkey *pk, + char *hostname, + int port); + /* Updates existing connection, or creates new one as required. */ struct node_connection *add_connection(struct lightningd_state *dstate, const struct pubkey *from,