1 #ifndef _RESOLVPROTO_H_
2 #define _RESOLVPROTO_H_
16 RP_REQ_DIRECT, ///> Búsqueda directa (inter nameservers)
17 RP_REQ_RECURSIVE, ///> Búsqueda recursiva (para resolvers)
19 RP_RES_A, ///> OK, se devolvió un registro A
20 RP_RES_NS, ///> OK, se devolvió un registro NS (sólo en directo)
21 RP_RES_NOTFOUND, ///> No se encontró
22 RP_RES_TIMEOUT ///> Tardó demasiado la consulta
25 /// Petición de un nameserver
26 /// +------------+------------+------------+
27 /// | QUERY_TYPE | SIZE | NAME |
28 /// +------------+------------+------------+
29 /// /-- 1 byte --/- 2 bytes --/- variable -/
30 struct ResolvProtoRequest
33 /// Tipo de petición (de tipo rp_pkt_type_t)
40 ResolvProtoRequest(std::string name, rp_pkt_type_t query_type);
41 ResolvProtoRequest(std::string buf);
44 void send(IPOut& ipo) const throw (std::runtime_error);
47 void recv(IPIn& ipi) throw (std::runtime_error);
49 /// Obtiene tamaño del paquete
50 size_t packet_size() const;
52 /// Convierte a un string
53 operator std::string () const;
57 /// Impresión de request
58 std::ostream& operator<< (std::ostream& os, const ResolvProtoRequest& rpr);
61 /// Respuesta de un nameserver
62 /// +-----------+-----------+-----------+-----------+-----------+-----------+
63 /// | RET | TTL | COUNT | IP 1 | ... | IP N |
64 /// +-----------+-----------+-----------+-----------+-----------+-----------+
65 /// /-- 1 byte -/- 4 bytes -/-- 1 byte -/- 4 bytes -/- 4 bytes -/- 4 bytes -/
66 struct ResolvProtoResponse
69 /// Resultado de la respuesta (de tipo rp_pkt_type_t)
72 /// TTL (sólo útil para búsquedas (inter nameserver)
76 typedef std::vector< IPAddr > ipvec_t;
80 ResolvProtoResponse();
81 ResolvProtoResponse(rp_pkt_type_t ret, uint32_t ttl = 0,
82 const ipvec_t& ips = ipvec_t());
83 ResolvProtoResponse(std::string buf);
86 void send(IPOut& ipo) const throw (std::runtime_error);
89 void recv(IPIn& ipi) throw (std::runtime_error);
91 /// Obtiene tamaño del paquete
92 size_t packet_size() const;
94 /// Convierte a un string
95 operator std::string () const;
99 /// Impresión de response
100 std::ostream& operator<< (std::ostream& os, const ResolvProtoResponse& rpr);
102 #endif // _RESOLVPROTO_H_
104 // vim: set et sw=4 sts=4 :