]> git.llucax.com Git - z.facultad/75.74/practicos.git/blobdiff - practicas/pipi/src/ipin.cpp
Agrega records al cache.
[z.facultad/75.74/practicos.git] / practicas / pipi / src / ipin.cpp
index c8ea64e8f783b9c3f7740c3f2d1dc1877ab4b075..7cb5abcfb95b42404fda0979ffe1721aa1126d84 100644 (file)
@@ -27,7 +27,8 @@ void IPIn::drop(const std::string& msg, const IPHeader& iph)
 }
 
 /// Recibe un paquete IP
 }
 
 /// Recibe un paquete IP
-std::string IPIn::recv(uint8_t proto, IPAddr& src, IPAddr& dst) throw (std::runtime_error)
+std::string IPIn::recv(uint8_t& proto, IPAddr& src, IPAddr& dst)
+    throw (std::runtime_error)
 {
     while (true)
     {
 {
     while (true)
     {
@@ -40,7 +41,7 @@ std::string IPIn::recv(uint8_t proto, IPAddr& src, IPAddr& dst) throw (std::runt
             continue;
         }
         IPHeader iph(buf);
             continue;
         }
         IPHeader iph(buf);
-#ifdef DEBUG
+#ifdef DEBUG_IP
         std::cout << "IPIn::recv (" << ip << "): IPHeader: " << iph << "\n";
         std::string tmp = buf.substr(iph.header_len());
         std::cout << "\tdata (" << tmp.size() << ") = " << tmp << "\n";
         std::cout << "IPIn::recv (" << ip << "): IPHeader: " << iph << "\n";
         std::string tmp = buf.substr(iph.header_len());
         std::cout << "\tdata (" << tmp.size() << ") = " << tmp << "\n";
@@ -87,8 +88,8 @@ std::string IPIn::recv(uint8_t proto, IPAddr& src, IPAddr& dst) throw (std::runt
         // Es para nosotros y somos un host
         // Guarda en buffer
         buffer[iph][iph.offset] = buf.substr(iph.header_len());
         // Es para nosotros y somos un host
         // Guarda en buffer
         buffer[iph][iph.offset] = buf.substr(iph.header_len());
-        // Si tiene más fragmentos o es un protocolo distinto, sigo
-        if (iph.mf || (iph.proto != proto))
+        // Si tiene más fragmentos, sigo
+        if (iph.mf)
             continue;
         // No hay más fragmentos, reensamblamos (de ser necesario)
         std::string data;
             continue;
         // No hay más fragmentos, reensamblamos (de ser necesario)
         std::string data;
@@ -98,7 +99,7 @@ std::string IPIn::recv(uint8_t proto, IPAddr& src, IPAddr& dst) throw (std::runt
             //TODO chequear que los fragmentos estén todos
             data += i->second;
         }
             //TODO chequear que los fragmentos estén todos
             data += i->second;
         }
-#ifdef DEBUG
+#ifdef DEBUG_IP
         std::cout << "IPIn::recv (" << ip << "): Paquete completo: data = '"
                 << data << "'\n";
 #endif
         std::cout << "IPIn::recv (" << ip << "): Paquete completo: data = '"
                 << data << "'\n";
 #endif
@@ -106,6 +107,7 @@ std::string IPIn::recv(uint8_t proto, IPAddr& src, IPAddr& dst) throw (std::runt
         //TODO faltaría limpiar fragmentos viejos cada tanto (timer?)
         src = iph.src;
         dst = iph.dst;
         //TODO faltaría limpiar fragmentos viejos cada tanto (timer?)
         src = iph.src;
         dst = iph.dst;
+        proto = iph.proto;
         return data;
     }
 }
         return data;
     }
 }