X-Git-Url: https://git.llucax.com/z.facultad/75.74/practicos.git/blobdiff_plain/884eacf83ee1dd782e111952ca0ee468fafde9ad..1a2bb56c4c44080e941e6a7dc2420a404bceba5b:/practicas/pipi/src/ipin.cpp diff --git a/practicas/pipi/src/ipin.cpp b/practicas/pipi/src/ipin.cpp index c8ea64e..7cb5abc 100644 --- a/practicas/pipi/src/ipin.cpp +++ b/practicas/pipi/src/ipin.cpp @@ -27,7 +27,8 @@ 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) throw (std::runtime_error) +std::string IPIn::recv(uint8_t& proto, IPAddr& src, IPAddr& dst) + throw (std::runtime_error) { while (true) { @@ -40,7 +41,7 @@ std::string IPIn::recv(uint8_t proto, IPAddr& src, IPAddr& dst) throw (std::runt 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"; @@ -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()); - // 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; @@ -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; } -#ifdef DEBUG +#ifdef DEBUG_IP 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; + proto = iph.proto; return data; } }