Consider `remote_addr` from peer: if it could change things, reconsider * what our discoverd IP is. Returns new address, or NULL. */
| 1772 | /* Consider `remote_addr` from peer: if it could change things, reconsider |
| 1773 | * what our discoverd IP is. Returns new address, or NULL. */ |
| 1774 | static const struct wireaddr *update_remote_addr(struct lightningd *ld, |
| 1775 | const struct wireaddr *remote_addr) |
| 1776 | { |
| 1777 | /* failsafe to prevent privacy leakage. */ |
| 1778 | if (ld->always_use_proxy || |
| 1779 | ld->config.ip_discovery == OPT_AUTOBOOL_FALSE) |
| 1780 | return NULL; |
| 1781 | |
| 1782 | switch (remote_addr->type) { |
| 1783 | case ADDR_TYPE_IPV4: |
| 1784 | /* If it's telling us what we already know, don't reevaluate */ |
| 1785 | if (!ld->discovered_ip_v4 |
| 1786 | || !wireaddr_eq(ld->discovered_ip_v4, remote_addr)) { |
| 1787 | ld->discovered_ip_v4 = tal_free(ld->discovered_ip_v4); |
| 1788 | ld->discovered_ip_v4 = best_remote_addr(ld, ld, ADDR_TYPE_IPV4); |
| 1789 | return ld->discovered_ip_v4; |
| 1790 | } |
| 1791 | return NULL; |
| 1792 | case ADDR_TYPE_IPV6: |
| 1793 | /* If it's telling us what we already know, don't reevaluate */ |
| 1794 | if (!ld->discovered_ip_v6 |
| 1795 | || !wireaddr_eq(ld->discovered_ip_v6, remote_addr)) { |
| 1796 | ld->discovered_ip_v6 = tal_free(ld->discovered_ip_v6); |
| 1797 | ld->discovered_ip_v6 = best_remote_addr(ld, ld, ADDR_TYPE_IPV6); |
| 1798 | return ld->discovered_ip_v6; |
| 1799 | } |
| 1800 | return NULL; |
| 1801 | /* ignore all other cases */ |
| 1802 | case ADDR_TYPE_TOR_V2_REMOVED: |
| 1803 | case ADDR_TYPE_TOR_V3: |
| 1804 | case ADDR_TYPE_DNS: |
| 1805 | return NULL; |
| 1806 | } |
| 1807 | abort(); |
| 1808 | } |
| 1809 | |
| 1810 | REGISTER_PLUGIN_HOOK(peer_connected, |
| 1811 | peer_connected_hook_deserialize, |
no test coverage detected