5 #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 ResolvProtoResponse::ipvec_t ipvec_t;
71 CacheRecord(): ttl(0) {}
72 CacheRecord(size_t ttl, const ipvec_t& ips):
77 typedef std::map< Name, CacheRecord > cache_t;
81 NameServer(std::istream& is) throw (std::runtime_error);
83 /// Resuelve un nombre de forma directa (no recursiva)
84 ResolvProtoResponse resolv_direct(const Name& n);
86 /// Resuelve un nombre de forma recursiva
87 ResolvProtoResponse resolv_recursive(const Name& n);
89 /// Consulta a otro name server sobre un nombre
90 ResolvProtoResponse query(const Name&n, const IPAddr& ip);
93 /// Resuelve un nombre de forma recursiva entrando a otros ns
94 ResolvProtoResponse resolv_recursive_r(const Name& n,
95 ResolvProtoResponse rpr);
99 /// Impresión (para debug)
100 std::ostream& operator<< (std::ostream& os, const NameServer& ns);
101 std::ostream& operator<< (std::ostream& os, const NameServer::Name& name);
102 std::ostream& operator<< (std::ostream& os, const NameServer::Record& r);
103 std::ostream& operator<< (std::ostream& os, const NameServer::Zone& z);
104 std::ostream& operator<< (std::ostream& os, const NameServer::CacheRecord& cr);
106 #endif // _NAMESERVER_H_
108 // vim: set et sw=4 sts=4 :