RTP Trace System
1.0
|
00001 // ########################################################################## 00002 // #### #### 00003 // #### RTP Audio Server Project #### 00004 // #### ============================ #### 00005 // #### #### 00006 // #### Internet Address #### 00007 // #### #### 00008 // #### Version 1.00 -- February 16, 2001 #### 00009 // #### #### 00010 // #### Copyright (C) 1999 Thomas Dreibholz #### 00011 // #### 2000 Universität Bonn, Abt. IV #### 00012 // #### 2001 EMail: dreibh@iem.uni-due.de #### 00013 // #### WWW: https://www.uni-due.de/~be0001 #### 00014 // #### #### 00015 // ########################################################################## 00016 00017 00018 #ifndef INTERNETADDRESS_H 00019 #define INTERNETADDRESS_H 00020 00021 00022 #include "system.h" 00023 #include "strings.h" 00024 #include "socketaddress.h" 00025 #include "portableaddress.h" 00026 00027 00028 #include <netinet/in.h> 00029 #include <resolv.h> 00030 00031 00032 namespace Coral { 00033 00034 00042 class InternetAddress : virtual public SocketAddress 00043 { 00044 // ====== Constructors/Destructor ======================================== 00045 public: 00049 InternetAddress(); 00050 00056 InternetAddress(const InternetAddress& address); 00057 00064 InternetAddress(const String& address); 00065 00072 InternetAddress(const String& hostName, 00073 const card16 port); 00074 00080 InternetAddress(const card16 port); 00081 00089 InternetAddress(sockaddr* address, socklen_t length); 00090 00094 ~InternetAddress(); 00095 00096 00097 // ====== Initialization ================================================= 00101 void reset(); 00102 00106 void init(const InternetAddress& address); 00107 00113 void init(const card16 port); 00114 00121 void init(const String& hostName, const card16 port); 00122 00123 00124 // ====== Operators ====================================================== 00128 inline InternetAddress& operator=(const InternetAddress& source); 00129 00130 00131 // ====== Address manipulation =========================================== 00135 inline card16 getPort() const; 00136 00140 inline void setPort(const card16 port); 00141 00142 // ====== Print format =================================================== 00146 enum PrintFormat { 00147 PF_Address = (1 << 0), 00148 PF_Hostname = (1 << 1), 00149 PF_Full = PF_Address | PF_Hostname 00150 }; 00151 00157 inline PrintFormat getPrintFormat() const; 00158 00164 inline void setPrintFormat(const PrintFormat format); 00165 00166 00167 // ====== Address functions ============================================== 00173 bool isValid() const; 00174 00180 inline bool isNull() const; 00181 00187 String getAddressString() const; 00188 00194 inline bool isIPv4() const; 00195 00203 inline bool isIPv6() const; 00204 00205 00206 // ====== Get local address for a connection ============================= 00220 static InternetAddress getLocalAddress(const InternetAddress& peer); 00221 00222 00223 // ====== Get/set system sockaddr structure ============================== 00229 cardinal getSystemAddress(sockaddr* buffer, 00230 const socklen_t length, 00231 const cardinal type) const; 00232 00238 bool setSystemAddress(sockaddr* address, const socklen_t length); 00239 00240 00241 // ====== IPv6 support functions ======================================== 00251 static cardinal getHostByName(const String& name, card16* myadr); 00252 00258 static inline bool hasIPv6(); 00259 00267 static bool UseIPv6; 00268 00269 00270 // ====== Comparision operators ========================================= 00274 int operator==(const InternetAddress& address) const; 00275 00279 inline int operator!=(const InternetAddress& address) const; 00280 00284 int operator<(const InternetAddress& address) const; 00285 00289 inline int operator<=(const InternetAddress& address) const; 00290 00294 int operator>(const InternetAddress& address) const; 00295 00299 inline int operator>=(const InternetAddress& address) const; 00300 00301 00302 // ====== Conversion from and to PortableAddress ========================= 00308 inline PortableAddress getPortableAddress() const; 00309 00315 InternetAddress(const PortableAddress& address); 00316 00322 void init(const PortableAddress& address); 00323 00324 00325 // ====== Private data =================================================== 00326 private: 00327 static bool checkIPv6(); 00328 00329 00330 private: 00335 card16 Host[8]; 00336 00340 card16 Port; 00341 00345 PrintFormat Format; 00346 00350 bool Valid; 00351 }; 00352 00353 00354 } 00355 00356 00357 #include "internetaddress.icc" 00358 00359 00360 #endif