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) // Padre
68 pid_t pid_recv = fork();
71 perror("fork() recv");
74 if (pid_recv) // Padre
76 pid_t pid_req = fork();
82 if (pid_req) // Padre (Entrada por teclado)
86 kill(pid_send, SIGTERM);
87 waitpid(pid_send, &ret, 0);
88 kill(pid_recv, SIGTERM);
89 waitpid(pid_recv, &ret, 0);
90 kill(pid_req, SIGTERM);
91 waitpid(pid_req, &ret, 0);
94 else // Hijo 1 (Proceso de request DNS)
100 else // Hijo 2 (envío del DNS)
106 else // Hijo 3 (recepción del DNS)
114 void send_loop(NameServer& ns)
117 while (std::getline(std::cin, name))
119 std::cout << "Resolviendo " << name << "...\n";
120 ResolvProtoResponse res = ns.resolv_recursive(name);
121 std::cout << "Resultado: " << res << "\n";
125 // vim: set et sw=4 sts=4 :