]> git.llucax.com Git - z.facultad/75.74/practicos.git/commitdiff
Se vuelven para atrás los cambios de buffer y filtrado y, por el contrario, ya
authorLeandro Lucarella <llucax@gmail.com>
Fri, 23 Jun 2006 06:09:56 +0000 (06:09 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Fri, 23 Jun 2006 06:09:56 +0000 (06:09 +0000)
no se filtra tampoco por protocolo, si no que IPIn recibe cualquier cosa, y
deja el protocolo en el parámetro.

practicas/pipi/src/ip.cpp
practicas/pipi/src/ipin.cpp
practicas/pipi/src/ipin.h

index b131524d2a9892bad8ccdb30aaa4e46693a0807a..6bffcfdbbb29718db2e5bfed85e2eec668d339ca 100644 (file)
@@ -28,7 +28,7 @@ int main(int argc, char* argv[])
 {
     bool router = false;
     bool forward = false;
-    unsigned proto = 0;
+    uint8_t proto = 0;
     uint16_t port = DEVTCP_DEFAULT_PORT;
     std::string fname = "route.txt";
     if (argc < 2)
@@ -97,7 +97,8 @@ int main(int argc, char* argv[])
             IPAddr src, dst;
             std::string s = ipin.recv(proto, src, dst);
             std::cout << "Recibido '" << s << "' (len " << s.size() << ") de "
-                << src << " para " << dst << " (proto = " << proto << ")\n";
+                << src << " para " << dst << " (proto = " << unsigned(proto)
+                << ")\n";
         }
         return 0;
     }
index 73913abda23f59f33e1fbae858efacb309263a4a..1ff0560965cdbc52c47ed605b67986cde674a729 100644 (file)
@@ -27,34 +27,11 @@ void IPIn::drop(const std::string& msg, const IPHeader& iph)
 }
 
 /// Recibe un paquete IP
-std::string IPIn::recv(uint8_t proto, IPAddr& src, IPAddr& dst, bool filter)
+std::string IPIn::recv(uint8_t& proto, IPAddr& src, IPAddr& dst)
     throw (std::runtime_error)
 {
     while (true)
     {
-        // Reviso buffers completos a ver si puedo sacar algo
-        buffer_complete_type::iterator f = buffer_complete.find(proto);
-        if (f != buffer_complete.end()) // Hay algo
-        {
-            srcmap_type& srcmap = f->second;
-            srcmap_type::iterator b;
-            if (filter)
-                b = srcmap.find(src); // Si filtro, busco el que me interesa
-            else
-                b = srcmap.begin(); // Si no filtro, agarro el primero
-            if (b != srcmap.end())
-            {
-                src = b->first;
-                dst = (b->second).dst;
-                std::string data = b->second.data;
-                // Limpio buffers
-                srcmap.erase(src);
-                if (srcmap.empty())
-                    buffer_complete.erase(proto);
-                return data;
-            }
-        }
-        // Si no pude sacar nada, recibo
         std::string buf = dev.receive();
         // No es siquiera IP
         if (buf.size() < IPHeader::header_len())
@@ -127,16 +104,10 @@ std::string IPIn::recv(uint8_t proto, IPAddr& src, IPAddr& dst, bool filter)
                 << data << "'\n";
 #endif
         buffer.erase(iph);
-        // Si es un protocolo distinto o no es de quien quiero, rearmo paquete
-        // (ya sé que no hay más fragmentos) y guardo en buffer nomás
-        if ((iph.proto != proto) || (filter == true && src != iph.src))
-        {
-            buffer_complete[proto][iph.src] = BufferPkt(iph.dst, data);
-            continue;
-        }
         //TODO faltaría limpiar fragmentos viejos cada tanto (timer?)
         src = iph.src;
         dst = iph.dst;
+        proto = iph.proto;
         return data;
     }
 }
index ecdc93ebdfff71ecdc4a98d44a5867f0cb9ff75c..8a452b2cd4dcb17ec6554e96e46fd9cff884fd24 100644 (file)
@@ -47,19 +47,6 @@ struct IPIn
     typedef std::map< BufferKey, offsetmap_type > buffer_type;
     buffer_type buffer;
 
-    /// Buffers de paquetes completos
-    struct BufferPkt
-    {
-        uint32_t dst;
-        std::string data;
-        BufferPkt() {}
-        BufferPkt(const IPAddr& dst, const std::string& data):
-            dst(dst), data(data) {}
-    };
-    typedef std::map< IPAddr, BufferPkt > srcmap_type;
-    typedef std::map< uint8_t, srcmap_type > buffer_complete_type;
-    buffer_complete_type buffer_complete;
-
     /// Constructor
     IPIn(const IPAddr& ip, Dev& dev, Dev& forward_que, bool router = false,
         bool forward = false, std::ostream& log = std::cout);
@@ -69,8 +56,7 @@ struct IPIn
     void drop(const std::string& msg, const IPHeader& iph);
 
     /// Recibe un paquete IP
-    std::string recv(uint8_t proto, IPAddr& src, IPAddr& dst,
-            bool filter = false)
+    std::string recv(uint8_t& proto, IPAddr& src, IPAddr& dst)
         throw (std::runtime_error);
 
     // Nada de andar copiando placas...