MCPcopy Create free account
hub / github.com/bitcoin/bitcoin / GetReachabilityFrom

Method GetReachabilityFrom

src/netaddress.cpp:713–778  ·  view source on GitHub ↗

Calculates a metric for how reachable (*this) is from a given partner */

Source from the content-addressed store, hash-verified

711
712/** Calculates a metric for how reachable (*this) is from a given partner */
713int CNetAddr::GetReachabilityFrom(const CNetAddr& paddrPartner) const
714{
715 enum Reachability {
716 REACH_UNREACHABLE,
717 REACH_DEFAULT,
718 REACH_TEREDO,
719 REACH_IPV6_WEAK,
720 REACH_IPV4,
721 REACH_IPV6_STRONG,
722 REACH_PRIVATE
723 };
724
725 if (!IsRoutable() || IsInternal())
726 return REACH_UNREACHABLE;
727
728 int ourNet = GetExtNetwork(*this);
729 int theirNet = GetExtNetwork(paddrPartner);
730 bool fTunnel = IsRFC3964() || IsRFC6052() || IsRFC6145();
731
732 switch(theirNet) {
733 case NET_IPV4:
734 switch(ourNet) {
735 default: return REACH_DEFAULT;
736 case NET_IPV4: return REACH_IPV4;
737 }
738 case NET_IPV6:
739 switch(ourNet) {
740 default: return REACH_DEFAULT;
741 case NET_TEREDO: return REACH_TEREDO;
742 case NET_IPV4: return REACH_IPV4;
743 case NET_IPV6: return fTunnel ? REACH_IPV6_WEAK : REACH_IPV6_STRONG; // only prefer giving our IPv6 address if it's not tunnelled
744 }
745 case NET_ONION:
746 switch(ourNet) {
747 default: return REACH_DEFAULT;
748 case NET_IPV4: return REACH_IPV4; // Tor users can connect to IPv4 as well
749 case NET_ONION: return REACH_PRIVATE;
750 }
751 case NET_I2P:
752 switch (ourNet) {
753 case NET_I2P: return REACH_PRIVATE;
754 default: return REACH_DEFAULT;
755 }
756 case NET_CJDNS:
757 switch (ourNet) {
758 case NET_CJDNS: return REACH_PRIVATE;
759 default: return REACH_DEFAULT;
760 }
761 case NET_TEREDO:
762 switch(ourNet) {
763 default: return REACH_DEFAULT;
764 case NET_TEREDO: return REACH_TEREDO;
765 case NET_IPV6: return REACH_IPV6_WEAK;
766 case NET_IPV4: return REACH_IPV4;
767 }
768 case NET_UNROUTABLE:
769 default:
770 switch(ourNet) {

Callers 2

GetLocalFunction · 0.80
FUZZ_TARGETFunction · 0.80

Calls 1

GetExtNetworkFunction · 0.85

Tested by 1

FUZZ_TARGETFunction · 0.64