@ -29,7 +29,6 @@ enum Network ParseNetwork(std::string net) {
if ( net = = " ipv4 " ) return NET_IPV4 ;
if ( net = = " ipv4 " ) return NET_IPV4 ;
if ( net = = " ipv6 " ) return NET_IPV6 ;
if ( net = = " ipv6 " ) return NET_IPV6 ;
if ( net = = " tor " ) return NET_TOR ;
if ( net = = " tor " ) return NET_TOR ;
if ( net = = " i2p " ) return NET_I2P ;
return NET_UNROUTABLE ;
return NET_UNROUTABLE ;
}
}
@ -540,7 +539,6 @@ void CNetAddr::SetIP(const CNetAddr& ipIn)
}
}
static const unsigned char pchOnionCat [ ] = { 0xFD , 0x87 , 0xD8 , 0x7E , 0xEB , 0x43 } ;
static const unsigned char pchOnionCat [ ] = { 0xFD , 0x87 , 0xD8 , 0x7E , 0xEB , 0x43 } ;
static const unsigned char pchGarliCat [ ] = { 0xFD , 0x60 , 0xDB , 0x4D , 0xDD , 0xB5 } ;
bool CNetAddr : : SetSpecial ( const std : : string & strName )
bool CNetAddr : : SetSpecial ( const std : : string & strName )
{
{
@ -553,15 +551,6 @@ bool CNetAddr::SetSpecial(const std::string &strName)
ip [ i + sizeof ( pchOnionCat ) ] = vchAddr [ i ] ;
ip [ i + sizeof ( pchOnionCat ) ] = vchAddr [ i ] ;
return true ;
return true ;
}
}
if ( strName . size ( ) > 11 & & strName . substr ( strName . size ( ) - 11 , 11 ) = = " .oc.b32.i2p " ) {
std : : vector < unsigned char > vchAddr = DecodeBase32 ( strName . substr ( 0 , strName . size ( ) - 11 ) . c_str ( ) ) ;
if ( vchAddr . size ( ) ! = 16 - sizeof ( pchGarliCat ) )
return false ;
memcpy ( ip , pchOnionCat , sizeof ( pchGarliCat ) ) ;
for ( unsigned int i = 0 ; i < 16 - sizeof ( pchGarliCat ) ; i + + )
ip [ i + sizeof ( pchGarliCat ) ] = vchAddr [ i ] ;
return true ;
}
return false ;
return false ;
}
}
@ -611,7 +600,7 @@ bool CNetAddr::IsIPv4() const
bool CNetAddr : : IsIPv6 ( ) const
bool CNetAddr : : IsIPv6 ( ) const
{
{
return ( ! IsIPv4 ( ) & & ! IsTor ( ) & & ! IsI2P ( ) ) ;
return ( ! IsIPv4 ( ) & & ! IsTor ( ) ) ;
}
}
bool CNetAddr : : IsRFC1918 ( ) const
bool CNetAddr : : IsRFC1918 ( ) const
@ -675,11 +664,6 @@ bool CNetAddr::IsTor() const
return ( memcmp ( ip , pchOnionCat , sizeof ( pchOnionCat ) ) = = 0 ) ;
return ( memcmp ( ip , pchOnionCat , sizeof ( pchOnionCat ) ) = = 0 ) ;
}
}
bool CNetAddr : : IsI2P ( ) const
{
return ( memcmp ( ip , pchGarliCat , sizeof ( pchGarliCat ) ) = = 0 ) ;
}
bool CNetAddr : : IsLocal ( ) const
bool CNetAddr : : IsLocal ( ) const
{
{
// IPv4 loopback
// IPv4 loopback
@ -738,7 +722,7 @@ bool CNetAddr::IsValid() const
bool CNetAddr : : IsRoutable ( ) const
bool CNetAddr : : IsRoutable ( ) const
{
{
return IsValid ( ) & & ! ( IsRFC1918 ( ) | | IsRFC3927 ( ) | | IsRFC4862 ( ) | | ( IsRFC4193 ( ) & & ! IsTor ( ) & & ! IsI2P ( ) ) | | IsRFC4843 ( ) | | IsLocal ( ) ) ;
return IsValid ( ) & & ! ( IsRFC1918 ( ) | | IsRFC3927 ( ) | | IsRFC4862 ( ) | | ( IsRFC4193 ( ) & & ! IsTor ( ) ) | | IsRFC4843 ( ) | | IsLocal ( ) ) ;
}
}
enum Network CNetAddr : : GetNetwork ( ) const
enum Network CNetAddr : : GetNetwork ( ) const
@ -752,9 +736,6 @@ enum Network CNetAddr::GetNetwork() const
if ( IsTor ( ) )
if ( IsTor ( ) )
return NET_TOR ;
return NET_TOR ;
if ( IsI2P ( ) )
return NET_I2P ;
return NET_IPV6 ;
return NET_IPV6 ;
}
}
@ -762,8 +743,6 @@ std::string CNetAddr::ToStringIP() const
{
{
if ( IsTor ( ) )
if ( IsTor ( ) )
return EncodeBase32 ( & ip [ 6 ] , 10 ) + " .onion " ;
return EncodeBase32 ( & ip [ 6 ] , 10 ) + " .onion " ;
if ( IsI2P ( ) )
return EncodeBase32 ( & ip [ 6 ] , 10 ) + " .oc.b32.i2p " ;
CService serv ( * this , 0 ) ;
CService serv ( * this , 0 ) ;
# ifdef USE_IPV6
# ifdef USE_IPV6
struct sockaddr_storage sockaddr ;
struct sockaddr_storage sockaddr ;
@ -871,12 +850,6 @@ std::vector<unsigned char> CNetAddr::GetGroup() const
nStartByte = 6 ;
nStartByte = 6 ;
nBits = 4 ;
nBits = 4 ;
}
}
else if ( IsI2P ( ) )
{
nClass = NET_I2P ;
nStartByte = 6 ;
nBits = 4 ;
}
// for he.net, use /36 groups
// for he.net, use /36 groups
else if ( GetByte ( 15 ) = = 0x20 & & GetByte ( 14 ) = = 0x11 & & GetByte ( 13 ) = = 0x04 & & GetByte ( 12 ) = = 0x70 )
else if ( GetByte ( 15 ) = = 0x20 & & GetByte ( 14 ) = = 0x11 & & GetByte ( 13 ) = = 0x04 & & GetByte ( 12 ) = = 0x70 )
nBits = 36 ;
nBits = 36 ;
@ -962,11 +935,6 @@ int CNetAddr::GetReachabilityFrom(const CNetAddr *paddrPartner) const
case NET_IPV4 : return REACH_IPV4 ; // Tor users can connect to IPv4 as well
case NET_IPV4 : return REACH_IPV4 ; // Tor users can connect to IPv4 as well
case NET_TOR : return REACH_PRIVATE ;
case NET_TOR : return REACH_PRIVATE ;
}
}
case NET_I2P :
switch ( ourNet ) {
default : return REACH_DEFAULT ;
case NET_I2P : return REACH_PRIVATE ;
}
case NET_TEREDO :
case NET_TEREDO :
switch ( ourNet ) {
switch ( ourNet ) {
default : return REACH_DEFAULT ;
default : return REACH_DEFAULT ;
@ -982,8 +950,7 @@ int CNetAddr::GetReachabilityFrom(const CNetAddr *paddrPartner) const
case NET_TEREDO : return REACH_TEREDO ;
case NET_TEREDO : return REACH_TEREDO ;
case NET_IPV6 : return REACH_IPV6_WEAK ;
case NET_IPV6 : return REACH_IPV6_WEAK ;
case NET_IPV4 : return REACH_IPV4 ;
case NET_IPV4 : return REACH_IPV4 ;
case NET_I2P : return REACH_PRIVATE ; // assume connections from unroutable addresses are
case NET_TOR : return REACH_PRIVATE ; // either from Tor, or don't care about our address
case NET_TOR : return REACH_PRIVATE ; // either from Tor/I2P, or don't care about our address
}
}
}
}
}
}
@ -1140,7 +1107,7 @@ std::string CService::ToStringPort() const
std : : string CService : : ToStringIPPort ( ) const
std : : string CService : : ToStringIPPort ( ) const
{
{
if ( IsIPv4 ( ) | | IsTor ( ) | | IsI2P ( ) ) {
if ( IsIPv4 ( ) | | IsTor ( ) ) {
return ToStringIP ( ) + " : " + ToStringPort ( ) ;
return ToStringIP ( ) + " : " + ToStringPort ( ) ;
} else {
} else {
return " [ " + ToStringIP ( ) + " ]: " + ToStringPort ( ) ;
return " [ " + ToStringIP ( ) + " ]: " + ToStringPort ( ) ;