1 #ifndef _RESOLVPROTO_H_
2 #define _RESOLVPROTO_H_
10 /// Petición de un nameserver
11 /// +------------+------------+------------+
12 /// | QUERY_TYPE | SIZE | NAME |
13 /// +------------+------------+------------+
14 /// /-- 1 byte --/- 2 bytes --/- variable -/
15 struct ResolvProtoRequest
21 QT_DIRECT, ///> Búsqueda directa (inter nameservers)
22 QT_RECURSIVE ///> Búsqueda recursiva (para resolvers)
30 ResolvProtoRequest(int fd);
33 ResolvProtoRequest(std::string name, uint8_t query_type = QT_RECURSIVE);
36 void send(int sockfd) const throw (std::runtime_error);
39 void recv(int sockfd) throw (std::runtime_error);
43 /// Impresión de request
44 std::ostream& operator<< (std::ostream& os, const ResolvProtoRequest& rpr);
47 /// Respuesta de un nameserver
48 /// +-----------+-----------+-----------+-----------+-----------+-----------+
49 /// | RET | TTL | COUNT | IP 1 | ... | IP N |
50 /// +-----------+-----------+-----------+-----------+-----------+-----------+
51 /// /-- 1 byte -/- 4 bytes -/-- 1 byte -/- 4 bytes -/- 4 bytes -/- 4 bytes -/
52 struct ResolvProtoResponse
55 /// Resultado de la respuesta
58 R_A, ///> OK, se devolvió un registro A
59 R_NS, ///> OK, se devolvió un registro NS (sólo en directo)
60 R_NOTFOUND, ///> No se encontró
61 R_TIMEOUT ///> Tardó demasiado la consulta
65 /// TTL (sólo útil para búsquedas (inter nameserver)
69 typedef std::vector< IPAddr > ipvec_t;
73 ResolvProtoResponse(int fd);
76 ResolvProtoResponse(ret_t ret, uint32_t ttl);
79 void send(int sockfd) const throw (std::runtime_error);
82 void recv(int sockfd) throw (std::runtime_error);
86 /// Impresión de response
87 std::ostream& operator<< (std::ostream& os, const ResolvProtoResponse& rpr);
89 #endif // _RESOLVPROTO_H_
91 // vim: set et sw=4 sts=4 :