]> git.llucax.com Git - z.facultad/75.74/practicos.git/commitdiff
Se ponen mejor los tipos de ipaddr y se reemplaza el constructor desde char* por
authorLeandro Lucarella <llucax@gmail.com>
Wed, 21 Jun 2006 16:17:54 +0000 (16:17 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Wed, 21 Jun 2006 16:17:54 +0000 (16:17 +0000)
el de un std::string.

practicas/pipi/src/ip.cpp
practicas/pipi/src/ipaddr.cpp
practicas/pipi/src/ipaddr.h
practicas/pipi/src/test_ipout.cpp

index f3fed6ec2d2da8fe8ee6df760b0157520b5a75f4..b131524d2a9892bad8ccdb30aaa4e46693a0807a 100644 (file)
@@ -132,7 +132,7 @@ void add_routes(RouteTable& rt, std::istream& is, Dev& dev)
         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);
     }
 }
 
index 7b153b27b295df3a81d0b949a10227f50be5ee9a..5d9bfdf4633ffb6fc3c10d5e42a33afe625443af 100644 (file)
@@ -21,7 +21,7 @@ IPAddr::IPAddr(atom a1, atom a2, atom a3, atom a4)
 }
 
 /// Constructor
-IPAddr::IPAddr(int ip)
+IPAddr::IPAddr(uint32_t ip)
 {
     atoms[0] = ip >> 24;
     atoms[1] = ip >> 16;
@@ -29,6 +29,7 @@ IPAddr::IPAddr(int ip)
     atoms[3] = ip;
 }
 
+#if 0
 /// Constructor
 IPAddr::IPAddr(const char* ip) throw (std::logic_error)
 {
@@ -41,15 +42,23 @@ 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];
 }
index 0c0c54924c87a19c75b407ff39b33503020a2c62..b5c9cead49541fc8f090cdcdfa5cbce36b8673e9 100644 (file)
@@ -4,13 +4,14 @@
 #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];
@@ -22,16 +23,16 @@ struct IPAddr
     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;
index 255416ed63a27a99504025524e250eaa19640bb6..1f11fc1535ddd9053e61c74f50d045c222fa2721 100644 (file)
@@ -69,7 +69,7 @@ void add_routes(RouteTable& rt, std::istream& is, size_t mtu, Dev& dev)
         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);
     }
 }