mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-01-18 05:12:45 +01:00
lightningd: hand HSM fd to channeld.
For the moment, it's just to do ECDH to read the onion. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
8146b838e8
commit
a815500653
@ -657,6 +657,38 @@ static int channel_msg(struct subd *sd, const u8 *msg, const int *unused)
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct channeld_start {
|
||||
struct peer *peer;
|
||||
const u8 *initmsg;
|
||||
};
|
||||
|
||||
/* We've got fd from HSM for channeld */
|
||||
static bool peer_start_channeld_hsmfd(struct subd *hsm, const u8 *resp,
|
||||
const int *fds,
|
||||
struct channeld_start *cds)
|
||||
{
|
||||
cds->peer->owner = new_subd(cds->peer->ld, cds->peer->ld,
|
||||
"lightningd_channel", cds->peer,
|
||||
channel_wire_type_name,
|
||||
channel_msg, NULL,
|
||||
cds->peer->fd,
|
||||
cds->peer->gossip_client_fd, fds[0], -1);
|
||||
if (!cds->peer->owner) {
|
||||
log_unusual(cds->peer->log, "Could not subdaemon channel: %s",
|
||||
strerror(errno));
|
||||
peer_set_condition(cds->peer, "Failed to subdaemon channel");
|
||||
tal_free(cds->peer);
|
||||
return true;
|
||||
}
|
||||
cds->peer->fd = -1;
|
||||
|
||||
peer_set_condition(cds->peer, "Waiting for funding confirmations");
|
||||
/* We don't expect a response: we are triggered by funding_depth_cb. */
|
||||
subd_send_msg(cds->peer->owner, take(cds->initmsg));
|
||||
tal_free(cds);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* opening is done, start lightningd_channel for peer. */
|
||||
static void peer_start_channeld(struct peer *peer, bool am_funder,
|
||||
const struct channel_config *their_config,
|
||||
@ -666,25 +698,17 @@ static void peer_start_channeld(struct peer *peer, bool am_funder,
|
||||
const struct basepoints *theirbase,
|
||||
const struct pubkey *their_per_commit_point)
|
||||
{
|
||||
u8 *msg;
|
||||
struct channeld_start *cds = tal(peer, struct channeld_start);
|
||||
|
||||
/* Normal channel daemon. */
|
||||
peer->owner = new_subd(peer->ld, peer->ld,
|
||||
"lightningd_channel", peer,
|
||||
channel_wire_type_name,
|
||||
channel_msg, NULL,
|
||||
peer->fd, peer->gossip_client_fd, -1);
|
||||
if (!peer->owner) {
|
||||
log_unusual(peer->log, "Could not subdaemon channel: %s",
|
||||
strerror(errno));
|
||||
peer_set_condition(peer, "Failed to subdaemon channel");
|
||||
tal_free(peer);
|
||||
return;
|
||||
}
|
||||
peer->fd = -1;
|
||||
/* Unowned: back to being owned by main daemon. */
|
||||
peer->owner = NULL;
|
||||
tal_steal(peer->ld, peer);
|
||||
|
||||
peer_set_condition(peer, "Waiting for funding confirmations");
|
||||
msg = towire_channel_init(peer,
|
||||
peer_set_condition(peer, "Waiting for HSM file descriptor");
|
||||
|
||||
cds->peer = peer;
|
||||
/* Prepare init message now while we have access to all the data. */
|
||||
cds->initmsg = towire_channel_init(cds,
|
||||
peer->funding_txid,
|
||||
peer->funding_outnum,
|
||||
&peer->our_config,
|
||||
@ -707,8 +731,10 @@ static void peer_start_channeld(struct peer *peer, bool am_funder,
|
||||
time_to_msec(peer->ld->dstate.config
|
||||
.commit_time));
|
||||
|
||||
/* We don't expect a response: we are triggered by funding_depth_cb. */
|
||||
subd_send_msg(peer->owner, take(msg));
|
||||
/* Get fd from hsm. */
|
||||
subd_req(peer->ld->hsm,
|
||||
take(towire_hsmctl_hsmfd_ecdh(peer, peer->unique_id)), -1, 1,
|
||||
peer_start_channeld_hsmfd, cds);
|
||||
}
|
||||
|
||||
static bool opening_release_tx(struct subd *opening, const u8 *resp,
|
||||
|
Loading…
Reference in New Issue
Block a user