44#ifndef COMMONCPP_ADDRESS_H_
45#define COMMONCPP_ADDRESS_H_
47#ifndef COMMONCPP_CONFIG_H_
48#include <commoncpp/config.h>
51#ifndef COMMONCPP_THREAD_H_
55#ifndef COMMMONCPP_EXCEPTION_H_
63#define INET_IPV4_ADDRESS_SIZE 16
64#define CIDR_IPV4_ADDRESS_SIZE 32
65#define INET_IPV6_ADDRESS_SIZE 40
66#define CIDR_IPV6_ADDRESS_SIZE 45
69#define InetAddress IPV4Address
70#define InetHostAddress IPV4Host
71#define InetMaskAddress IPV4Mask
72#define InetMcastAddress IPV4Multicast
73#define InetMcastAddressValidator IPV4MulticastValidator
74#define InetAddrValidator IPV4Validator
75#define BroadcastAddress IPV4Broadcast
92class __EXPORT IPV4Validator
95 __DELETE_COPY(IPV4Validator);
106 virtual ~IPV4Validator() {}
113 operator()(
const in_addr address)
const = 0;
124class __EXPORT IPV4MulticastValidator:
public IPV4Validator
127 __DELETE_COPY(IPV4MulticastValidator);
133 IPV4MulticastValidator(){}
138 virtual ~IPV4MulticastValidator(){}
144 void operator()(
const in_addr address)
const __OVERRIDE;
154class __EXPORT IPV4Cidr
157 struct in_addr netmask, network;
159 unsigned getMask(
const char *cp)
const;
166 inline struct in_addr getNetwork(void) const {
175 inline struct in_addr getNetmask(void) const {
184 struct in_addr getBroadcast(void) const;
192 void set(
const char *cidr);
199 IPV4Cidr(
const char *cidr);
211 IPV4Cidr(IPV4Cidr &);
219 bool isMember(
const struct sockaddr *saddr)
const;
227 bool isMember(
const struct in_addr &inaddr)
const;
229 inline bool operator==(
const struct sockaddr *a)
const {
233 inline bool operator==(
const struct in_addr &a)
const {
237 inline bool operator!=(
const struct sockaddr *a)
const {
241 inline bool operator!=(
const struct in_addr &a)
const {
254class __EXPORT IPV6Cidr
257 struct in6_addr netmask, network;
259 unsigned getMask(
const char *cp)
const;
266 inline struct in6_addr getNetwork(void) const {
275 inline struct in6_addr getNetmask(void) const {
284 struct in6_addr getBroadcast(void) const;
292 void set(
const char *cidr);
299 IPV6Cidr(
const char *cidr);
311 IPV6Cidr(IPV6Cidr &);
319 bool isMember(
const struct sockaddr *saddr)
const;
327 bool isMember(
const struct in6_addr &inaddr)
const;
329 inline bool operator==(
const struct sockaddr *sa)
const {
333 inline bool operator==(
const struct in6_addr &a)
const {
337 inline bool operator!=(
const struct sockaddr *sa)
const {
338 return !isMember(sa);
341 inline bool operator!=(
const struct in6_addr &a)
const {
362class __EXPORT IPV4Address
370 const InetAddrValidator *validator;
373 struct in_addr * ipaddr;
375 mutable char* hostname;
376#if defined(_MSWINDOWS_)
377 static MutexCounter counter;
388 bool setIPAddress(
const char *host);
396 void setAddress(
const char *host);
406 IPV4Address(
const InetAddrValidator *validator = NULL);
416 IPV4Address(
struct in_addr addr,
const InetAddrValidator *validator = NULL);
428 IPV4Address(
const char *address,
const InetAddrValidator *validator = NULL);
433 IPV4Address(
const IPV4Address &rhs);
438 virtual ~IPV4Address();
446 const char *getHostname(
void)
const;
455 bool isInetAddress(
void)
const;
464 struct in_addr getAddress(void) const;
477 struct in_addr getAddress(size_t i) const;
484 size_t getAddressCount()
const {
return addr_count; }
486 IPV4Address &operator=(
const char *str);
487 IPV4Address &operator=(
struct in_addr addr);
488 IPV4Address &operator=(
const IPV4Address &rhs);
494 IPV4Address &operator=(in_addr_t addr);
496 inline operator bool()
const {
497 return isInetAddress();
500 inline bool operator!()
const {
501 return !isInetAddress();
512 bool operator==(
const IPV4Address &a)
const;
521 bool operator!=(
const IPV4Address &a)
const;
536class __EXPORT IPV4Mask :
public IPV4Address
539 __DELETE_COPY(IPV4Mask);
548 IPV4Mask(
const char *mask);
560 friend __EXPORT IPV4Host operator&(
const IPV4Host &addr,
const IPV4Mask &mask);
566 IPV4Address &operator=(in_addr_t addr) {
567 return IPV4Address::operator =(addr);
578class __EXPORT IPV4Host :
public IPV4Address
581 static IPV4Host _host_;
596 IPV4Host(
const char *host = NULL);
605 IPV4Host(
struct in_addr addr);
611 IPV4Address &operator=(in_addr_t addr) {
612 return IPV4Address::operator =(addr);
619 IPV4Host &operator&=(
const IPV4Mask &mask);
621 friend class IPV4Mask;
622 friend __EXPORT IPV4Host operator&(
const IPV4Host &addr,
const IPV4Mask &mask);
629class __EXPORT IPV4Broadcast :
public IPV4Address
639 IPV4Broadcast(
const char *net =
"255.255.255.255");
651class __EXPORT IPV4Multicast:
public IPV4Address
666 IPV4Multicast(
const struct in_addr address);
677 IPV4Multicast(
const char *address);
687 static const IPV4MulticastValidator validator;
690extern __EXPORT std::ostream& operator<<(std::ostream &os,
const IPV4Address &ia);
693 return ia.getAddress();
709class __EXPORT IPV6Validator
712 __DELETE_COPY(IPV6Validator);
723 virtual ~IPV6Validator() {}
729 virtual void operator()(
const in6_addr address)
const = 0;
740class __EXPORT IPV6MulticastValidator:
public IPV6Validator
743 __DELETE_COPY(IPV6MulticastValidator);
749 IPV6MulticastValidator(){}
754 virtual ~IPV6MulticastValidator(){}
760 void operator()(
const in6_addr address)
const __OVERRIDE;
777class __EXPORT IPV6Address
785 const IPV6Validator *validator;
788 struct in6_addr * ipaddr;
790 mutable char* hostname;
791#if defined(_MSWINDOWS_)
792 static MutexCounter counter;
803 bool setIPAddress(
const char *host);
811 void setAddress(
const char *host);
821 IPV6Address(
const IPV6Validator *validator = NULL);
831 IPV6Address(
struct in6_addr addr,
const IPV6Validator *validator = NULL);
843 IPV6Address(
const char *address,
const IPV6Validator *validator = NULL);
848 IPV6Address(
const IPV6Address &rhs);
853 virtual ~IPV6Address();
861 const char *getHostname(
void)
const;
870 bool isInetAddress(
void)
const;
879 struct in6_addr getAddress(void) const;
892 struct in6_addr getAddress(size_t i) const;
899 size_t getAddressCount()
const {
903 IPV6Address &operator=(
const char *str);
904 IPV6Address &operator=(
struct in6_addr addr);
905 IPV6Address &operator=(
const IPV6Address &rhs);
907 inline operator bool ()
const {
908 return isInetAddress();
911 inline bool operator!()
const {
912 return !isInetAddress();
923 bool operator==(
const IPV6Address &a)
const;
932 bool operator!=(
const IPV6Address &a)
const;
947class __EXPORT IPV6Mask :
public IPV6Address
950 __DELETE_COPY(IPV6Mask);
959 IPV6Mask(
const char *mask);
971 friend __EXPORT IPV6Host operator&(
const IPV6Host &addr,
const IPV6Mask &mask);
981class __EXPORT IPV6Host :
public IPV6Address
996 IPV6Host(
const char *host = NULL);
1005 IPV6Host(
struct in6_addr addr);
1011 IPV6Host &operator&=(
const IPV6Mask &mask);
1013 friend class IPV6Mask;
1014 friend __EXPORT IPV6Host operator&(
const IPV6Host &addr,
const IPV6Mask &mask);
1021class __EXPORT IPV6Broadcast :
public IPV6Address
1031 IPV6Broadcast(
const char *net =
"255.255.255.255");
1043class __EXPORT IPV6Multicast:
public IPV6Address
1058 IPV6Multicast(
const struct in6_addr address);
1069 IPV6Multicast(
const char *address);
1079 static const IPV6MulticastValidator validator;
1082extern __EXPORT std::ostream& operator<<(std::ostream &os,
const IPV6Address &ia);
1085 return ia.getAddress();
class __attribute__((visibility("default"))) IPV4Mask class __attribute__((visibility("default"))) IPV4Host class __attribute__((visibility("default"))) IPV4Broadcast class __attribute__((visibility("default"))) IPV4Multicast __attribute__((visibility("default"))) std struct in_addr getaddress(const IPV4Address &ia)
Internet addresses used specifically as masking addresses (such as "255.255.255.0") are held in the I...
in_port_t tpport_t
Transport Protocol Ports.
GNU Common C++ exception model base classes.
Common C++ thread class and sychronization objects.