el de un std::string.
iss >> net >> gw >> mtu >> metric;
if (net == "0") net = "0.0.0.0";
if (gw == "0") gw = "0.0.0.0";
- rt.add(net.c_str(), gw.c_str(), metric, mtu, dev);
+ rt.add(net, gw, metric, mtu, dev);
}
}
}
/// Constructor
-IPAddr::IPAddr(int ip)
+IPAddr::IPAddr(uint32_t ip)
{
atoms[0] = ip >> 24;
atoms[1] = ip >> 16;
atoms[3] = ip;
}
+#if 0
/// Constructor
IPAddr::IPAddr(const char* ip) throw (std::logic_error)
{
atoms[i] = std::atoi(ips.c_str());
}
}
+#endif
/// Constructor
-//IPAddr::IPAddr(const std::string& ip) throw (std::logic_error)
-//{
-// IPAddr(ip.c_str());
-//}
+IPAddr::IPAddr(const std::string& ip) throw (std::logic_error)
+{
+ std::istringstream iss(ip);
+ std::string ips;
+ for (int i = 0; i < 4; ++i)
+ {
+ if (!std::getline(iss, ips, '.'))
+ throw std::logic_error("Dirección IP inválida");
+ atoms[i] = std::atoi(ips.c_str());
+ }
+}
/// Operador de casteo a unsigned
-IPAddr::operator unsigned () const
+IPAddr::operator uint32_t () const
{
return (atoms[0] << 24) + (atoms[1] << 16) + (atoms[2] << 8) + atoms[3];
}
#include <string>
#include <cstdlib>
#include <stdexcept>
+#include <stdint.h>
/// Dirección IP
struct IPAddr
{
/// Átomo de dirección IP
- typedef unsigned char atom;
+ typedef uint8_t atom;
/// Representación interna
atom atoms[4];
IPAddr(atom a1, atom a2, atom a3, atom a4);
/// Constructor
- IPAddr(int ip);
+ IPAddr(uint32_t ip);
/// Constructor
- IPAddr(const char* ip) throw (std::logic_error);
+ //IPAddr(const char* ip) throw (std::logic_error);
/// Constructor
- //IPAddr(const std::string& ip) throw (std::logic_error);
+ IPAddr(const std::string& ip) throw (std::logic_error);
/// Operador de casteo a unsigned
- operator unsigned () const;
+ operator uint32_t () const;
/// Operador de casteo a std::string
operator std::string () const;
iss >> net >> gw >> metric;
if (net == "0") net = "0.0.0.0";
if (gw == "0") gw = "0.0.0.0";
- rt.add(net.c_str(), gw.c_str(), mtu, metric, dev);
+ rt.add(net, gw, mtu, metric, dev);
}
}