diff --git a/broker/src/init.rs b/broker/src/init.rs new file mode 100644 index 0000000..b7ae3ed --- /dev/null +++ b/broker/src/init.rs @@ -0,0 +1,31 @@ +use sphinx_key_parser::MsgDriver; +use vls_protocol::model::Secret; +use vls_protocol::{msgs, serde_bolt::WireString}; +use vls_proxy::util::{read_allowlist, read_integration_test_seed}; + +pub fn make_init_msg() -> anyhow::Result> { + let allowlist = read_allowlist() + .into_iter() + .map(|s| WireString(s.as_bytes().to_vec())) + .collect::>(); + let seed = read_integration_test_seed() + .map(|s| Secret(s)) + .or(Some(Secret([1; 32]))); + // FIXME remove this + log::info!("allowlist {:?} seed {:?}", allowlist, seed); + let init = msgs::HsmdInit2 { + derivation_style: 0, + network_name: WireString("testnet".as_bytes().to_vec()), + dev_seed: seed, + dev_allowlist: allowlist, + }; + let sequence = 0; + let mut md = MsgDriver::new_empty(); + msgs::write_serial_request_header(&mut md, sequence, 0)?; + msgs::write(&mut md, init)?; + Ok(md.bytes()) + // msgs::read_serial_response_header(&mut serial, sequence)?; + // let init_reply: msgs::HsmdInit2Reply = msgs::read_message(&mut serial)?; + // log::info!("init reply {:?}", init_reply); + // Ok(()) +} diff --git a/broker/src/main.rs b/broker/src/main.rs index 8c83ac8..41fde2c 100644 --- a/broker/src/main.rs +++ b/broker/src/main.rs @@ -1,10 +1,12 @@ +mod init; mod mqtt; mod run_test; mod unix_fd; +use crate::mqtt::start_broker; use crate::unix_fd::SignerLoop; use clap::{App, AppSettings, Arg}; -use crate::mqtt::start_broker; +use sphinx_key_parser as parser; use std::env; use tokio::sync::{mpsc, oneshot}; use vls_proxy::client::UnixClient; @@ -56,12 +58,26 @@ fn main() -> anyhow::Result<()> { run_test::run_test(); } else { let (tx, rx) = mpsc::channel(1000); - let _runtime = start_broker(true, rx); - // listen to reqs from CLN - let conn = UnixConnection::new(parent_fd); - let client = UnixClient::new(conn); - let mut signer_loop = SignerLoop::new(client, tx); - signer_loop.start(); + let runtime = start_broker(true, rx); + runtime.block_on(async { + let init_msg_2 = crate::init::make_init_msg().expect("could make init msg"); + let (reply_tx, reply_rx) = oneshot::channel(); + // Send a request to the MQTT handler to send to signer + let request = ChannelRequest { + message: init_msg_2, + reply_tx, + }; + let _ = tx.send(request).await; + let res = reply_rx.await.expect("couldnt receive"); + let reply = + parser::response_from_bytes(res.reply, 0).expect("could parse init receive"); + println!("REPLY {:?}", reply); + // listen to reqs from CLN + let conn = UnixConnection::new(parent_fd); + let client = UnixClient::new(conn); + let mut signer_loop = SignerLoop::new(client, tx); + signer_loop.start(); + }) } Ok(())