Revised OpenFlow Library  v0.6.0dev
 All Classes Files Functions Variables Friends Groups Pages
caddrinfo.h
1 /*
2  * caddrinfo.h
3  *
4  * Created on: 12.06.2014
5  * Author: andreas
6  */
7 
8 #ifndef CADDRINFO_H_
9 #define CADDRINFO_H_
10 
11 #include <sys/types.h>
12 #include <sys/socket.h>
13 #include <netdb.h>
14 #include <string.h>
15 
16 #include <string>
17 
18 #include "rofl/common/csockaddr.h"
19 #include "rofl/common/cmemory.h"
20 #include "rofl/common/logging.h"
21 #include "rofl/common/croflexception.h"
22 
23 namespace rofl {
24 
25 class eAddrInfoBase : public RoflException {
26 public:
27  eAddrInfoBase(const std::string& __arg) : RoflException(__arg) {};
28 };
29 
31 public:
32  eAddrInfoNotFound(const std::string& __arg) : eAddrInfoBase(__arg) {};
33 };
34 
35 
36 class caddrinfo {
37 public:
38 
42  caddrinfo();
43 
47  caddrinfo(
48  int ai_flags, int ai_family, int ai_socktype, int ai_protocol, const csockaddr& ai_addr);
49 
53  ~caddrinfo() {};
54 
58  caddrinfo(
59  const caddrinfo& ai) { *this = ai; };
60 
64  caddrinfo&
65  operator= (
66  const caddrinfo& ai) {
67  if (this == &ai)
68  return *this;
69  ai_flags = ai.ai_flags;
70  ai_family = ai.ai_family;
71  ai_socktype = ai.ai_socktype;
72  ai_protocol = ai.ai_protocol;
73  ai_addr = ai.ai_addr;
74  return *this;
75  };
76 
77 public:
78 
82  void
83  set_ai_flags(int ai_flags) { this->ai_flags = ai_flags; };
84 
88  int
89  get_ai_flags() const { return ai_flags; };
90 
94  void
95  set_ai_family(int ai_family) { this->ai_family = ai_family; };
96 
100  int
101  get_ai_family() const { return ai_family; };
102 
106  void
107  set_ai_socktype(int ai_socktype) { this->ai_socktype = ai_socktype; };
108 
112  int
113  get_ai_socktype() const { return ai_socktype; };
114 
118  void
119  set_ai_protocol(int ai_protocol) { this->ai_protocol = ai_protocol; };
120 
124  int
125  get_ai_protocol() const { return ai_protocol; };
126 
130  csockaddr&
131  set_ai_addr() { return ai_addr; };
132 
136  const csockaddr&
137  get_ai_addr() const { return ai_addr; };
138 
139 public:
140 
144  size_t
145  length() const;
146 
150  void
151  pack(struct addrinfo* buf, size_t buflen);
152 
156  void
157  unpack(struct addrinfo* buf, size_t buflen);
158 
159 public:
160 
161  friend std::ostream&
162  operator<< (std::ostream& os, const caddrinfo& ai) {
163  os << rofl::indent(0) << "<caddrinfo >" << std::endl;
164  os << rofl::indent(2) << "<ai_flags: " << ai.get_ai_flags() << " >" << std::endl;
165  os << rofl::indent(2) << "<ai_family: " << ai.get_ai_family() << " >" << std::endl;
166  os << rofl::indent(2) << "<ai_socktype: " << ai.get_ai_socktype() << " >" << std::endl;
167  os << rofl::indent(2) << "<ai_protocol: " << ai.get_ai_protocol() << " >" << std::endl;
168  os << rofl::indent(2) << "<ai_flags: " << ai.get_ai_flags() << " >" << std::endl;
169  os << rofl::indent(2) << "<ai_addr: >" << std::endl;
170  rofl::indent i(4);
171  os << ai.get_ai_addr();
172  return os;
173  };
174 
175 private:
176 
177  int ai_flags;
178  int ai_family;
179  int ai_socktype;
180  int ai_protocol;
181  csockaddr ai_addr;
182 };
183 
184 }; // end of namespace rofl
185 
186 #endif /* CADDRINFO_H_ */
Definition: csockaddr.h:38
Definition: caddrinfo.h:25
Definition: caddrinfo.h:36
Definition: logging.h:76
Definition: caddrinfo.h:30
Definition: croflexception.h:27