]> git.llucax.com Git - z.facultad/75.74/practicos.git/blob - practicas/pipi/src/resolvproto.h
Primera aproximación al cache y a la resolución de nombres.
[z.facultad/75.74/practicos.git] / practicas / pipi / src / resolvproto.h
1 #ifndef _RESOLVPROTO_H_
2 #define _RESOLVPROTO_H_
3
4 #include "ipaddr.h"
5 #include <string>
6 #include <vector>
7 #include <stdexcept>
8 #include <stdint.h>
9
10 /// Petición del resolver a un nameserver
11 struct ResolvProtoRequest
12 {
13
14     /// Tipo de petición, por ahora sólo QUERY
15     enum { TYPE_QUERY };
16
17     /// Tipo de petición, por ahora sólo QUERY
18     uint8_t type;
19
20     /// Nombre a buscar
21     std::string name;
22
23     /// Constructor
24     ResolvProtoRequest(int fd);
25
26     /// Constructor
27     ResolvProtoRequest(std::string name, uint8_t type = TYPE_QUERY);
28
29     /// Envía por socket
30     void send(int sockfd) const throw (std::runtime_error);
31
32     /// Recibe por socket
33     void recv(int sockfd) throw (std::runtime_error);
34
35 };
36
37 /// Impresión de request
38 std::ostream& operator<< (std::ostream& os, const ResolvProtoRequest& rpr);
39
40
41 /// Respuesta del resolver a un nameserver
42 struct ResolvProtoResponse
43 {
44
45     /// Resultado de la respuesta
46     enum ret_t { RET_OK, RET_NOTFOUND, RET_TIMEOUT };
47
48     /// Resultado de la respuesta
49     uint8_t ret;
50
51     /// IPs devueltas
52     typedef std::vector< IPAddr > ipvec_t;
53     ipvec_t ips;
54
55     /// Constructor
56     ResolvProtoResponse(int fd);
57
58     /// Constructor
59     ResolvProtoResponse(ret_t ret);
60
61     /// Envía por socket
62     void send(int sockfd) const throw (std::runtime_error);
63
64     /// Recibe por socket
65     void recv(int sockfd) throw (std::runtime_error);
66
67 };
68
69 /// Impresión de response
70 std::ostream& operator<< (std::ostream& os, const ResolvProtoResponse& rpr);
71
72 #endif // _RESOLVPROTO_H_
73
74 // vim: set et sw=4 sts=4 :