5 //XXX#include "resolvproto.h"
13 /// Petición del resolver a un nameserver
17 /// Nombre de un dominio dividido en tokens
18 struct Name: std::vector< std::string >
22 Name(const std::string& name);
23 operator std::string ();
26 /// Registro de una zona
30 enum type_t { A, NS };
32 /// Dirección IP del registro
35 Record(type_t t, const IPAddr& i): type(t), ip(i) {}
48 typedef std::multimap< std::string, Record > records_t;
52 Zone(std::string sname, size_t ttl, const IPAddr& parent);
53 Zone(std::istream& is) throw (std::runtime_error);
58 /// Zonas para las que este servidor de nombres es autoridad
59 typedef std::vector< Zone > zones_t;
62 /// Cache de un registro
67 /// Dirección IP del registro
68 typedef std::vector< Record > records_t;
71 CacheRecord(): ttl(0) {}
72 CacheRecord(size_t ttl, const records_t& records):
73 ttl(ttl), records(records) {}
77 typedef std::map< Name, CacheRecord > cache_t;
81 NameServer(std::istream& is) throw (std::runtime_error);
83 /// Resuelve un nombre de forma no recursiva
84 void resolv_next(const Name& n);
87 /// Impresión (para debug)
88 std::ostream& operator<< (std::ostream& os, const NameServer& ns);
89 std::ostream& operator<< (std::ostream& os, const NameServer::Name& name);
90 std::ostream& operator<< (std::ostream& os, const NameServer::Record& r);
91 std::ostream& operator<< (std::ostream& os, const NameServer::Zone& z);
92 std::ostream& operator<< (std::ostream& os, const NameServer::CacheRecord& cr);
94 #endif // _NAMESERVER_H_
96 // vim: set et sw=4 sts=4 :