]> git.llucax.com Git - z.facultad/75.74/practicos.git/blobdiff - practicas/pipi/src/nameserver.cpp
Se saca TCP por abajo del protocolo de resolución (que estaba de más porque va
[z.facultad/75.74/practicos.git] / practicas / pipi / src / nameserver.cpp
index 822f6f645adf2d424a068e8380a9a859af65d2ad..cf7dac33208141847e82138977b0f5d2902c326c 100644 (file)
@@ -248,17 +248,29 @@ ResolvProtoResponse NameServer::resolv_direct(const Name& n)
     }
     if (zones.size())
     {
     }
     if (zones.size())
     {
+        // Busco una zona con padre para ver si puedo "trepar"
+        for (zones_t::const_iterator i = zones.begin(); i != zones.end(); ++i)
+        {
 #ifdef DEBUG_RESOLV
 #ifdef DEBUG_RESOLV
-        std::cerr << "resolv_direct found (al padre): " << zones.front().parent
+            std::cerr << "resolv_direct -> evaluando padre " << i->parent
                 << "\n";
                 << "\n";
-        ResolvProtoResponse rpr(ResolvProtoResponse::R_NS, zones.front().ttl);
-        rpr.ips.push_back(zones.front().parent);
-        return rpr;
 #endif
 #endif
+            if (i->parent != IPAddr(0))
+            {
+#ifdef DEBUG_RESOLV
+                std::cerr << "resolv_direct found (al padre): "
+                    << i->parent << "\n";
+#endif
+                ResolvProtoResponse rpr(ResolvProtoResponse::R_NS, i->ttl);
+                rpr.ips.push_back(i->parent);
+                return rpr;
+            }
+        }
     }
 #ifdef DEBUG_RESOLV
     std::cerr << "resolv_direct NOT FOUND (no hay padre)\n";
 #endif
     }
 #ifdef DEBUG_RESOLV
     std::cerr << "resolv_direct NOT FOUND (no hay padre)\n";
 #endif
+    // No hay padre, no puedo hacer nada más
     return ResolvProtoResponse(ResolvProtoResponse::R_NOTFOUND);
 }
 
     return ResolvProtoResponse(ResolvProtoResponse::R_NOTFOUND);
 }