X-Git-Url: https://git.llucax.com/z.facultad/75.74/practicos.git/blobdiff_plain/c5c7f9d1eedf0faf5ab7581c56ef1ca700d58fb5..ac1d74a402f344ad8135f125cbac73ecda46172e:/practicas/pipi/src/nameserver.h?ds=sidebyside diff --git a/practicas/pipi/src/nameserver.h b/practicas/pipi/src/nameserver.h index dbaecf7..2dab7a3 100644 --- a/practicas/pipi/src/nameserver.h +++ b/practicas/pipi/src/nameserver.h @@ -1,6 +1,7 @@ #ifndef _NAMESERVER_H_ #define _NAMESERVER_H_ +#include "devque.h" #include "ipaddr.h" #include "resolvproto.h" #include @@ -20,7 +21,7 @@ struct NameServer /// Constructor Name() {} Name(const std::string& name); - operator std::string (); + operator std::string () const; }; /// Registro de una zona @@ -77,8 +78,20 @@ struct NameServer typedef std::map< Name, CacheRecord > cache_t; cache_t cache; + /// IP + IPIn& ipin; + IPOut& ipout; + + /// Colas de recepción + DevQue& req_que; // De requests + DevQue& res_que; // De responses + + /// Cola de envío + DevQue& snd_que; + /// Constructor - NameServer(std::istream& is) throw (std::runtime_error); + NameServer(std::istream& is, IPIn& ipin, IPOut& ipout, DevQue& req_que, + DevQue& res_que, DevQue& snd_que) throw (std::runtime_error); /// Resuelve un nombre de forma directa (no recursiva) ResolvProtoResponse resolv_direct(const Name& n); @@ -89,6 +102,15 @@ struct NameServer /// Consulta a otro name server sobre un nombre ResolvProtoResponse query(const Name&n, const IPAddr& ip); + /// Loop que recibe y carga los paquetes en las colas para ser procesados + void recv_loop(); + + /// Loop que envía los paquetes de la cola de envío + void send_loop(); + + /// Loop que procesa los requests + void req_loop(); + private: /// Resuelve un nombre de forma recursiva entrando a otros ns ResolvProtoResponse resolv_recursive_r(const Name& n,