5 #include "routetable.h"
8 #include "nameserver.h"
16 #include <sys/types.h>
22 // Uso: ./dns ip [routes_file zones_file forward port]
24 void send_loop(NameServer& ns);
26 int main(int argc, char* argv[])
28 uint16_t port = DEVTCP_DEFAULT_PORT;
29 std::string rfile = "route.txt";
30 std::string zfile = "zones.txt";
33 std::cerr << "Uso: " << argv[0] << " ip [route_file zone_file port]\n";
43 // Abro archivo con rutas
44 std::ifstream rifs(rfile.c_str()); assert(rifs);
45 // Abro archivo con zonas
46 std::ifstream zifs(zfile.c_str()); assert(zifs);
47 // Creo medio físico y colas para forwarding y NameServer
48 DevTCP dev(addr, port);
49 DevQue fwque(addr, DEVQUE_DEFAULT_KEY-1);
50 DevQue nsreqque(addr, DEVQUE_DEFAULT_KEY-2);
51 DevQue nsresque(addr, DEVQUE_DEFAULT_KEY-3);
52 DevQue nssndque(addr, DEVQUE_DEFAULT_KEY-4);
53 // Creo Rutas, IPOut, IPIn
54 RouteTable table(dev);
55 add_routes(table, rifs, dev);
56 IPOut ipout(addr, table, fwque, std::cerr);
57 IPIn ipin(addr, dev, fwque, false, false, std::cerr);
58 NameServer ns(zifs, ipin, ipout, nsreqque, nsresque, nssndque);
60 pid_t pid_send = fork();
63 perror("fork() send");
66 if (pid_send) // IPOut
68 pid_t pid_fw = fork();
71 perror("fork() forward");
74 if (pid_fw) // Padre (Entrada por teclado)
78 kill(pid_send, SIGTERM);
79 waitpid(pid_send, &ret, 0);
80 kill(pid_fw, SIGTERM);
81 waitpid(pid_fw, &ret, 0);
84 else // Hijo 1 (envío del DNS)
90 else // Hijo 2 (recepción del DNS)
98 void send_loop(NameServer& ns)
101 while (std::getline(std::cin, name))
103 std::cout << "Resolviendo " << name << "...\n";
104 ResolvProtoResponse res = ns.resolv_recursive(name);
105 std::cout << "Resultado: " << res << "\n";
109 // vim: set et sw=4 sts=4 :