@@ -1709,6 +1709,7 @@ static void try_connect_peer(struct daemon *daemon,
17091709 const struct node_id * id ,
17101710 struct wireaddr * gossip_addrs ,
17111711 struct wireaddr_internal * addrhint STEALS ,
1712+ struct wireaddr_internal * peer_alt_addr STEALS ,
17121713 bool dns_fallback ,
17131714 bool transient )
17141715{
@@ -1736,6 +1737,11 @@ static void try_connect_peer(struct daemon *daemon,
17361737 tal_arr_expand (& connect -> addrs , * addrhint );
17371738 }
17381739
1740+ /* Update addrs with peer_alt_addrs if provided */
1741+ for (size_t i = 0 ; i < tal_count (peer_alt_addr ); i ++ )
1742+ if (peer_alt_addr [i ].u .wireaddr .wireaddr .addrlen > 0 )
1743+ tal_arr_expand (& connect -> addrs , peer_alt_addr [i ]);
1744+
17391745 return ;
17401746 }
17411747
@@ -1749,10 +1755,15 @@ static void try_connect_peer(struct daemon *daemon,
17491755
17501756 /* Tell it to omit the existing hint (if that's a wireaddr itself) */
17511757 add_gossip_addrs (& addrs , gossip_addrs ,
1752- addrhint
1753- && addrhint -> itype == ADDR_INTERNAL_WIREADDR
1754- && !addrhint -> u .wireaddr .is_websocket
1755- ? & addrhint -> u .wireaddr .wireaddr : NULL );
1758+ addrhint
1759+ && addrhint -> itype == ADDR_INTERNAL_WIREADDR
1760+ && !addrhint -> u .wireaddr .is_websocket
1761+ ? & addrhint -> u .wireaddr .wireaddr : NULL );
1762+
1763+ /* Add all peer_alt_addrs next so they're tried after addrhint by connectd */
1764+ for (size_t i = 0 ; i < tal_count (peer_alt_addr ); i ++ )
1765+ if (peer_alt_addr [i ].u .wireaddr .wireaddr .addrlen > 0 )
1766+ tal_arr_expand (& addrs , peer_alt_addr [i ]);
17561767
17571768 if (tal_count (addrs ) == 0 ) {
17581769 /* Don't resolve via DNS seed if we're supposed to use proxy. */
@@ -1809,17 +1820,19 @@ static void connect_to_peer(struct daemon *daemon, const u8 *msg)
18091820{
18101821 struct node_id id ;
18111822 struct wireaddr_internal * addrhint ;
1823+ struct wireaddr_internal * peer_alt_addr ;
18121824 struct wireaddr * addrs ;
18131825 bool dns_fallback ;
18141826 bool transient ;
18151827
18161828 if (!fromwire_connectd_connect_to_peer (tmpctx , msg ,
18171829 & id , & addrs , & addrhint ,
1818- & dns_fallback ,
1830+ & peer_alt_addr , & dns_fallback ,
18191831 & transient ))
18201832 master_badmsg (WIRE_CONNECTD_CONNECT_TO_PEER , msg );
18211833
1822- try_connect_peer (daemon , & id , addrs , addrhint , dns_fallback , transient );
1834+ try_connect_peer (daemon , & id , addrs , addrhint ,
1835+ peer_alt_addr , dns_fallback , transient );
18231836}
18241837
18251838/* lightningd tells us a peer should be disconnected. */
0 commit comments