RTP Trace System  1.0
internetaddress.h
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines