ANNA Suite  2020b
Multipurpose development suite for Telco applications
Device.hpp
Go to the documentation of this file.
1 // ANNA - Anna is Not Nothingness Anymore //
2 // //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
4 // //
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 //
7 
8 
9 #ifndef anna_comm_Device_hpp
10 #define anna_comm_Device_hpp
11 
12 #include <sys/types.h>
13 #include <sys/socket.h>
14 #include <netinet/in.h>
15 #include <arpa/inet.h>
16 
17 #include <string>
18 
20 
21 namespace anna {
22 
23 namespace xml {
24 class Node;
25 }
26 
27 namespace comm {
28 
29 class Network;
30 
37 class Device {
38 public:
42  struct Status { enum _v { Down, Up }; };
43 
48  in_addr_t getAddress() const { return a_address; }
49 
54  Status::_v getStatus() const { return a_status; }
55 
60  void setStatus(const Status::_v status) { a_status = status; }
61 
68  bool operator == (const Device& right) const { return a_address == right.a_address; }
69 
76  bool operator == (const in_addr_t& right) const { return a_address == right; }
77 
84  bool operator == (const char* ip) const { return a_address == inet_addr(ip); }
85 
92  bool operator == (const std::string& ip) const { return a_address == inet_addr(ip.c_str()); }
93 
99  bool operator != (const Device& right) const { return a_address != right.a_address; }
100 
106  bool operator != (const in_addr_t right) const { return a_address != right; }
107 
112  std::string asString() const ;
113 
119  xml::Node* asXML(xml::Node* parent) const noexcept(false);
120 
126  void asAttribute(xml::Node* node) const noexcept(false);
127 
132  static const char* className() { return "anna::comm::Device"; }
133 
139  static std::string asString(const in_addr_t& address) ;
140 
145  static in_addr_t asAddress(const std::string& ip) { return inet_addr(ip.c_str()); }
146 
147 protected:
152  Device(const char* ip) : a_address(inet_addr(ip)), a_status(Status::Up) {;}
153 
158  Device(const std::string& ip) : a_address(inet_addr(ip.c_str())), a_status(Status::Up) {;}
159 
164  Device(const in_addr_t& address) : a_address(address), a_status(Status::Up) {;}
165 
170  Device(const Device& other) : a_address(other.a_address), a_status(Status::Up) {;}
171 
172 private:
173  const in_addr_t a_address;
174  Status::_v a_status;
175 
176  friend class Network;
177 };
178 
179 }
180 }
181 
182 #endif
183 
184 
185 
Device(const Device &other)
Definition: Device.hpp:170
Definition: Node.hpp:56
static const char * className()
Definition: Device.hpp:132
in_addr_t getAddress() const
Definition: Device.hpp:48
Device(const std::string &ip)
Definition: Device.hpp:158
Definition: Device.hpp:37
Device(const in_addr_t &address)
Definition: Device.hpp:164
Definition: Device.hpp:42
Definition: Network.hpp:37
void setStatus(const Status::_v status)
Definition: Device.hpp:60
xml::Node Node
Definition: Node.hpp:21
Status::_v getStatus() const
Definition: Device.hpp:54
Device(const char *ip)
Definition: Device.hpp:152
Definition: app.hpp:12
static in_addr_t asAddress(const std::string &ip)
Definition: Device.hpp:145
_v
Definition: Device.hpp:42