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 23class WXDLLIMPEXP_NET wxSockAddress : public wxObject { 24 DECLARE_ABSTRACT_CLASS(wxSockAddress) 25public: 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 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 44protected: 45 GAddress *m_address; 46 47private: 48 void Init(); 49}; 50 51// Interface to an IP address (either IPV4 or IPV6) 52class WXDLLIMPEXP_NET wxIPaddress : public wxSockAddress { 53 DECLARE_ABSTRACT_CLASS(wxIPaddress) 54public: 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 74class WXDLLIMPEXP_NET wxIPV4address : public wxIPaddress { 75 DECLARE_DYNAMIC_CLASS(wxIPV4address) 76public: 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; 98 wxString OrigHostname() { return m_origHostname; } 99 virtual unsigned short Service() const; 100 101 // a.b.c.d 102 virtual wxString IPAddress() const; 103 104 virtual int Type() { return wxSockAddress::IPV4; } 105 virtual wxSockAddress *Clone() const; 106 107 bool operator==(const wxIPV4address& addr) const; 108 109private: 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 124class WXDLLIMPEXP_NET wxIPV6address : public wxIPaddress { 125 DECLARE_DYNAMIC_CLASS(wxIPV6address) 126private: 127 struct sockaddr_in6 *m_addr; 128public: 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 159 virtual int Type() { return wxSockAddress::IPV6; } 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 171class WXDLLIMPEXP_NET wxUNIXaddress : public wxSockAddress { 172 DECLARE_DYNAMIC_CLASS(wxUNIXaddress) 173private: 174 struct sockaddr_un *m_addr; 175public: 176 wxUNIXaddress(); 177 wxUNIXaddress(const wxUNIXaddress& other); 178 virtual ~wxUNIXaddress(); 179 180 void Filename(const wxString& name); 181 wxString Filename(); 182 183 virtual int Type() { return wxSockAddress::UNIX; } 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