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ó
27 /// Petición de un nameserver
28 /// +------------+------------+------------+
29 /// | QUERY_TYPE | SIZE | NAME |
30 /// +------------+------------+------------+
31 /// /-- 1 byte --/- 2 bytes --/- variable -/
32 struct ResolvProtoRequest
35 /// Tipo de petición (de tipo rp_pkt_type_t)
42 ResolvProtoRequest(std::string name, rp_pkt_type_t query_type);
43 ResolvProtoRequest(std::string buf);
46 void send(IPOut& ipo) const throw (std::runtime_error);
49 void recv(IPIn& ipi) throw (std::runtime_error);
51 /// Obtiene tamaño del paquete
52 size_t packet_size() const;
54 /// Convierte a un string
55 operator std::string () const;
59 /// Impresión de request
60 std::ostream& operator<< (std::ostream& os, const ResolvProtoRequest& rpr);
63 /// Respuesta de un nameserver
64 /// +-----------+-----------+-----------+-----------+-----------+-----------+
65 /// | RET | TTL | COUNT | IP 1 | ... | IP N |
66 /// +-----------+-----------+-----------+-----------+-----------+-----------+
67 /// /-- 1 byte -/- 4 bytes -/-- 1 byte -/- 4 bytes -/- 4 bytes -/- 4 bytes -/
68 struct ResolvProtoResponse
71 /// Resultado de la respuesta (de tipo rp_pkt_type_t)
74 /// TTL (sólo útil para búsquedas (inter nameserver)
78 typedef std::vector< IPAddr > ipvec_t;
82 ResolvProtoResponse();
83 ResolvProtoResponse(rp_pkt_type_t ret, uint32_t ttl = 0,
84 const ipvec_t& ips = ipvec_t());
85 ResolvProtoResponse(std::string buf);
88 void send(IPOut& ipo) const throw (std::runtime_error);
91 void recv(IPIn& ipi) throw (std::runtime_error);
93 /// Obtiene tamaño del paquete
94 size_t packet_size() const;
96 /// Convierte a un string
97 operator std::string () const;
101 /// Impresión de response
102 std::ostream& operator<< (std::ostream& os, const ResolvProtoResponse& rpr);
104 #endif // _RESOLVPROTO_H_
106 // vim: set et sw=4 sts=4 :