9 #ifndef __libutilxx__sella__net__IPAddressPort_H__
10 #define __libutilxx__sella__net__IPAddressPort_H__
12 #include "../../common.h"
13 #include "IPAddress.h"
17 #include <netinet/in.h>
23 #include <forward_list>
24 #include <unordered_set>
34 typedef std::shared_ptr<IPAddressPort> shared;
44 size_t operator()(
const ptr a)
const {
50 size_t operator()(
const shared &a)
const {
57 if (a == NULL || b == NULL) {
65 bool operator()(
const shared &a,
const shared &b)
const {
66 #ifdef KEYEQUAL_METHOD
67 const std::unordered_set<std::string> s;
68 const std::unordered_set<std::string>::key_equal &eqfn = s.key_eq();
70 return eqfn(a->str(), b->str());
77 typedef std::list<IPAddressPort> list;
78 typedef std::list<ptr> ptr_list;
79 typedef std::list<shared> shared_list;
80 typedef std::forward_list<IPAddressPort> flist;
81 typedef std::forward_list<ptr> ptr_flist;
82 typedef std::forward_list<shared> shared_flist;
83 typedef std::vector<IPAddressPort> vector;
84 typedef std::vector<ptr> ptr_vector;
85 typedef std::vector<shared> shared_vector;
86 typedef std::unordered_set<IPAddressPort, hash> uset;
87 typedef std::unordered_set<ptr, ptr_hash, ptr_eq> ptr_uset;
88 typedef std::unordered_set<shared, shared_hash, shared_eq> shared_uset;
89 typedef std::unordered_multiset<IPAddressPort, hash> umset;
90 typedef std::unordered_multiset<ptr, ptr_hash, ptr_eq> ptr_umset;
91 typedef std::unordered_multiset<shared, shared_hash, shared_eq> shared_umset;
98 IPAddressPort(
const std::string &address = std::string(
"0.0.0.0"), uint16_t port = 0) throw (AddressException, PortException);
99 IPAddressPort(const struct sockaddr_storage *ss) throw (AddressException, PortException);
100 IPAddressPort(const struct sockaddr *sa) throw (AddressException, PortException);
109 bool operator == (const
IPAddressPort &other) const throw ();
110 bool operator != (const
IPAddressPort &other) const throw ();
111 bool operator >= (const
IPAddressPort &other) const throw ();
112 bool operator <= (const
IPAddressPort &other) const throw ();
117 int getFamily(
void) const throw ();
118 const
IPAddress& getIPAddress(
void) const throw ();
119 const
Port& getPort(
void) const throw ();
120 const struct sockaddr_storage& getSockaddrStorage(
void) const throw ();
121 const struct sockaddr& getSockaddr(
void) const throw ();
122 const struct sockaddr_in& getSockaddrIn(
void) const throw ();
123 const struct sockaddr_in6& getSockaddrIn6(
void) const throw ();
125 bool hasIPAddress(
void) const throw ();
126 bool hasPort(
void) const throw ();
128 const std::
string& str(
void) const throw (AddressException);
129 const
char* c_str(
void) const throw (AddressException);
130 uint32_t getU32(
void) const throw ();
131 uint32_t getHash(
void) const throw ();
133 bool empty(
void) const throw ();
138 static const
IPAddressPort::shared shared_ptr(const
IPAddress &address, uint16_t port) throw (PortException);
139 static const
IPAddressPort::shared shared_ptr(const std::
string &address = std::
string("0.0.0.0"), uint16_t port = 0) throw (AddressException, PortException);
140 static const
IPAddressPort::shared shared_ptr(const struct sockaddr_storage *ss) throw (AddressException, PortException);
141 static const
IPAddressPort::shared shared_ptr(const struct sockaddr *sa) throw (AddressException, PortException);
144 static
bool shared_bi_cmp(shared &a, shared &b) {
return (*a < *b); }
145 static bool shared_bi_eq(shared &a, shared &b) {
return (*a == *b); }
152 struct sockaddr_storage ss;
154 struct sockaddr_in sa_in;
155 struct sockaddr_in6 sa_in6;
158 mutable std::string scache;
159 mutable uint32_t hcache;
161 void init(
const IPAddress &address,
const Port &port)
throw ();