1 // ANNA - Anna is Not Nothingness Anymore //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
9 #ifndef anna_comm_Device_hpp
10 #define anna_comm_Device_hpp
12 #include <sys/types.h>
13 #include <sys/socket.h>
14 #include <netinet/in.h>
15 #include <arpa/inet.h>
19 #include <anna/core/RuntimeException.hpp>
32 Abstraccion de un dispositivo de Red.
33 Un Host puede tener asociado un numero indeterminado de dispositivos de red.
35 El metodo Network::find(in_addr_t) creara un nuevo dispositivo de red.
40 Estados en los que puede estar un dispositivo de red.
42 struct Status { enum _v { Down, Up }; };
45 Devuelve la direccion asociada a este instancia.
46 \return La direccion asociada a este instancia.
48 in_addr_t getAddress() const throw() { return a_address; }
51 Devuelve el estado asociado al dispositivo.
52 \return el estado asociado al dispositivo.
54 Status::_v getStatus() const throw() { return a_status; }
57 Establece el estado del dispositivo.
58 \param status Nuevo estado del dispositivo.
60 void setStatus(const Status::_v status) throw() { a_status = status; }
63 Operador de comparacion.
64 \param right Direccion con la comparar.
65 @return \em true si la direccion recibida como parametro coincide con esta.
66 \em false en otro caso.
68 bool operator == (const Device& right) const throw() { return a_address == right.a_address; }
71 Operador de comparacion.
72 \param right Direccion con la comparar.
73 @return \em true si la direccion recibida como parametro coincide con esta.
74 \em false en otro caso.
76 bool operator == (const in_addr_t& right) const throw() { return a_address == right; }
79 Operador de comparacion.
80 \param ip Direccion con la comparar. En formato A.B.C.D.
81 @return \em true si la direccion recibida como parametro coincide con esta.
82 \em false en otro caso.
84 bool operator == (const char* ip) const throw() { return a_address == inet_addr(ip); }
87 Operador de comparacion.
88 \param ip Direccion con la comparar. En formato A.B.C.D.
89 @return \em true si la direccion recibida como parametro coincide con esta.
90 \em false en otro caso.
92 bool operator == (const std::string& ip) const throw() { return a_address == inet_addr(ip.c_str()); }
96 @return \em true si la direccin recibida como par�etro coincide con �ta o
97 \em false en otro caso.
99 bool operator != (const Device& right) const throw() { return a_address != right.a_address; }
103 @return \em true si la direccin recibida como par�etro no coincide con �ta o
104 \em false en otro caso.
106 bool operator != (const in_addr_t right) const throw() { return a_address != right; }
109 Devuelve una cadena la informacion mas relevante de esta instancia.
110 @return una cadena la informacion mas relevante de esta instancia.
112 std::string asString() const throw();
115 Devuelve un documento XML con la informacion mas relevante de esta instancia.
116 \param parent Nodo XML del que deben depender los datos a crear.
117 @return Un documento XML con la informacion mas relevante de esta instancia.
119 xml::Node* asXML(xml::Node* parent) const throw(RuntimeException);
122 Incorpora los paremetros de esta instancia como atributos del nodo XML
123 recibido como parametro.
124 \param node Nodo del que dependen los atributos a crear.
126 void asAttribute(xml::Node* node) const throw(RuntimeException);
129 Devuelve el nombre de esta clase. Se puede invocar desde \code template <class T>::asString (const T*); \endcode
130 \return Devuelve el nombre de esta clase.
132 static const char* className() throw() { return "anna::comm::Device"; }
135 Devuelve la direccion INET recibida como parametro en formato cadena.
136 \param address Direccion INET a convertir.
137 \return la direccion INET recibida como parametro en formato cadena.
139 static std::string asString(const in_addr_t& address) throw();
142 Devuelve la dirección IP recibida como cadena en un tipo in_addr_t.
143 \return la dirección IP recibida como cadena en un tipo in_addr_t.
145 static in_addr_t asAddress(const std::string& ip) throw() { return inet_addr(ip.c_str()); }
150 \param ip Texto con la direccin IP en formato A.B.C.D.
152 Device(const char* ip) : a_address(inet_addr(ip)), a_status(Status::Up) {;}
156 \param ip Texto con la direccin IP en formato A.B.C.D.
158 Device(const std::string& ip) : a_address(inet_addr(ip.c_str())), a_status(Status::Up) {;}
162 \param address Direccin IP de esta instancia
164 Device(const in_addr_t& address) : a_address(address), a_status(Status::Up) {;}
168 \param other Dispositivo
170 Device(const Device& other) : a_address(other.a_address), a_status(Status::Up) {;}
173 const in_addr_t a_address;
176 friend class Network;