MCPcopy Create free account
hub / github.com/ElementsProject/elements / GetReachabilityFrom

Method GetReachabilityFrom

src/netaddress.cpp:850–916  ·  view source on GitHub ↗

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

Source from the content-addressed store, hash-verified

848
849/** Calculates a metric for how reachable (*this) is from a given partner */
850int CNetAddr::GetReachabilityFrom(const CNetAddr *paddrPartner) const
851{
852 enum Reachability {
853 REACH_UNREACHABLE,
854 REACH_DEFAULT,
855 REACH_TEREDO,
856 REACH_IPV6_WEAK,
857 REACH_IPV4,
858 REACH_IPV6_STRONG,
859 REACH_PRIVATE
860 };
861
862 if (!IsRoutable() || IsInternal())
863 return REACH_UNREACHABLE;
864
865 int ourNet = GetExtNetwork(this);
866 int theirNet = GetExtNetwork(paddrPartner);
867 bool fTunnel = IsRFC3964() || IsRFC6052() || IsRFC6145();
868
869 switch(theirNet) {
870 case NET_IPV4:
871 switch(ourNet) {
872 default: return REACH_DEFAULT;
873 case NET_IPV4: return REACH_IPV4;
874 }
875 case NET_IPV6:
876 switch(ourNet) {
877 default: return REACH_DEFAULT;
878 case NET_TEREDO: return REACH_TEREDO;
879 case NET_IPV4: return REACH_IPV4;
880 case NET_IPV6: return fTunnel ? REACH_IPV6_WEAK : REACH_IPV6_STRONG; // only prefer giving our IPv6 address if it's not tunnelled
881 }
882 case NET_ONION:
883 switch(ourNet) {
884 default: return REACH_DEFAULT;
885 case NET_IPV4: return REACH_IPV4; // Tor users can connect to IPv4 as well
886 case NET_ONION: return REACH_PRIVATE;
887 }
888 case NET_I2P:
889 switch (ourNet) {
890 case NET_I2P: return REACH_PRIVATE;
891 default: return REACH_DEFAULT;
892 }
893 case NET_CJDNS:
894 switch (ourNet) {
895 case NET_CJDNS: return REACH_PRIVATE;
896 default: return REACH_DEFAULT;
897 }
898 case NET_TEREDO:
899 switch(ourNet) {
900 default: return REACH_DEFAULT;
901 case NET_TEREDO: return REACH_TEREDO;
902 case NET_IPV6: return REACH_IPV6_WEAK;
903 case NET_IPV4: return REACH_IPV4;
904 }
905 case NET_UNKNOWN:
906 case NET_UNROUTABLE:
907 default:

Callers 2

GetLocalFunction · 0.80
FUZZ_TARGETFunction · 0.80

Calls 1

GetExtNetworkFunction · 0.85

Tested by 1

FUZZ_TARGETFunction · 0.64