adding methods to detect multicast and public ip ranges
This commit is contained in:
parent
1201d1c1f6
commit
4736e8e666
2 changed files with 61 additions and 0 deletions
|
|
@ -17,6 +17,24 @@ namespace fc {
|
||||||
|
|
||||||
friend bool operator==( const address& a, const address& b );
|
friend bool operator==( const address& a, const address& b );
|
||||||
friend bool operator!=( const address& a, const address& b );
|
friend bool operator!=( const address& a, const address& b );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if the ip is in the following ranges:
|
||||||
|
*
|
||||||
|
* 10.0.0.0 to 10.255.255.255
|
||||||
|
* 172.16.0.0 to 172.31.255.255
|
||||||
|
* 192.168.0.0 to 192.168.255.255
|
||||||
|
* 169.254.0.0 to 169.254.255.255
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
bool is_private_address()const;
|
||||||
|
/**
|
||||||
|
* 224.0.0.0 to 239.255.255.255
|
||||||
|
*/
|
||||||
|
bool is_multicast_address()const;
|
||||||
|
|
||||||
|
/** !private & !multicast */
|
||||||
|
bool is_public_address()const;
|
||||||
private:
|
private:
|
||||||
uint32_t _ip;
|
uint32_t _ip;
|
||||||
};
|
};
|
||||||
|
|
@ -50,6 +68,7 @@ namespace fc {
|
||||||
uint32_t _port;
|
uint32_t _port;
|
||||||
address _ip;
|
address _ip;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
class variant;
|
class variant;
|
||||||
void to_variant( const ip::endpoint& var, variant& vo );
|
void to_variant( const ip::endpoint& var, variant& vo );
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,48 @@ namespace fc { namespace ip {
|
||||||
return string(_ip) + ':' + fc::string(boost::lexical_cast<std::string>(_port).c_str());
|
return string(_ip) + ':' + fc::string(boost::lexical_cast<std::string>(_port).c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if the ip is in the following ranges:
|
||||||
|
*
|
||||||
|
* 10.0.0.0 to 10.255.255.255
|
||||||
|
* 172.16.0.0 to 172.31.255.255
|
||||||
|
* 192.168.0.0 to 192.168.255.255
|
||||||
|
* 169.254.0.0 to 169.254.255.255
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
bool address::is_private_address()const
|
||||||
|
{
|
||||||
|
static address min10_ip("10.0.0.0");
|
||||||
|
static address max10_ip("10.255.255.255");
|
||||||
|
static address min172_ip("172.16.0.0");
|
||||||
|
static address max172_ip("172.31.255.255");
|
||||||
|
static address min192_ip("192.168.0.0");
|
||||||
|
static address max192_ip("192.168.255.255");
|
||||||
|
static address min169_ip("169.254.0.0");
|
||||||
|
static address max169_ip("169.254.255.255");
|
||||||
|
if( _ip >= min10_ip._ip && _ip <= max10_ip._ip ) return true;
|
||||||
|
if( _ip >= min172_ip._ip && _ip <= max172_ip._ip ) return true;
|
||||||
|
if( _ip >= min192_ip._ip && _ip <= max192_ip._ip ) return true;
|
||||||
|
if( _ip >= min169_ip._ip && _ip <= max169_ip._ip ) return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 224.0.0.0 to 239.255.255.255
|
||||||
|
*/
|
||||||
|
bool address::is_multicast_address()const
|
||||||
|
{
|
||||||
|
static address min_ip("224.0.0.0");
|
||||||
|
static address max_ip("239.255.255.255");
|
||||||
|
return _ip >= min_ip._ip && _ip <= max_ip._ip;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** !private & !multicast */
|
||||||
|
bool address::is_public_address()const
|
||||||
|
{
|
||||||
|
return !( is_private_address() || is_multicast_address() );
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ip
|
} // namespace ip
|
||||||
|
|
||||||
void to_variant( const ip::endpoint& var, variant& vo )
|
void to_variant( const ip::endpoint& var, variant& vo )
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue