One issue we have in CI is reconnection races: if an incoming connection arrives while an outgoing one is negotiated, we close the outgoing one and issue a disconnect, which fails any connect attempts. By sending a "reconnected" message instead of disconnect/connect we can avoid disturbing in-progress connection attempts which happens in CI quite a bit. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
8.4 KiB
8.4 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,announce_websocket,bool, |
| 23 | msgdata,connectd_init,dev_fast_gossip,bool, |
| 24 | # If this is set, then fd 5 is dev_disconnect_fd. |
| 25 | msgdata,connectd_init,dev_disconnect,bool, |
| 26 | msgdata,connectd_init,dev_no_ping_timer,bool, |
| 27 | # Allow incoming connections, but don't talk. |
| 28 | msgdata,connectd_init,dev_noreply,bool, |
| 29 | msgdata,connectd_init,dev_throttle_gossip,bool, |
| 30 | msgdata,connectd_init,dev_no_reconnect,bool, |
| 31 | msgdata,connectd_init,dev_fast_reconnect,bool, |
| 32 | msgdata,connectd_init,dev_limit_connections_inflight,bool, |
| 33 | # Connectd->master, here are the addresses I bound, can announce. |
| 34 | msgtype,connectd_init_reply,2100 |
| 35 | msgdata,connectd_init_reply,num_bindings,u16, |
| 36 | msgdata,connectd_init_reply,bindings,wireaddr_internal,num_bindings |
| 37 | msgdata,connectd_init_reply,num_announceable,u16, |
| 38 | msgdata,connectd_init_reply,announceable,wireaddr,num_announceable |
| 39 | msgdata,connectd_init_reply,failmsg,?wirestring, |
| 40 | # Activate the connect daemon, so others can connect. |
| 41 | msgtype,connectd_activate,2025 |
| 42 | # Do we listen? |
| 43 | msgdata,connectd_activate,listen,bool, |
| 44 | # Set the allowed (i.e. don't hang up on!) unknown messages. |
| 45 | msgtype,connectd_set_custommsgs,2007 |
| 46 | msgdata,connectd_set_custommsgs,len,u32, |
| 47 | msgdata,connectd_set_custommsgs,msgnums,u16,len |
| 48 | # Connectd->master, I am ready. |
| 49 | msgtype,connectd_activate_reply,2125 |
| 50 | msgdata,connectd_activate_reply,failmsg,?wirestring, |
| 51 | # lightningd -> connectd: here's an SCID->peer mapping for onion messages |
| 52 | msgtype,connectd_scid_map,2024 |
| 53 | msgdata,connectd_scid_map,scid,short_channel_id, |
| 54 | msgdata,connectd_scid_map,node_id,node_id, |
| 55 | # Master -> connectd: connect to a peer. |
| 56 | # If !transient, we will keep trying to connect. |
| 57 | msgtype,connectd_connect_to_peer,2001 |
| 58 | msgdata,connectd_connect_to_peer,id,node_id, |
| 59 | msgdata,connectd_connect_to_peer,len,u32, |
| 60 | msgdata,connectd_connect_to_peer,addrs,wireaddr_internal,len |
| 61 | msgdata,connectd_connect_to_peer,transient,bool, |
| 62 | # Connectd->master: connect failed. |
| 63 | msgtype,connectd_connect_failed,2020 |
| 64 | msgdata,connectd_connect_failed,id,node_id, |
| 65 | msgdata,connectd_connect_failed,failcode,enum jsonrpc_errcode, |
| 66 | msgdata,connectd_connect_failed,failreason,wirestring, |
| 67 | # Connectd -> master: we got a peer. |
| 68 | msgtype,connectd_peer_connected,2002 |
| 69 | msgdata,connectd_peer_connected,id,node_id, |
| 70 | msgdata,connectd_peer_connected,counter,u64, |
| 71 | msgdata,connectd_peer_connected,addr,wireaddr_internal, |
| 72 | msgdata,connectd_peer_connected,remote_addr,?wireaddr, |
| 73 | msgdata,connectd_peer_connected,incoming,bool, |
| 74 | msgdata,connectd_peer_connected,flen,u16, |
| 75 | msgdata,connectd_peer_connected,features,u8,flen |
| 76 | # connectd -> master: peer disconnected. |
| 77 | msgtype,connectd_peer_disconnected,2006 |
| 78 | msgdata,connectd_peer_disconnected,id,node_id, |
| 79 | msgdata,connectd_peer_disconnected,counter,u64, |
| 80 | # Connectd -> master: peer reconnected (disconnect & connect) |
| 81 | msgtype,connectd_peer_reconnected,2010 |
| 82 | msgdata,connectd_peer_reconnected,id,node_id, |
| 83 | msgdata,connectd_peer_reconnected,prev_counter,u64, |
| 84 | msgdata,connectd_peer_reconnected,counter,u64, |
| 85 | msgdata,connectd_peer_reconnected,addr,wireaddr_internal, |
| 86 | msgdata,connectd_peer_reconnected,remote_addr,?wireaddr, |
| 87 | msgdata,connectd_peer_reconnected,incoming,bool, |
| 88 | msgdata,connectd_peer_reconnected,flen,u16, |
| 89 | msgdata,connectd_peer_reconnected,features,u8,flen |
| 90 | # Master -> connectd: make peer active immediately (we want to talk) (+ fd to subd). |
| 91 | msgtype,connectd_peer_connect_subd,2004 |
| 92 | msgdata,connectd_peer_connect_subd,id,node_id, |
| 93 | msgdata,connectd_peer_connect_subd,counter,u64, |
| 94 | msgdata,connectd_peer_connect_subd,channel_id,channel_id, |
| 95 | # Connectd -> master: peer said something interesting |
| 96 | msgtype,connectd_peer_spoke,2005 |
| 97 | msgdata,connectd_peer_spoke,id,node_id, |
| 98 | msgdata,connectd_peer_spoke,counter,u64, |
| 99 | msgdata,connectd_peer_spoke,msgtype,u16, |
| 100 | msgdata,connectd_peer_spoke,channel_id,channel_id, |
| 101 | # If msgtype == WIRE_ERROR, this is the string. |
| 102 | msgdata,connectd_peer_spoke,error,?wirestring, |
| 103 | # master -> connectd: peer no longer reqeuired, don't keep reconnecting. |
| 104 | msgtype,connectd_downgrade_peer,2015 |
| 105 | msgdata,connectd_downgrade_peer,id,node_id, |
| 106 | # master -> connectd: force disconnect of peer. |
| 107 | msgtype,connectd_disconnect_peer,2016 |
| 108 | msgdata,connectd_disconnect_peer,id,node_id, |
| 109 | msgdata,connectd_disconnect_peer,counter,u64, |
| 110 | # master -> connectd: give message to peer. |
| 111 | msgtype,connectd_peer_send_msg,2003 |
| 112 | msgdata,connectd_peer_send_msg,id,node_id, |
| 113 | msgdata,connectd_peer_send_msg,counter,u64, |
| 114 | msgdata,connectd_peer_send_msg,len,u16, |
| 115 | msgdata,connectd_peer_send_msg,msg,u8,len |
| 116 | # master -> connectd: do you have a memleak? |
| 117 | msgtype,connectd_dev_memleak,2033 |
| 118 | msgtype,connectd_dev_memleak_reply,2133 |
| 119 | msgdata,connectd_dev_memleak_reply,leak,bool, |
| 120 | # master -> connectd: dump status of your fds. |
| 121 | msgtype,connectd_dev_report_fds,2034 |
| 122 | # Ping/pong test. Waits for a reply if it expects one. |
| 123 | msgtype,connectd_ping,2030 |
| 124 | msgdata,connectd_ping,reqid,u64, |
| 125 | msgdata,connectd_ping,id,node_id, |
| 126 | msgdata,connectd_ping,num_pong_bytes,u16, |
| 127 | msgdata,connectd_ping,len,u16, |
| 128 | msgtype,connectd_ping_done,2037 |
| 129 | msgdata,connectd_ping_done,reqid,u64, |
| 130 | # False if we there was already a ping in progress. |
| 131 | msgdata,connectd_ping_done,sent,bool, |
| 132 | # 0 == no pong expected, otherwise length of pong. |
| 133 | msgdata,connectd_ping_done,totlen,u16, |
| 134 | # We tell lightningd we got an onionmsg |
| 135 | msgtype,connectd_got_onionmsg_to_us,2145 |
| 136 | msgdata,connectd_got_onionmsg_to_us,path_secret,?secret, |
| 137 | msgdata,connectd_got_onionmsg_to_us,reply,?blinded_path, |
| 138 | msgdata,connectd_got_onionmsg_to_us,rawmsg_len,u16, |
| 139 | msgdata,connectd_got_onionmsg_to_us,rawmsg,u8,rawmsg_len |
| 140 | # Lightningd tells us to send an onion message. |
| 141 | msgtype,connectd_send_onionmsg,2041 |
| 142 | msgdata,connectd_send_onionmsg,id,node_id, |
| 143 | msgdata,connectd_send_onionmsg,onion_len,u16, |
| 144 | msgdata,connectd_send_onionmsg,onion,u8,onion_len |
| 145 | msgdata,connectd_send_onionmsg,path_key,pubkey, |
| 146 | # Lightningd tells us to digest an onion message. |
| 147 | msgtype,connectd_inject_onionmsg,2042 |
| 148 | msgdata,connectd_inject_onionmsg,path_key,pubkey, |
| 149 | msgdata,connectd_inject_onionmsg,onion_len,u16, |
| 150 | msgdata,connectd_inject_onionmsg,onion,u8,onion_len |
| 151 | # Reply. If error isn't empty, something went wrong. |
| 152 | msgtype,connectd_inject_onionmsg_reply,2142 |
| 153 | msgdata,connectd_inject_onionmsg_reply,err,wirestring, |
| 154 | # A custom message that we got from a peer and don't know how to handle, so we |
| 155 | # forward it to the master for further handling. |
| 156 | msgtype,connectd_custommsg_in,2110 |
| 157 | msgdata,connectd_custommsg_in,id,node_id, |
| 158 | msgdata,connectd_custommsg_in,msg_len,u16, |
| 159 | msgdata,connectd_custommsg_in,msg,u8,msg_len |
| 160 | # A custom message that the lightningd tells us to send to the peer. |
| 161 | msgtype,connectd_custommsg_out,2011 |
| 162 | msgdata,connectd_custommsg_out,id,node_id, |
| 163 | msgdata,connectd_custommsg_out,msg_len,u16, |
| 164 | msgdata,connectd_custommsg_out,msg,u8,msg_len |
| 165 | # master -> connectd: we're shutting down, no new connections. |
| 166 | msgtype,connectd_start_shutdown,2031 |
| 167 | # connect - >master: acknowledged. |
| 168 | msgtype,connectd_start_shutdown_reply,2131 |
| 169 | # master -> connect: stop sending gossip. |
| 170 | msgtype,connectd_dev_suppress_gossip,2032 |
| 171 | # master -> connect: waste all your fds. |
| 172 | msgtype,connectd_dev_exhaust_fds,2036 |
| 173 | # master -> connect: set artificial maximum reply_channel_range size. |
| 174 | msgtype,connectd_dev_set_max_scids_encode_size,2035 |
| 175 | msgdata,connectd_dev_set_max_scids_encode_size,max,u32, |
| 176 | # connectd->master I couldn't forward this onionmessage |
| 177 | msgtype,connectd_onionmsg_forward_fail,2012 |
| 178 | msgdata,connectd_onionmsg_forward_fail,source,node_id, |
| 179 | msgdata,connectd_onionmsg_forward_fail,incoming_len,u16, |
| 180 | msgdata,connectd_onionmsg_forward_fail,incoming,u8,incoming_len, |
| 181 | msgdata,connectd_onionmsg_forward_fail,path_key,pubkey, |
| 182 | msgdata,connectd_onionmsg_forward_fail,outgoing_len,u16, |
| 183 | msgdata,connectd_onionmsg_forward_fail,outgoing,u8,outgoing_len, |
| 184 | msgdata,connectd_onionmsg_forward_fail,next_node,?sciddir_or_pubkey, |