1
0
mirror of https://github.com/mfontanini/libtins synced 2026-01-27 12:14:26 +01:00

Documented and fixed some bugs in IPv4Address.

This commit is contained in:
Matias Fontanini
2012-08-27 11:57:14 -03:00
parent da8c77c77e
commit e1a84be0cb
6 changed files with 103 additions and 25 deletions

View File

@@ -27,30 +27,87 @@
#include <stdint.h>
namespace Tins {
/**
* \class IPv4Address
* \brief Abstraction of an IPv4 address.
*/
class IPv4Address {
public:
/**
* \brief Constructor taking a const char*.
*
* Constructs an IPv4Address from a dotted-notation address
* cstring. If the pointer provided is null, then a default
* IPv4Address object is constructed, which corresponds to
* the 0.0.0.0 address.
*
* \param ip const char* containing the dotted-notation address.
*/
IPv4Address(const char *ip = 0);
/**
* \brief Constructor taking a std::string.
*
* Constructs an IPv4Address from a dotted-notation std::strings
*
* \param ip std::string containing the dotted-notation address.
*/
IPv4Address(const std::string &ip);
/**
* \brief Constructor taking a IP address represented as a
* big endian integer.
*
* This constructor should be used internally by PDUs that
* handle IP addresses. The provided integer <b>must</b> be
* be in big endian.
*/
explicit IPv4Address(uint32_t ip);
IPv4Address &operator=(uint32_t ip);
IPv4Address &operator=(const std::string &ip);
/**
* \brief User defined conversion to big endian integral value.
*/
operator uint32_t() const;
/**
* \brief Retrieve the string representation of this address.
*
* \return std::string containing the representation of this address.
*/
std::string to_string() const;
/**
* \brief Compare this IPv4Address for equality.
*
* \param rhs The address to be compared.
* \return bool indicating whether this address equals rhs.
*/
bool operator==(const IPv4Address &rhs) const {
return ip_addr == rhs.ip_addr;
}
bool operator!=(const std::string &rhs) const {
/**
* \brief Compare this IPv4Address for inequality.
*
* \param rhs The address to be compared.
* \return bool indicating whether this address is distinct
* from rhs.
*/
bool operator!=(const IPv4Address &rhs) const {
return !(*this == rhs);
}
friend std::ostream &operator<<(std::ostream &output, const IPv4Address &addr) {
return output << addr.to_string();
}
/**
* \brief Writes this address to a std::ostream.
*
* This method writes addr in a dotted-string notation address
* to the std::ostream argument.
*
* \param output The std::ostream in which to write the address.
* \param addr The IPv4Address to be written.
* \return std::stream& pointing to output.
*/
friend std::ostream &operator<<(std::ostream &output, const IPv4Address &addr);
private:
uint32_t ip_to_int(const std::string &ip);

View File

@@ -374,11 +374,11 @@ void Tins::Utils::route_entries(ForwardIterator output) {
for(unsigned i(0); i < 5; ++i)
input >> mask;
from_hex(destination, dummy);
entry.destination = be_to_host(dummy);
entry.destination = IPv4Address(dummy);
from_hex(mask, dummy);
entry.mask = be_to_host(dummy);
entry.mask = IPv4Address(dummy);
from_hex(gw, dummy);
entry.gateway = be_to_host(dummy);
entry.gateway = IPv4Address(dummy);
skip_line(input);
*output = entry;
++output;