diff options
Diffstat (limited to 'src/networkAddress.cpp')
-rw-r--r-- | src/networkAddress.cpp | 162 |
1 files changed, 80 insertions, 82 deletions
diff --git a/src/networkAddress.cpp b/src/networkAddress.cpp index 7701159..f3b7544 100644 --- a/src/networkAddress.cpp +++ b/src/networkAddress.cpp @@ -11,7 +11,7 @@ * tunneling and relaying of packets of any protocol. * * - * Copyright (C) 2007-2009 Othmar Gsenger, Erwin Nindl, + * Copyright (C) 2007-2009 Othmar Gsenger, Erwin Nindl, * Christian Pointner <satp@wirdorange.org> * * This file is part of Anytun. @@ -39,42 +39,41 @@ NetworkAddress::NetworkAddress():ipv4_address_(),ipv6_address_() { - network_address_type_=ipv4; + network_address_type_=ipv4; } -NetworkAddress::NetworkAddress(const NetworkAddress & ref) : mutex_(),ipv4_address_(ref.ipv4_address_),ipv6_address_(ref.ipv6_address_),ethernet_address_(ref.ethernet_address_),network_address_type_(ref.network_address_type_) +NetworkAddress::NetworkAddress(const NetworkAddress& ref) : mutex_(),ipv4_address_(ref.ipv4_address_),ipv6_address_(ref.ipv6_address_),ethernet_address_(ref.ethernet_address_),network_address_type_(ref.network_address_type_) { } -NetworkAddress::NetworkAddress(const std::string & address) +NetworkAddress::NetworkAddress(const std::string& address) { - boost::asio::ip::address addr = boost::asio::ip::address::from_string(address); - if (addr.is_v4()) - { - network_address_type_=ipv4; - ipv4_address_ = addr.to_v4(); - } else { - network_address_type_=ipv6; - ipv6_address_ = addr.to_v6(); - } + boost::asio::ip::address addr = boost::asio::ip::address::from_string(address); + if(addr.is_v4()) { + network_address_type_=ipv4; + ipv4_address_ = addr.to_v4(); + } else { + network_address_type_=ipv6; + ipv6_address_ = addr.to_v6(); + } } NetworkAddress::NetworkAddress(boost::asio::ip::address_v6 ipv6_address) { - network_address_type_=ipv6; - ipv6_address_ = ipv6_address; + network_address_type_=ipv6; + ipv6_address_ = ipv6_address; } NetworkAddress::NetworkAddress(boost::asio::ip::address_v4 ipv4_address) { - network_address_type_=ipv4; - ipv4_address_ = ipv4_address; + network_address_type_=ipv4; + ipv4_address_ = ipv4_address; } NetworkAddress::NetworkAddress(u_int64_t ethernet_address) { - network_address_type_=ethernet; - ethernet_address_=ethernet_address; + network_address_type_=ethernet; + ethernet_address_=ethernet_address; } @@ -82,123 +81,122 @@ NetworkAddress::~NetworkAddress() { } -NetworkAddress::NetworkAddress(const network_address_type_t type, const std::string & address ) +NetworkAddress::NetworkAddress(const network_address_type_t type, const std::string& address) { - setNetworkAddress( type, address); + setNetworkAddress(type, address); } -void NetworkAddress::setNetworkAddress(const network_address_type_t type, const std::string & address ) +void NetworkAddress::setNetworkAddress(const network_address_type_t type, const std::string& address) { - if (type==ipv4) - { - ipv4_address_=boost::asio::ip::address_v4::from_string(address); - } else if (type==ipv6) { - ipv6_address_=boost::asio::ip::address_v6::from_string(address); - } else if (type==ethernet) { - //TODO - } else { - //TODO - } - network_address_type_ = type; + if(type==ipv4) { + ipv4_address_=boost::asio::ip::address_v4::from_string(address); + } else if(type==ipv6) { + ipv6_address_=boost::asio::ip::address_v6::from_string(address); + } else if(type==ethernet) { + //TODO + } else { + //TODO + } + network_address_type_ = type; } void NetworkAddress::setNetworkAddress(boost::asio::ip::address_v4 addr) { - network_address_type_=ipv4; - ipv4_address_ = addr; + network_address_type_=ipv4; + ipv4_address_ = addr; } void NetworkAddress::setNetworkAddress(boost::asio::ip::address_v6 addr) { - network_address_type_=ipv6; - ipv6_address_ = addr; + network_address_type_=ipv6; + ipv6_address_ = addr; } void NetworkAddress::setNetworkAddress(u_int64_t addr) { - network_address_type_=ethernet; - ethernet_address_=addr; + network_address_type_=ethernet; + ethernet_address_=addr; } network_address_type_t NetworkAddress::getNetworkAddressType() const { - return network_address_type_; + return network_address_type_; } const boost::asio::ip::address_v4& NetworkAddress::getNetworkAddressV4() const { - if(network_address_type_ != ipv4) + if(network_address_type_ != ipv4) { AnytunError::throwErr() << "wrong address type"; - + } + return ipv4_address_; } const boost::asio::ip::address_v6& NetworkAddress::getNetworkAddressV6() const { - if(network_address_type_ != ipv6) + if(network_address_type_ != ipv6) { AnytunError::throwErr() << "wrong address type"; - + } + return ipv6_address_; } const u_int64_t NetworkAddress::getNetworkAdrressEther() const { - if(network_address_type_ != ethernet) + if(network_address_type_ != ethernet) { AnytunError::throwErr() << "wrong address type"; - + } + return ethernet_address_; } std::string NetworkAddress::toString() const { - if (network_address_type_==ipv4){ - return ipv4_address_.to_string(); - } - else if (network_address_type_==ipv6) { - return ipv6_address_.to_string(); - } - else if (network_address_type_==ethernet) { - // TODO - } + if(network_address_type_==ipv4) { + return ipv4_address_.to_string(); + } else if(network_address_type_==ipv6) { + return ipv6_address_.to_string(); + } else if(network_address_type_==ethernet) { + // TODO + } return std::string(""); } ipv4_bytes_type NetworkAddress::to_bytes_v4() const { - return ipv4_address_.to_bytes(); + return ipv4_address_.to_bytes(); } ipv6_bytes_type NetworkAddress::to_bytes_v6() const { - return ipv6_address_.to_bytes(); + return ipv6_address_.to_bytes(); } ethernet_bytes_type NetworkAddress::to_bytes_ethernet() const { - boost::array<unsigned char,6> result; - u_int64_t ether=ethernet_address_; - for (int i = 0; i < 6; i++) - { - result[i] = (unsigned char) (ether && 0xff); - ether >>= 8; - } - return result; -} - -bool NetworkAddress::operator<(const NetworkAddress &right) const -{ - if (network_address_type_!=right.network_address_type_) - AnytunError::throwErr() << "NetworkAddress::operator<() address types don't match"; - if (network_address_type_==ipv4) - { - return (ipv4_address_ < right.ipv4_address_); - } else if (network_address_type_==ipv6) { - return (ipv6_address_ < right.ipv6_address_); - } else if (network_address_type_==ethernet) { - return (ethernet_address_ < right.ethernet_address_); - } else { - //TODO - } - return false; + boost::array<unsigned char,6> result; + u_int64_t ether=ethernet_address_; + for(int i = 0; i < 6; i++) { + result[i] = (unsigned char)(ether && 0xff); + ether >>= 8; + } + return result; +} + +bool NetworkAddress::operator<(const NetworkAddress& right) const +{ + if(network_address_type_!=right.network_address_type_) { + AnytunError::throwErr() << "NetworkAddress::operator<() address types don't match"; + } + if(network_address_type_==ipv4) { + return (ipv4_address_ < right.ipv4_address_); + } else if(network_address_type_==ipv6) { + return (ipv6_address_ < right.ipv6_address_); + } else if(network_address_type_==ethernet) { + return (ethernet_address_ < right.ethernet_address_); + } else { + //TODO + } + return false; } |