X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=src%2Fln%2Fpeer_handler.rs;h=2472518d613a4199678a6dbe0c811d9fe42e38ea;hb=c47525cb8496c4a82b68e0933a3a5fe0c38e5494;hp=86e2553623d2405232c97c735f548e7fb84bb04b;hpb=76d127f7e46319d23e3eb21955f8cce091ac27d3;p=rust-lightning diff --git a/src/ln/peer_handler.rs b/src/ln/peer_handler.rs index 86e25536..2472518d 100644 --- a/src/ln/peer_handler.rs +++ b/src/ln/peer_handler.rs @@ -21,7 +21,9 @@ pub struct MessageHandler { /// implement Hash to meet the PeerManager API. /// For efficiency, Clone should be relatively cheap for this type. /// You probably want to just extend an int and put a file descriptor in a struct and implement -/// send_data. +/// send_data. Note that if you are using a higher-level net library that may close() itself, be +/// careful to ensure you don't have races whereby you might register a new connection with an fd +/// the same as a yet-to-be-disconnect_event()-ed. pub trait SocketDescriptor : cmp::Eq + hash::Hash + Clone { /// Attempts to send some data from the given Vec starting at the given offset to the peer. /// Returns the amount of data which was sent, possibly 0 if the socket has since disconnected. @@ -612,6 +614,14 @@ impl PeerManager { //TODO: Handle upstream in some confused form so that upstream just knows //to call us somehow? }, + Event::SendOpenChannel { ref node_id, ref msg } => { + let (mut descriptor, peer) = get_peer_for_forwarding!(node_id, { + //TODO: Drop the pending channel? (or just let it timeout, but that sucks) + }); + peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 32))); + Self::do_attempt_write_data(&mut descriptor, peer); + continue; + }, Event::SendFundingCreated { ref node_id, ref msg } => { let (mut descriptor, peer) = get_peer_for_forwarding!(node_id, { //TODO: generate a DiscardFunding event indicating to the wallet that