1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: sckaddr.h 3 // Purpose: Network address classes 4 // Author: Guilhem Lavaux 5 // Modified by: 6 // Created: 26/04/1997 7 // RCS-ID: $Id: sckaddr.h 35665 2005-09-24 21:43:15Z VZ $ 8 // Copyright: (c) 1997, 1998 Guilhem Lavaux 9 // Licence: wxWindows licence 10 ///////////////////////////////////////////////////////////////////////////// 11 12 #ifndef _WX_NETWORK_ADDRESS_H 13 #define _WX_NETWORK_ADDRESS_H 14 15 #include "wx/defs.h" 16 17 #if wxUSE_SOCKETS 18 19 #include "wx/string.h" 20 #include "wx/gsocket.h" 21 22 23 class WXDLLIMPEXP_NET wxSockAddress : public wxObject { 24 DECLARE_ABSTRACT_CLASS(wxSockAddress) 25 public: 26 typedef enum { IPV4=1, IPV6=2, UNIX=3 } Addr; 27 28 wxSockAddress(); 29 wxSockAddress(const wxSockAddress& other); 30 virtual ~wxSockAddress(); 31 32 wxSockAddress& operator=(const wxSockAddress& other); 33 34 virtual void Clear(); 35 virtual int Type() = 0; 36 GetAddress()37 GAddress *GetAddress() const { return m_address; } 38 void SetAddress(GAddress *address); 39 40 // we need to be able to create copies of the addresses polymorphically (i.e. 41 // without knowing the exact address class) 42 virtual wxSockAddress *Clone() const = 0; 43 44 protected: 45 GAddress *m_address; 46 47 private: 48 void Init(); 49 }; 50 51 // Interface to an IP address (either IPV4 or IPV6) 52 class WXDLLIMPEXP_NET wxIPaddress : public wxSockAddress { 53 DECLARE_ABSTRACT_CLASS(wxIPaddress) 54 public: 55 wxIPaddress(); 56 wxIPaddress(const wxIPaddress& other); 57 virtual ~wxIPaddress(); 58 59 virtual bool Hostname(const wxString& name) = 0; 60 virtual bool Service(const wxString& name) = 0; 61 virtual bool Service(unsigned short port) = 0; 62 63 virtual bool LocalHost() = 0; 64 virtual bool IsLocalHost() const = 0; 65 66 virtual bool AnyAddress() = 0; 67 68 virtual wxString IPAddress() const = 0; 69 70 virtual wxString Hostname() const = 0; 71 virtual unsigned short Service() const = 0; 72 }; 73 74 class WXDLLIMPEXP_NET wxIPV4address : public wxIPaddress { 75 DECLARE_DYNAMIC_CLASS(wxIPV4address) 76 public: 77 wxIPV4address(); 78 wxIPV4address(const wxIPV4address& other); 79 virtual ~wxIPV4address(); 80 81 // IPV4 name formats 82 // 83 // hostname 84 // dot format a.b.c.d 85 virtual bool Hostname(const wxString& name); 86 bool Hostname(unsigned long addr); 87 virtual bool Service(const wxString& name); 88 virtual bool Service(unsigned short port); 89 90 // localhost (127.0.0.1) 91 virtual bool LocalHost(); 92 virtual bool IsLocalHost() const; 93 94 // any (0.0.0.0) 95 virtual bool AnyAddress(); 96 97 virtual wxString Hostname() const; OrigHostname()98 wxString OrigHostname() { return m_origHostname; } 99 virtual unsigned short Service() const; 100 101 // a.b.c.d 102 virtual wxString IPAddress() const; 103 Type()104 virtual int Type() { return wxSockAddress::IPV4; } 105 virtual wxSockAddress *Clone() const; 106 107 bool operator==(const wxIPV4address& addr) const; 108 109 private: 110 wxString m_origHostname; 111 }; 112 113 114 // the IPv6 code probably doesn't work, untested -- set to 1 at your own risk 115 #ifndef wxUSE_IPV6 116 #define wxUSE_IPV6 0 117 #endif 118 119 #if wxUSE_IPV6 120 121 // Experimental Only: 122 // 123 // IPV6 has not yet been implemented in socket layer 124 class WXDLLIMPEXP_NET wxIPV6address : public wxIPaddress { 125 DECLARE_DYNAMIC_CLASS(wxIPV6address) 126 private: 127 struct sockaddr_in6 *m_addr; 128 public: 129 wxIPV6address(); 130 wxIPV6address(const wxIPV6address& other); 131 virtual ~wxIPV6address(); 132 133 // IPV6 name formats 134 // 135 // hostname 136 // 3ffe:ffff:0100:f101:0210:a4ff:fee3:9566 137 // compact (base85) Itu&-ZQ82s>J%s99FJXT 138 // compressed format ::1 139 // ipv4 mapped ::ffff:1.2.3.4 140 virtual bool Hostname(const wxString& name); 141 142 bool Hostname(unsigned char addr[16]); 143 virtual bool Service(const wxString& name); 144 virtual bool Service(unsigned short port); 145 146 // localhost (0000:0000:0000:0000:0000:0000:0000:0001 (::1)) 147 virtual bool LocalHost(); 148 virtual bool IsLocalHost() const; 149 150 // any (0000:0000:0000:0000:0000:0000:0000:0000 (::)) 151 virtual bool AnyAddress(); 152 153 // 3ffe:ffff:0100:f101:0210:a4ff:fee3:9566 154 virtual wxString IPAddress() const; 155 156 virtual wxString Hostname() const; 157 virtual unsigned short Service() const; 158 Type()159 virtual int Type() { return wxSockAddress::IPV6; } Clone()160 virtual wxSockAddress *Clone() const { return new wxIPV6address(*this); } 161 }; 162 163 #endif // wxUSE_IPV6 164 165 #if defined(__UNIX__) && !defined(__WINE__) && (!defined(__WXMAC__) || defined(__DARWIN__)) && !defined(__WXMSW__) 166 #include <sys/socket.h> 167 #ifndef __VMS__ 168 # include <sys/un.h> 169 #endif 170 171 class WXDLLIMPEXP_NET wxUNIXaddress : public wxSockAddress { 172 DECLARE_DYNAMIC_CLASS(wxUNIXaddress) 173 private: 174 struct sockaddr_un *m_addr; 175 public: 176 wxUNIXaddress(); 177 wxUNIXaddress(const wxUNIXaddress& other); 178 virtual ~wxUNIXaddress(); 179 180 void Filename(const wxString& name); 181 wxString Filename(); 182 Type()183 virtual int Type() { return wxSockAddress::UNIX; } Clone()184 virtual wxSockAddress *Clone() const { return new wxUNIXaddress(*this); } 185 }; 186 #endif 187 // __UNIX__ 188 189 #endif 190 // wxUSE_SOCKETS 191 192 #endif 193 // _WX_NETWORK_ADDRESS_H 194