mirror of
https://github.com/ElementsProject/lightning.git
synced 2024-12-28 17:44:47 +01:00
41b379ed89
Before this patch: 1. connectd says it's connected (peer_connected) 2. we tell connectd we want to talk about each channel (peer_make_active) 3. connectd gives us an fd for each channel, and we connect it to a subd (peer_active) 4. OR, connectd says it sent something about a channel we didn't tell it about, with an fd (peer_active) Now: 1. connectd says it's connected (peer_connected) 2. we start all appropriate subds and tell connectd to what channels/fds (peer_connect_subd). 3. if connectd says it sent something about a channel we didn't tell it about, we either tell it to hang up (peer_final_msg), or connect a new opening daemon (peer_connect_subd). This is the minimal-size patch, which is why we create socket pairs in so many places to use the existing functions. Many cleanups are possible, since the new flow is so simple. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
5.7 KiB
5.7 KiB
1 | #include <bitcoin/block.h> |
---|---|
2 | #include <common/channel_id.h> |
3 | #include <common/cryptomsg.h> |
4 | #include <common/features.h> |
5 | #include <common/node_id.h> |
6 | #include <common/wireaddr.h> |
7 | #include <wire/onion_wire.h> |
8 | msgtype,connectd_init,2000 |
9 | msgdata,connectd_init,chainparams,chainparams, |
10 | msgdata,connectd_init,our_features,feature_set, |
11 | msgdata,connectd_init,id,node_id, |
12 | msgdata,connectd_init,num_wireaddrs,u16, |
13 | msgdata,connectd_init,wireaddrs,wireaddr_internal,num_wireaddrs |
14 | msgdata,connectd_init,listen_announce,enum addr_listen_announce,num_wireaddrs |
15 | msgdata,connectd_init,tor_proxyaddr,?wireaddr, |
16 | msgdata,connectd_init,use_tor_proxy_always,bool, |
17 | msgdata,connectd_init,dev_allow_localhost,bool, |
18 | msgdata,connectd_init,use_dns,bool, |
19 | msgdata,connectd_init,tor_password,wirestring, |
20 | msgdata,connectd_init,timeout_secs,u32, |
21 | msgdata,connectd_init,websocket_helper,wirestring, |
22 | msgdata,connectd_init,websocket_port,u16, |
23 | msgdata,connectd_init,announce_websocket,bool, |
24 | msgdata,connectd_init,dev_fast_gossip,bool, |
25 | # If this is set, then fd 5 is dev_disconnect_fd. |
26 | msgdata,connectd_init,dev_disconnect,bool, |
27 | msgdata,connectd_init,dev_no_ping_timer,bool, |
28 | # Connectd->master, here are the addresses I bound, can announce. |
29 | msgtype,connectd_init_reply,2100 |
30 | msgdata,connectd_init_reply,num_bindings,u16, |
31 | msgdata,connectd_init_reply,bindings,wireaddr_internal,num_bindings |
32 | msgdata,connectd_init_reply,num_announceable,u16, |
33 | msgdata,connectd_init_reply,announceable,wireaddr,num_announceable |
34 | msgdata,connectd_init_reply,failmsg,?wirestring, |
35 | # Activate the connect daemon, so others can connect. |
36 | msgtype,connectd_activate,2025 |
37 | # Do we listen? |
38 | msgdata,connectd_activate,listen,bool, |
39 | # Connectd->master, I am ready. |
40 | msgtype,connectd_activate_reply,2125 |
41 | msgdata,connectd_activate_reply,failmsg,?wirestring, |
42 | # Master -> connectd: connect to a peer. |
43 | msgtype,connectd_connect_to_peer,2001 |
44 | msgdata,connectd_connect_to_peer,id,node_id, |
45 | msgdata,connectd_connect_to_peer,seconds_waited,u32, |
46 | msgdata,connectd_connect_to_peer,len,u32, |
47 | msgdata,connectd_connect_to_peer,addrs,wireaddr,len |
48 | msgdata,connectd_connect_to_peer,addrhint,?wireaddr_internal, |
49 | # Connectd->master: connect failed. |
50 | msgtype,connectd_connect_failed,2020 |
51 | msgdata,connectd_connect_failed,id,node_id, |
52 | msgdata,connectd_connect_failed,failcode,errcode_t, |
53 | msgdata,connectd_connect_failed,failreason,wirestring, |
54 | msgdata,connectd_connect_failed,seconds_to_delay,u32, |
55 | msgdata,connectd_connect_failed,addrhint,?wireaddr_internal, |
56 | # Connectd -> master: we got a peer. |
57 | msgtype,connectd_peer_connected,2002 |
58 | msgdata,connectd_peer_connected,id,node_id, |
59 | msgdata,connectd_peer_connected,addr,wireaddr_internal, |
60 | msgdata,connectd_peer_connected,remote_addr,?wireaddr, |
61 | msgdata,connectd_peer_connected,incoming,bool, |
62 | msgdata,connectd_peer_connected,flen,u16, |
63 | msgdata,connectd_peer_connected,features,u8,flen |
64 | # connectd -> master: peer disconnected. |
65 | msgtype,connectd_peer_disconnect_done,2006 |
66 | msgdata,connectd_peer_disconnect_done,id,node_id, |
67 | # Master -> connectd: make peer active immediately (we want to talk) (+ fd to subd). |
68 | msgtype,connectd_peer_connect_subd,2004 |
69 | msgdata,connectd_peer_connect_subd,id,node_id, |
70 | msgdata,connectd_peer_connect_subd,channel_id,channel_id, |
71 | # Connectd -> master: peer said something interesting |
72 | msgtype,connectd_peer_spoke,2005 |
73 | msgdata,connectd_peer_spoke,id,node_id, |
74 | msgdata,connectd_peer_spoke,msgtype,u16, |
75 | msgdata,connectd_peer_spoke,channel_id,channel_id, |
76 | # master -> connectd: peer no longer wanted, you can disconnect. |
77 | msgtype,connectd_discard_peer,2015 |
78 | msgdata,connectd_discard_peer,id,node_id, |
79 | # master -> connectd: give message to peer and disconnect. |
80 | msgtype,connectd_peer_final_msg,2003 |
81 | msgdata,connectd_peer_final_msg,id,node_id, |
82 | msgdata,connectd_peer_final_msg,len,u16, |
83 | msgdata,connectd_peer_final_msg,msg,u8,len |
84 | # master -> connectd: do you have a memleak? |
85 | msgtype,connectd_dev_memleak,2033 |
86 | msgtype,connectd_dev_memleak_reply,2133 |
87 | msgdata,connectd_dev_memleak_reply,leak,bool, |
88 | # Ping/pong test. Waits for a reply if it expects one. |
89 | msgtype,connectd_ping,2030 |
90 | msgdata,connectd_ping,id,node_id, |
91 | msgdata,connectd_ping,num_pong_bytes,u16, |
92 | msgdata,connectd_ping,len,u16, |
93 | msgtype,connectd_ping_reply,2130 |
94 | # False if we there was already a ping in progress. |
95 | msgdata,connectd_ping_reply,sent,bool, |
96 | # 0 == no pong expected, otherwise length of pong. |
97 | msgdata,connectd_ping_reply,totlen,u16, |
98 | # We tell lightningd we got an onionmsg |
99 | msgtype,connectd_got_onionmsg_to_us,2145 |
100 | msgdata,connectd_got_onionmsg_to_us,obs2,bool, |
101 | msgdata,connectd_got_onionmsg_to_us,node_alias,pubkey, |
102 | msgdata,connectd_got_onionmsg_to_us,self_id,?secret, |
103 | msgdata,connectd_got_onionmsg_to_us,reply_blinding,?pubkey, |
104 | msgdata,connectd_got_onionmsg_to_us,reply_first_node,?pubkey, |
105 | msgdata,connectd_got_onionmsg_to_us,reply_path_len,u16, |
106 | msgdata,connectd_got_onionmsg_to_us,reply_path,onionmsg_path,reply_path_len |
107 | msgdata,connectd_got_onionmsg_to_us,rawmsg_len,u16, |
108 | msgdata,connectd_got_onionmsg_to_us,rawmsg,u8,rawmsg_len |
109 | # Lightningd tells us to send an onion message. |
110 | msgtype,connectd_send_onionmsg,2041 |
111 | msgdata,connectd_send_onionmsg,obs2,bool, |
112 | msgdata,connectd_send_onionmsg,id,node_id, |
113 | msgdata,connectd_send_onionmsg,onion_len,u16, |
114 | msgdata,connectd_send_onionmsg,onion,u8,onion_len |
115 | msgdata,connectd_send_onionmsg,blinding,pubkey, |
116 | # A custom message that we got from a peer and don't know how to handle, so we |
117 | # forward it to the master for further handling. |
118 | msgtype,connectd_custommsg_in,2110 |
119 | msgdata,connectd_custommsg_in,id,node_id, |
120 | msgdata,connectd_custommsg_in,msg_len,u16, |
121 | msgdata,connectd_custommsg_in,msg,u8,msg_len |
122 | # A custom message that the lightningd tells us to send to the peer. |
123 | msgtype,connectd_custommsg_out,2011 |
124 | msgdata,connectd_custommsg_out,id,node_id, |
125 | msgdata,connectd_custommsg_out,msg_len,u16, |
126 | msgdata,connectd_custommsg_out,msg,u8,msg_len |
127 | # master -> connect: stop sending gossip. |
128 | msgtype,connectd_dev_suppress_gossip,2032 |