1 #ifndef _RESOLVPROTO_H_
2 #define _RESOLVPROTO_H_
12 /// Número de protocolo del resolver
13 #define RESOLV_PROTO 59
19 RP_REQ_DIRECT, ///> Búsqueda directa (inter nameservers)
20 RP_REQ_RECURSIVE, ///> Búsqueda recursiva (para resolvers)
22 RP_RES_A, ///> OK, se devolvió un registro A
23 RP_RES_NS, ///> OK, se devolvió un registro NS (sólo en directo)
24 RP_RES_NOTFOUND, ///> No se encontró
25 RP_RES_TIMEOUT ///> Tardó demasiado la consulta
28 /// Petición de un nameserver
29 /// +------------+------------+------------+
30 /// | QUERY_TYPE | SIZE | NAME |
31 /// +------------+------------+------------+
32 /// /-- 1 byte --/- 2 bytes --/- variable -/
33 struct ResolvProtoRequest
36 /// Tipo de petición (de tipo rp_pkt_type_t)
43 ResolvProtoRequest(std::string name, rp_pkt_type_t query_type);
44 ResolvProtoRequest(std::string buf);
47 void send(IPOut& ipo) const throw (std::runtime_error);
50 void recv(IPIn& ipi) throw (std::runtime_error);
52 /// Obtiene tamaño del paquete
53 size_t packet_size() const;
55 /// Convierte a un string
56 operator std::string () const;
60 /// Impresión de request
61 std::ostream& operator<< (std::ostream& os, const ResolvProtoRequest& rpr);
64 /// Respuesta de un nameserver
65 /// +-----------+-----------+-----------+-----------+-----------+-----------+
66 /// | RET | TTL | COUNT | IP 1 | ... | IP N |
67 /// +-----------+-----------+-----------+-----------+-----------+-----------+
68 /// /-- 1 byte -/- 4 bytes -/-- 1 byte -/- 4 bytes -/- 4 bytes -/- 4 bytes -/
69 struct ResolvProtoResponse
72 /// Resultado de la respuesta (de tipo rp_pkt_type_t)
75 /// TTL (sólo útil para búsquedas (inter nameserver)
79 typedef std::vector< IPAddr > ipvec_t;
83 ResolvProtoResponse();
84 ResolvProtoResponse(rp_pkt_type_t ret, uint32_t ttl = 0,
85 const ipvec_t& ips = ipvec_t());
86 ResolvProtoResponse(std::string buf);
89 void send(IPOut& ipo) const throw (std::runtime_error);
92 void recv(IPIn& ipi) throw (std::runtime_error);
94 /// Obtiene tamaño del paquete
95 size_t packet_size() const;
97 /// Convierte a un string
98 operator std::string () const;
102 /// Impresión de response
103 std::ostream& operator<< (std::ostream& os, const ResolvProtoResponse& rpr);
105 #endif // _RESOLVPROTO_H_
107 // vim: set et sw=4 sts=4 :