#include <stdexcept>
#include <stdint.h>
+/// Tipo de petición
+enum rp_pkt_type_t
+{
+ // requests
+ RP_REQ_DIRECT, ///> Búsqueda directa (inter nameservers)
+ RP_REQ_RECURSIVE, ///> Búsqueda recursiva (para resolvers)
+ // responses
+ RP_RES_A, ///> OK, se devolvió un registro A
+ RP_RES_NS, ///> OK, se devolvió un registro NS (sólo en directo)
+ RP_RES_NOTFOUND, ///> No se encontró
+ RP_RES_TIMEOUT ///> Tardó demasiado la consulta
+};
+
/// Petición de un nameserver
/// +------------+------------+------------+
/// | QUERY_TYPE | SIZE | NAME |
struct ResolvProtoRequest
{
- /// Tipo de petición
- enum query_type_t
- {
- QT_DIRECT, ///> Búsqueda directa (inter nameservers)
- QT_RECURSIVE ///> Búsqueda recursiva (para resolvers)
- };
+ /// Tipo de petición (de tipo rp_pkt_type_t)
uint8_t query_type;
/// Nombre a buscar
std::string name;
/// Constructores
- ResolvProtoRequest(std::string name, uint8_t query_type);
+ ResolvProtoRequest(std::string name, rp_pkt_type_t query_type);
ResolvProtoRequest(std::string buf);
/// Envía por socket
struct ResolvProtoResponse
{
- /// Resultado de la respuesta
- enum ret_t
- {
- R_A, ///> OK, se devolvió un registro A
- R_NS, ///> OK, se devolvió un registro NS (sólo en directo)
- R_NOTFOUND, ///> No se encontró
- R_TIMEOUT ///> Tardó demasiado la consulta
- };
+ /// Resultado de la respuesta (de tipo rp_pkt_type_t)
uint8_t ret;
/// TTL (sólo útil para búsquedas (inter nameserver)
/// Constructores
ResolvProtoResponse();
- ResolvProtoResponse(ret_t ret, uint32_t ttl = 0,
+ ResolvProtoResponse(rp_pkt_type_t ret, uint32_t ttl = 0,
const ipvec_t& ips = ipvec_t());
ResolvProtoResponse(std::string buf);