| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/sckaddr.h
- // Purpose: Network address classes
- // Author: Guilhem Lavaux
- // Modified by: Vadim Zeitlin to switch to wxSockAddressImpl implementation
- // Created: 26/04/1997
- // Copyright: (c) 1997, 1998 Guilhem Lavaux
- // (c) 2008, 2009 Vadim Zeitlin
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_SCKADDR_H_
- #define _WX_SCKADDR_H_
- #include "wx/defs.h"
- #if wxUSE_SOCKETS
- #include "wx/string.h"
- class wxSockAddressImpl;
- // forward declare it instead of including the system headers defining it which
- // can bring in <windows.h> under Windows which we don't want to include from
- // public wx headers
- struct sockaddr;
- // Any socket address kind
- class WXDLLIMPEXP_NET wxSockAddress : public wxObject
- {
- public:
- enum Family
- {
- NONE,
- IPV4,
- IPV6,
- UNIX
- };
- wxSockAddress();
- wxSockAddress(const wxSockAddress& other);
- virtual ~wxSockAddress();
- wxSockAddress& operator=(const wxSockAddress& other);
- virtual void Clear();
- virtual Family Type() = 0;
- // accessors for the low level address represented by this object
- const sockaddr *GetAddressData() const;
- int GetAddressDataLen() const;
- // we need to be able to create copies of the addresses polymorphically
- // (i.e. without knowing the exact address class)
- virtual wxSockAddress *Clone() const = 0;
- // implementation only, don't use
- const wxSockAddressImpl& GetAddress() const { return *m_impl; }
- void SetAddress(const wxSockAddressImpl& address);
- protected:
- wxSockAddressImpl *m_impl;
- private:
- void Init();
- DECLARE_ABSTRACT_CLASS(wxSockAddress)
- };
- // An IP address (either IPv4 or IPv6)
- class WXDLLIMPEXP_NET wxIPaddress : public wxSockAddress
- {
- public:
- wxIPaddress() : wxSockAddress() { }
- wxIPaddress(const wxIPaddress& other)
- : wxSockAddress(other),
- m_origHostname(other.m_origHostname)
- {
- }
- bool operator==(const wxIPaddress& addr) const;
- bool Hostname(const wxString& name);
- bool Service(const wxString& name);
- bool Service(unsigned short port);
- bool LocalHost();
- virtual bool IsLocalHost() const = 0;
- bool AnyAddress();
- virtual wxString IPAddress() const = 0;
- wxString Hostname() const;
- unsigned short Service() const;
- wxString OrigHostname() const { return m_origHostname; }
- protected:
- // get m_impl initialized to the right family if it hadn't been done yet
- wxSockAddressImpl& GetImpl();
- const wxSockAddressImpl& GetImpl() const
- {
- return const_cast<wxIPaddress *>(this)->GetImpl();
- }
- // host name originally passed to Hostname()
- wxString m_origHostname;
- private:
- // create the wxSockAddressImpl object of the correct family if it's
- // currently uninitialized
- virtual void DoInitImpl() = 0;
- DECLARE_ABSTRACT_CLASS(wxIPaddress)
- };
- // An IPv4 address
- class WXDLLIMPEXP_NET wxIPV4address : public wxIPaddress
- {
- public:
- wxIPV4address() : wxIPaddress() { }
- wxIPV4address(const wxIPV4address& other) : wxIPaddress(other) { }
- // implement wxSockAddress pure virtuals:
- virtual Family Type() { return IPV4; }
- virtual wxSockAddress *Clone() const { return new wxIPV4address(*this); }
- // implement wxIPaddress pure virtuals:
- virtual bool IsLocalHost() const;
- virtual wxString IPAddress() const;
- // IPv4-specific methods:
- bool Hostname(unsigned long addr);
- // make base class methods hidden by our overload visible
- //
- // FIXME-VC6: replace this with "using IPAddress::Hostname" (not supported
- // by VC6) when support for it is dropped
- wxString Hostname() const { return wxIPaddress::Hostname(); }
- bool Hostname(const wxString& name) { return wxIPaddress::Hostname(name); }
- bool BroadcastAddress();
- private:
- virtual void DoInitImpl();
- DECLARE_DYNAMIC_CLASS(wxIPV4address)
- };
- #if wxUSE_IPV6
- // An IPv6 address
- class WXDLLIMPEXP_NET wxIPV6address : public wxIPaddress
- {
- public:
- wxIPV6address() : wxIPaddress() { }
- wxIPV6address(const wxIPV6address& other) : wxIPaddress(other) { }
- // implement wxSockAddress pure virtuals:
- virtual Family Type() { return IPV6; }
- virtual wxSockAddress *Clone() const { return new wxIPV6address(*this); }
- // implement wxIPaddress pure virtuals:
- virtual bool IsLocalHost() const;
- virtual wxString IPAddress() const;
- // IPv6-specific methods:
- bool Hostname(unsigned char addr[16]);
- using wxIPaddress::Hostname;
- private:
- virtual void DoInitImpl();
- DECLARE_DYNAMIC_CLASS(wxIPV6address)
- };
- #endif // wxUSE_IPV6
- // Unix domain sockets are only available under, well, Unix
- #if defined(__UNIX__) && !defined(__WINDOWS__) && !defined(__WINE__)
- #define wxHAS_UNIX_DOMAIN_SOCKETS
- #endif
- #ifdef wxHAS_UNIX_DOMAIN_SOCKETS
- // A Unix domain socket address
- class WXDLLIMPEXP_NET wxUNIXaddress : public wxSockAddress
- {
- public:
- wxUNIXaddress() : wxSockAddress() { }
- wxUNIXaddress(const wxUNIXaddress& other) : wxSockAddress(other) { }
- void Filename(const wxString& name);
- wxString Filename() const;
- virtual Family Type() { return UNIX; }
- virtual wxSockAddress *Clone() const { return new wxUNIXaddress(*this); }
- private:
- wxSockAddressImpl& GetUNIX();
- const wxSockAddressImpl& GetUNIX() const
- {
- return const_cast<wxUNIXaddress *>(this)->GetUNIX();
- }
- DECLARE_DYNAMIC_CLASS(wxUNIXaddress)
- };
- #endif // wxHAS_UNIX_DOMAIN_SOCKETS
- #endif // wxUSE_SOCKETS
- #endif // _WX_SCKADDR_H_
|