MCPcopy Create free account
hub / github.com/ElementsProject/lightning / handle_peer_connected

Function handle_peer_connected

lightningd/peer_control.c:1818–1944  ·  view source on GitHub ↗

Connectd tells us a peer has connected/reconnected: it never hands us duplicates, since * it holds them until we say peer_disconnected. */

Source from the content-addressed store, hash-verified

1816/* Connectd tells us a peer has connected/reconnected: it never hands us duplicates, since
1817 * it holds them until we say peer_disconnected. */
1818void handle_peer_connected(struct lightningd *ld, const u8 *msg)
1819{
1820 struct node_id id;
1821 struct peer *peer;
1822 struct peer_connected_hook_payload *hook_payload;
1823 u64 connectd_counter;
1824 const char *cmd_id;
1825 char *connect_reason;
1826 u64 connect_nsec;
1827 struct wireaddr *last_known_addr;
1828
1829 hook_payload = tal(NULL, struct peer_connected_hook_payload);
1830 hook_payload->ld = ld;
1831 hook_payload->error = NULL;
1832 if (!fromwire_connectd_peer_connected(hook_payload, msg,
1833 &id, &connectd_counter,
1834 &hook_payload->addr,
1835 &hook_payload->remote_addr,
1836 &hook_payload->incoming,
1837 &hook_payload->their_features,
1838 &connect_reason,
1839 &connect_nsec)) {
1840 u64 prev_connectd_counter, connected_time_nsec;
1841 if (!fromwire_connectd_peer_reconnected(hook_payload, msg,
1842 &id, &prev_connectd_counter,
1843 &connectd_counter,
1844 &hook_payload->addr,
1845 &hook_payload->remote_addr,
1846 &hook_payload->incoming,
1847 &hook_payload->their_features,
1848 &connected_time_nsec)) {
1849 fatal("Connectd gave bad CONNECT_PEER_(RE)CONNECTED message %s",
1850 tal_hex(msg, msg));
1851 }
1852 /* Reconnect? Mark the disconnect *first*, but don't
1853 * fail any connect attempts: this is a race. */
1854 log_peer_debug(ld->log, &id, "peer reconnected");
1855 peer_disconnected(ld, &id, prev_connectd_counter, connected_time_nsec, false);
1856 connect_reason = tal_strdup(hook_payload, "");
1857 connect_nsec = 0;
1858 }
1859
1860 wallet_save_network_event(ld, &id,
1861 NETWORK_EVENT_CONNECT,
1862 hook_payload->incoming ? NULL : connect_reason,
1863 connect_nsec,
1864 false);
1865
1866 /* If we connected, and it's a normal address */
1867 if (!hook_payload->incoming
1868 && hook_payload->addr.itype == ADDR_INTERNAL_WIREADDR
1869 && !hook_payload->addr.u.wireaddr.is_websocket) {
1870 last_known_addr = &hook_payload->addr.u.wireaddr.wireaddr;
1871 } else {
1872 last_known_addr = NULL;
1873 }
1874
1875 /* If we're already dealing with this peer, hand off to correct

Callers 1

connectd_msgFunction · 0.85

Calls 14

tal_hexFunction · 0.85
peer_disconnectedFunction · 0.85
peer_by_idFunction · 0.85
peer_channels_cleanupFunction · 0.85
tal_freeFunction · 0.85
fmt_wireaddrFunction · 0.85
update_remote_addrFunction · 0.85
fatalFunction · 0.70
new_peerFunction · 0.70
connect_any_cmd_idFunction · 0.70

Tested by

no test coverage detected